Načtení dalších dat z Power BI
Rozhraní fetchMoreData API umožňuje načíst datové bloky různých velikostí jako způsob, jak vizuálům Power BI umožnit obejít pevný limit zobrazení dat 30 tisíc řádků. Kromě původního přístupu agregace všech požadovaných bloků dat teď rozhraní API podporuje také přírůstkové načítání datových bloků.
Můžete předem nakonfigurovat počet řádků, které se mají načíst najednou, nebo můžete použít příkaz dataReductionCustomization
, který autorovi sestavy umožní dynamicky nastavit velikost bloku dat.
Poznámka
Rozhraní fetchMoreData
API je k dispozici ve verzi 3.4 a vyšší.
Dynamické dataReductionCustomization
rozhraní API je k dispozici ve verzi 5.2 a vyšší.
Pokud chcete zjistit, kterou verzi používáte, podívejte se do apiVersion
souboru pbiviz.json .
Povolení segmentovaného načtení velkých datových sad
V souboru capabilities.json vizuálu definujte dataReductionAlgorithm
velikost okna pro požadovanou dataViewMapping
hodnotu . Určuje count
velikost okna, která omezuje počet nových řádků dat, které můžete připojit k objektu dataview
v každé aktualizaci.
Do souboru capabilities.json přidejte například následující kód pro připojení 100 řádků dat najednou:
"dataViewMappings": [
{
"table": {
"rows": {
"for": {
"in": "values"
},
"dataReductionAlgorithm": {
"window": {
"count": 100
}
}
}
}
]
Nové segmenty se připojí k existujícímu objektu dataview
a poskytnou vizuálu jako volání update
.
Použití funkce fetchMoreData ve vizuálu Power BI
V Power BI můžete fetchMoreData
použít jeden ze dvou způsobů:
- režim agregace segmentů
- režim přírůstkových aktualizací
Režim agregace segmentů (výchozí)
V režimu agregace segmentů obsahuje zobrazení dat, které je k dispozici vizuálu, shromážděná data ze všech předchozích fetchMoreData requests
. Proto velikost zobrazení dat roste s každou aktualizací podle velikosti okna. Pokud se například očekává celkem 100 000 řádků a velikost okna je nastavená na 10 000, první zobrazení dat aktualizace by mělo obsahovat 10 000 řádků, druhé zobrazení dat aktualizace by mělo obsahovat 20 000 řádků atd.
Vyberte režim agregace segmentů voláním fetchMoreData
s aggregateSegments = true
.
Pokud chcete zjistit, jestli data existují, zkontrolujte přítomnost dataView.metadata.segment
:
public update(options: VisualUpdateOptions) {
const dataView = options.dataViews[0];
console.log(dataView.metadata.segment);
// output: __proto__: Object
}
Kontrolou můžete také zkontrolovat, jestli se jedná o první aktualizaci nebo následnou options.operationKind
aktualizaci. V následujícím kódu VisualDataChangeOperationKind.Create
odkazuje na první segment a VisualDataChangeOperationKind.Append
odkazuje na další segmenty.
// CV update implementation
public update(options: VisualUpdateOptions) {
// indicates this is the first segment of new data.
if (options.operationKind == VisualDataChangeOperationKind.Create) {
}
// on second or subsequent segments:
if (options.operationKind == VisualDataChangeOperationKind.Append) {
}
// complete update implementation
}
Můžete také vyvolat metodu fetchMoreData
z obslužné rutiny události uživatelského rozhraní:
btn_click(){
{
// check if more data is expected for the current data view
if (dataView.metadata.segment) {
// request for more data if available; as a response, Power BI will call update method
let request_accepted: bool = this.host.fetchMoreData(true);
// handle rejection
if (!request_accepted) {
// for example, when the 100 MB limit has been reached
}
}
}
Jako odpověď na volání metody this.host.fetchMoreData
zavolá Power BI metodu update
vizuálu s novým segmentem dat.
Poznámka
Aby se zabránilo omezením paměti klienta, Power BI omezuje celkový počet načtených dat na 100 MB. Po dosažení tohoto limitu fetchMoreData()
vrátí .false
Režim přírůstkových aktualizací
V režimu přírůstkových aktualizací obsahuje zobrazení dat, které je k dispozici vizuálu, pouze další sadu přírůstkových dat. Velikost zobrazení dat se rovná definované velikosti okna (nebo menší, pokud je poslední bit dat menší než velikost okna). Pokud se například očekává celkem 101 000 řádků a velikost okna je nastavená na 10 000, vizuál dostane 10 aktualizací s velikostí zobrazení dat 10 000 a jednu aktualizaci se zobrazením dat o velikosti 1 000.
Režim přírůstkových aktualizací se vybere voláním fetchMoreData
s aggregateSegments = false
.
Pokud chcete zjistit, jestli data existují, zkontrolujte přítomnost dataView.metadata.segment
:
public update(options: VisualUpdateOptions) {
const dataView = options.dataViews[0];
console.log(dataView.metadata.segment);
// output: __proto__: Object
}
Kontrolou options.operationKind
můžete také zkontrolovat, jestli se jedná o první aktualizaci, nebo o následnou aktualizaci. V následujícím kódu VisualDataChangeOperationKind.Create
odkazuje na první segment a VisualDataChangeOperationKind.Segment
odkazuje na následné segmenty.
// CV update implementation
public update(options: VisualUpdateOptions) {
// indicates this is the first segment of new data.
if (options.operationKind == VisualDataChangeOperationKind.Create) {
}
// on second or subsequent segments:
if (options.operationKind == VisualDataChangeOperationKind.Segment) {
}
// skip overlapping rows
const rowOffset = (dataView.table['lastMergeIndex'] === undefined) ? 0 : dataView.table['lastMergeIndex'] + 1;
// Process incoming data
for (var i = rowOffset; i < dataView.table.rows.length; i++) {
var val = <number>(dataView.table.rows[i][0]); // Pick first column
}
// complete update implementation
}
Můžete také vyvolat metodu fetchMoreData
z obslužné rutiny události uživatelského rozhraní:
btn_click(){
{
// check if more data is expected for the current data view
if (dataView.metadata.segment) {
// request for more data if available; as a response, Power BI will call update method
let request_accepted: bool = this.host.fetchMoreData(false);
// handle rejection
if (!request_accepted) {
// for example, when the 100 MB limit has been reached
}
}
}
Jako odpověď na volání metody this.host.fetchMoreData
zavolá Power BI metodu update
vizuálu s novým segmentem dat.
Poznámka
I když jsou data v různých aktualizacích zobrazení dat většinou výhradní, mezi po sobě jdoucími zobrazeními dat se určitá část překrývá.
U mapování tabulek a kategorických dat lze očekávat, že první N
řádky zobrazení dat budou obsahovat data zkopírovaná z předchozího zobrazení dat.
N
může být určena: (dataView.table['lastMergeIndex'] === undefined) ? 0 : dataView.table['lastMergeIndex'] + 1
Vizuál uchovává předané zobrazení dat, aby k datům mohl přistupovat bez další komunikace s Power BI.
Vlastní redukce dat
Vzhledem k tomu, že vývojář nemůže vždy předem vědět, jaký typ dat bude vizuál používat k zobrazení, může chtít autorovi sestavy povolit dynamické nastavení velikosti datového bloku. Od rozhraní API verze 5.2 můžete autorovi sestavy povolit, aby nastavil velikost datových bloků, které se načítají pokaždé.
Pokud chcete autorovi sestavy povolit nastavení počtu, definujte nejprve objekt podokna vlastností s názvem dataReductionCustomization
v souboru capabilities.json :
"objects": {
"dataReductionCustomization": {
"displayName": "Data Reduction",
"properties": {
"rowCount": {
"type": {
"numeric": true
},
"displayName": "Row Reduction",
"description": "Show Reduction for all row groups",
"suppressFormatPainterCopy": true
},
"columnCount": {
"type": {
"numeric": true
},
"displayName": "Column Reduction",
"description": "Show Reduction for all column groups",
"suppressFormatPainterCopy": true
}
}
}
},
Potom za dataViewMappings
definujte výchozí hodnoty pro dataReductionCustomization
.
"dataReductionCustomization": {
"matrix": {
"rowCount": {
"propertyIdentifier": {
"objectName": "dataReductionCustomization",
"propertyName": "rowCount"
},
"defaultValue": "100"
},
"columnCount": {
"propertyIdentifier": {
"objectName": "dataReductionCustomization",
"propertyName": "columnCount"
},
"defaultValue": "10"
}
}
}
Informace o redukci dat se zobrazí pod vizuálem v podokně formátu.
Důležité informace a omezení
Velikost okna je omezená na rozsah 2–30 000.
Celkový počet řádků zobrazení dat je omezený na 1 048 576 řádků.
V režimu agregace segmentů je velikost paměti zobrazení dat omezená na 100 MB.