Načtení dalších dat z Power BIFetch more data from Power BI

V tomto článku si řekneme, jak načíst další data metodou fetchMoreData, abyste obešli pevný limit velikosti datového bodu 30 kB.This article discusses how to load more data to bypass the hard limit of a 30-KB data point by using the fetchMoreData method. Tento přístup poskytuje data v blocích.This approach provides data in chunks. Když chcete zvýšit výkon, můžete nakonfigurovat velikost bloku tak, aby vyhovovala vašemu případu použití.To improve performance, you can configure the chunk size to accommodate your use case.

Omezení metody fetchMoreDataLimitations of fetchMoreData

  • Omezená velikost okna v rozsahu 2 až 30 000 řádků.Window size is limited to a range of 2 to 30,000.
  • Omezený celkový počet řádků Dataview na 1 048 576.Dataview total row count is limitd to 1,048,576 rows.
  • V režimu agregace segmentů je velikost paměti pro Dataview omezena na 100 MB.In segments aggregation mode, dataview memory size is limited to 100 MB.

Povolení segmentovaného načtení velkých datových sadEnable a segmented fetch of large datasets

V režimu segmentů dataview se velikost okna pro dataReductionAlgorithm definuje v souboru vizuálu capabilities.json požadovaného objektu dataViewMapping.For the dataview segment mode, you define a window size for dataReductionAlgorithm in the visual's capabilities.json file for the required dataViewMapping. Možnost count určuje velikost okna, které omezuje počet nových řádků dat, jež lze připojit k objektu dataview v každé aktualizaci.The count determines the window size, which limits the number of new data rows that can be appended to the dataview in each update.

Do souboru capabilities.json přidejte následující kód:Add the following code in the capabilities.json file:

"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.New segments are appended to the existing dataview and provided to the visual as an update call.

Použití ve vizuálu Power BIUsage in the Power BI visual

Metodu fetchMoreData můžete v Power BI použít ve výchozím režimu agregace segmentů nebo v režimu přírůstkových aktualizací.In Power BI, you can use fetchMoreData in the default segments aggregation mode or in incremental updates mode.

Použití režimu agregace segmentů (výchozí)Using segments aggregation mode (default)

V tomto režimu bude zobrazení dat poskytované vizuálu obsahovat kumulovaná data všech předchozích metod fetchMoreData requests.With this mode, the dataview provided to the visual contain the accumulated data for all the previous fetchMoreData requests. To znamená, že s každou aktualizací se očekává růst Dataview.Therefore, dataview size is expected to grow with each update. Pokud je například očekávaný počet řádků 100 000 a velikost okna je nastavená na 10 000, bude první aktualizace Dataview obsahovat 10 000 řádků, druhá aktualizace 20 000 řádků atd.For example, if a total of 100,000 rows are expected and the window size is set to 10,000, the first update dataview should include 10,000 rows, the second update dataview should include 20,000 rows, and so on.

Tento režim vyberete voláním metody fetchMoreData s parametrem aggregateSegments = true.This mode is selected by calling fetchMoreData with aggregateSegments = true.

Pokud chcete zjistit, jestli data existují, zkontrolujte přítomnost dataView.metadata.segment:You can determine whether data exists by checking for the existence of 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é zjistit, jestli se jedná o první nebo následnou aktualizaci.You also can check to see whether it's the first update or a subsequent update by checking options.operationKind. V následujícím kódu VisualDataChangeOperationKind.Create odkazuje na první segment a VisualDataChangeOperationKind.Append odkazuje na další segmenty.In the following code, VisualDataChangeOperationKind.Create refers to the first segment and VisualDataChangeOperationKind.Append refers to subsequent segments.

Ukázkovou implementaci představuje následující fragment kódu:For a sample implementation, see the following code snippet:

// 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
}

Z uživatelského rozhraní obslužné rutiny události také můžete volat metodu fetchMoreData. Je to vidět zde:You also can invoke the fetchMoreData method from a UI event handler, as shown here:

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.As a response to calling the this.host.fetchMoreData method, Power BI calls the update method of the visual with a new segment of data.

Poznámka

Aby se předešlo omezením paměti klienta, Power BI v současné době omezuje celkové množství načtených dat na 100 MB.To avoid client memory constraints, Power BI currently limits the fetched data total to 100 MB. Vidíte, že limitu je dosaženo, když metoda fetchMoreData() vrátí false.You can see that the limit has been reached when fetchMoreData() returns false.

Použití režimu přírůstkových aktualizacíUsing incremental updates mode

V tomto režimu obsahuje Dataview poskytnuté vizuálu jenom přírůstková data.With this mode, the dataview provided to the visual contains just incremental data. To znamená, že velikost Dataview nesmí překročit definovanou velikost okna.Therefore, dataview size would not pass the defined window size. Pokud se například očekává celkový počet řádků 101 000 a velikost okna je nastavena na 10 000, proběhne 10 aktualizací vizuálu o velikosti Dataview 10 000 a jedna aktualizace o velikosti Dataview 1 000.For example, if a total of 101,000 rows are expected and the window size is set to 10,000, the visual would get 10 updates with a dataview size of 10,000 and one update with a dataview of size 1,000.

Tento režim vyberete voláním metody fetchMoreData s parametrem aggregateSegments = false.This mode is selected by calling fetchMoreData with aggregateSegments = false.

Pokud chcete zjistit, jestli data existují, zkontrolujte přítomnost dataView.metadata.segment:You can determine whether data exists by checking for the existence of 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é zjistit, jestli se jedná o první nebo následnou aktualizaci.You also can check to see whether it's the first update or a subsequent update by checking options.operationKind. V následujícím kódu VisualDataChangeOperationKind.Create odkazuje na první segment a VisualDataChangeOperationKind.Segment odkazuje na následné segmenty.In the following code, VisualDataChangeOperationKind.Create refers to the first segment, and VisualDataChangeOperationKind.Segment refers to subsequent segments.

Ukázkovou implementaci představuje následující fragment kódu:For a sample implementation, see the following code snippet:

// 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
}

Z uživatelského rozhraní obslužné rutiny události také můžete volat metodu fetchMoreData. Je to vidět zde:You also can invoke the fetchMoreData method from a UI event handler, as shown here:

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.As a response to calling the this.host.fetchMoreData method, Power BI calls the update method of the visual with a new segment of data.

Poznámka

Přestože jsou data v Dataview mezi jednotlivými aktualizacemi většinou jedinečná, dochází u dalších Dataview k určitému překrytí.Although the dataviews data between the different updates is mostly exclusive, there will be some overlap between subsequent dataviews. U mapování dat tabulky a kategorií se předpokládá, že prvních N řádků Dataview bude obsahovat data zkopírovaná z předchozího Dataview.For table and categorical data mapping, it is expected the the first N dataview rows will contain data copied from the previous dataview. Počet řádků N zjistíte kódem (dataView.table['lastMergeIndex'] === undefined) ? 0 : dataView.table['lastMergeIndex'] + 1.N can be determined by: (dataView.table['lastMergeIndex'] === undefined) ? 0 : dataView.table['lastMergeIndex'] + 1