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 dataViewMappinghodnotu . 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.operationKindaktualizaci. 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.operationKindmůž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 dataViewMappingsdefinujte 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.

Snímek obrazovky s podoknem formátu s možností nastavit počet redukce dat

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.

Další kroky