より多くのデータを Power BI からフェッチするFetch more data from Power BI

この記事では、fetchMoreData メソッドを使用することにより、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. この方法では、データがチャンクで提供されます。This approach provides data in chunks. パフォーマンスを向上させるために、ユース ケースに合わせてチャンク サイズを構成できます。To improve performance, you can configure the chunk size to accommodate your use case.

fetchMoreData の制限Limitations of fetchMoreData

  • ウィンドウのサイズは、2 から 30,000 の範囲に制限されています。Window size is limited to a range of 2 to 30,000.
  • データビューの合計行数は、1,048,576 行に制限されています。Dataview total row count is limitd to 1,048,576 rows.
  • セグメント集計モードでは、データビューのメモリ サイズは 100 MB に制限されています。In segments aggregation mode, dataview memory size is limited to 100 MB.

大きいデータセットのセグメント化されたフェッチを有効にするEnable a segmented fetch of large datasets

dataview セグメント モードの場合、必要な dataViewMapping に対するビジュアルの capabilities.json ファイルで、dataReductionAlgorithm のウィンドウ サイズを定義します。For the dataview segment mode, you define a window size for dataReductionAlgorithm in the visual's capabilities.json file for the required dataViewMapping. count によってウィンドウ サイズが決定され、更新ごとに dataview に追加できる新しいデータ行の数が制限されます。The count determines the window size, which limits the number of new data rows that can be appended to the dataview in each update.

次のコードを capabilities.json ファイルに追加します。Add the following code in the capabilities.json file:

"dataViewMappings": [
    {
        "table": {
            "rows": {
                "for": {
                    "in": "values"
                },
                "dataReductionAlgorithm": {
                    "window": {
                        "count": 100
                    }
                }
            }
    }
]

新しいセグメントが既存の dataview に追加され、update 呼び出しとしてビジュアルに提供されます。New segments are appended to the existing dataview and provided to the visual as an update call.

Power BI ビジュアルでの使用Usage in the Power BI visual

Power BI では、既定のセグメント集計モードまたは増分更新モードで、fetchMoreData を使用できます。In Power BI, you can use fetchMoreData in the default segments aggregation mode or in incremental updates mode.

セグメント集計モードの使用 (既定)Using segments aggregation mode (default)

このモードでは、ビジュアルに提供されるデータビューに、前のすべての fetchMoreData requests の累積データが含まれます。With this mode, the dataview provided to the visual contain the accumulated data for all the previous fetchMoreData requests. そのため、データビューのサイズは、更新ごとに増加すると予想されます。Therefore, dataview size is expected to grow with each update. たとえば、合計 100,000 行が予想され、ウィンドウ サイズが 10,000 に設定されている場合、最初の更新データビューには 10,000 行、2 番目の更新データビューには 20,000 行を含める必要があります。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.

このモードは、aggregateSegments = truefetchMoreData を呼び出すと選択されます。This mode is selected by calling fetchMoreData with aggregateSegments = true.

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
    }

また、options.operationKind を調べると、それが最初の更新か、それとも 2 回目以降の更新かを確認することもできます。You also can check to see whether it's the first update or a subsequent update by checking options.operationKind. 次のコードで、VisualDataChangeOperationKind.Create では最初のセグメントが参照され、VisualDataChangeOperationKind.Append では後続のセグメントが参照されます。In the following code, VisualDataChangeOperationKind.Create refers to the first segment and VisualDataChangeOperationKind.Append refers to subsequent segments.

実装のサンプルについては、次のコード スニペットを参照してください。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
}

次に示すように、UI イベント ハンドラーから fetchMoreData メソッドを呼び出すこともできます。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
        }
    }
}

this.host.fetchMoreData メソッドの呼び出しに対する応答として、Power BI では新しいデータ セグメントを使用してビジュアルの update メソッドが呼び出されます。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.

注意

クライアントのメモリ制約を回避するため、Power BI では現在、フェッチされるデータの合計が 100 MB に制限されています。To avoid client memory constraints, Power BI currently limits the fetched data total to 100 MB. fetchMoreData() から false が返されることで、制限に達したことがわかります。You can see that the limit has been reached when fetchMoreData() returns false.

増分更新モードの使用Using incremental updates mode

このモードでは、ビジュアルに提供されるデータビューには増分データのみが含まれます。With this mode, the dataview provided to the visual contains just incremental data. そのため、データビューのサイズは定義されたウィンドウ サイズを超えません。Therefore, dataview size would not pass the defined window size. たとえば、合計 101,000 行が予想され、ウィンドウ サイズが 10,000 に設定されている場合、ビジュアルはデータビューのサイズが 10,000 で 10 個の更新を取得し、1 つの更新のデータビューのサイズは 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.

このモードは、aggregateSegments = falsefetchMoreData を呼び出すと選択されます。This mode is selected by calling fetchMoreData with aggregateSegments = false.

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
    }

また、options.operationKind を調べると、それが最初の更新か、それとも 2 回目以降の更新かを確認することもできます。You also can check to see whether it's the first update or a subsequent update by checking options.operationKind. 次のコードで、VisualDataChangeOperationKind.Create では最初のセグメントが参照され、VisualDataChangeOperationKind.Segment では後続のセグメントが参照されます。In the following code, VisualDataChangeOperationKind.Create refers to the first segment, and VisualDataChangeOperationKind.Segment refers to subsequent segments.

実装のサンプルについては、次のコード スニペットを参照してください。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
}

次に示すように、UI イベント ハンドラーから fetchMoreData メソッドを呼び出すこともできます。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
        }
    }
}

this.host.fetchMoreData メソッドの呼び出しに対する応答として、Power BI では新しいデータ セグメントを使用してビジュアルの update メソッドが呼び出されます。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.

注意

異なる更新の間のデータビューのデータはほとんど排他的ですが、後続のデータビューの間にはいくつかのオーバーラップがあります。Although the dataviews data between the different updates is mostly exclusive, there will be some overlap between subsequent dataviews. テーブルとカテゴリ データのマッピングでは、最初の N データビュー行に前のデータビューからコピーされたデータが含まれることが想定されます。For table and categorical data mapping, it is expected the the first N dataview rows will contain data copied from the previous dataview. N は、次のようにして決定できます: (dataView.table['lastMergeIndex'] === undefined) ? 0 : dataView.table['lastMergeIndex'] + 1N can be determined by: (dataView.table['lastMergeIndex'] === undefined) ? 0 : dataView.table['lastMergeIndex'] + 1