分享方式:


從 Power BI 擷取更多資料

fetchMoreData API 可讓您載入不同大小的資料區塊,以讓 Power BI 視覺效果略過 30K 個資料列資料檢視的硬性限制。 除了彙總所有要求區塊的原始方法之外,API 現在也支援以累加方式載入資料區塊。

您可以事先設定一次要擷取的資料列數目,也可以使用 dataReductionCustomization 來允許報表作者動態設定區塊大小。

注意

fetchMoreData API 可在 3.4 版和更新版本中取得。

動態 dataReductionCustomization API 可在 5.2 版和更新版本中取得。

若要了解您正在使用哪個版本,請檢查 pbiviz.json 檔案中的 apiVersion

啟用大型語意模型的分段擷取

您可以在視覺效果的 capabilities.json 檔案中,為所需的 dataViewMapping 定義 dataReductionAlgorithm 的視窗大小。 count 會決定視窗大小,這會限制每個更新中您可以附加至 dataview 的新資料列數目。

例如,在 capabilities.json 檔案中新增下列程式碼,以一次附加 100 個資料列:

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

新的區段會附加至現有 dataview,並提供給視覺效果作為 update 呼叫。

在 Power BI 視覺效果中使用 fetchMoreData

在 Power BI 中,您可以透過下列兩種方式之一來執行 fetchMoreData

  • 區段彙總模式
  • 累加式更新模式

區段彙總模式 (預設)

使用區段彙總模式時,提供給視覺效果的資料檢視會包含所有先前 fetchMoreData requests 的累積資料。 因此,資料檢視大小會隨著每次更新依視窗大小而成長。 例如,如果預期共有 100,000 個資料列,且視窗大小設定為 10,000,則第一次更新資料檢視應包含 10,000 個資料列,第二次更新資料檢視應包含 20,000 個資料列,依此類推。

使用 aggregateSegments = true 呼叫 fetchMoreData 來選取區段彙總模式。

您可以檢查 dataView.metadata.segment 的存在與否,以判斷資料是否存在:

    public update(options: VisualUpdateOptions) {
        const dataView = options.dataViews[0];
        console.log(dataView.metadata.segment);
        // output: __proto__: Object
    }

您也可以藉由檢查 options.operationKind,查看更新是第一次更新還是後續更新。 在下列程式碼中,VisualDataChangeOperationKind.Create 表示第一區段,而 VisualDataChangeOperationKind.Append 表示後續區段。

// 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 方法:

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 方法。

注意

為了避免用戶端記憶體限制,Power BI 將擷取資料總數限制為 100 MB。 達到此限制時,fetchMoreData() 會傳回 false

累加式更新模式

使用累加式更新模式時,提供給視覺效果的資料檢視只會包含下一組累加資料。 資料檢視大小等於定義的視窗大小 (如果最後一個資料的位元小於視窗大小則更小)。 例如,如果預期共有 101,000 個資料列,且視窗大小設定為 10,000,則視覺效果會取得 10 次資料檢視大小為 10,000 的更新,以及一次資料檢視大小為 1,000 的更新。

使用 aggregateSegments = false 呼叫 fetchMoreData 來選取累加式更新模式。

您可以檢查 dataView.metadata.segment 的存在與否,以判斷資料是否存在:

    public update(options: VisualUpdateOptions) {
        const dataView = options.dataViews[0];
        console.log(dataView.metadata.segment);
        // output: __proto__: Object
    }

您也可以藉由檢查 options.operationKind,確認更新是第一次更新還是後續更新。 在下列程式碼中,VisualDataChangeOperationKind.Create 參考第一個區段,而 VisualDataChangeOperationKind.Segment 參考後續區段。

// 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 方法:

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 方法。

注意

雖然不同資料檢視更新中的資料大多是獨佔的,但連續資料檢視之間會有部分重疊。

針對資料表和類別資料對應,第一個 N 資料檢視資料列應該包含從先前資料檢視複製的資料。

N 可以透過下列方式判斷:(dataView.table['lastMergeIndex'] === undefined) ? 0 : dataView.table['lastMergeIndex'] + 1

視覺效果會將資料檢視保持傳遞至該檢視,使其可以存取資料,而不需與 Power BI 進行額外的通訊。

自訂的資料縮減

由於開發人員不一定事先知道視覺效果將顯示的資料類型,因此他們可能想要允許報表作者動態設定資料區塊大小。 從 API 5.2 版,您可以允許報表作者設定每次擷取的資料區塊大小。

若要允許報表作者設定計數,請先定義 capabilities.json 檔案中稱為 dataReductionCustomization屬性窗格物件

    "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
                }
            }
        }
    },

然後在 dataViewMappings 之後,定義 dataReductionCustomization 的預設值。

   "dataReductionCustomization": {
        "matrix": {
            "rowCount": {
                "propertyIdentifier": {
                    "objectName": "dataReductionCustomization",
                    "propertyName": "rowCount"
                },
                "defaultValue": "100"
            },
            "columnCount": {
                "propertyIdentifier": {
                    "objectName": "dataReductionCustomization",
                    "propertyName": "columnCount"
                },
                "defaultValue": "10"
            }
        }
    }

資料縮減資訊會出現在 [格式] 窗格中的視覺效果底下。

格式平移與設定資料縮減計數選項的螢幕擷取畫面。

考量與限制

  • 視窗大小的範圍限制為 2 到 30,000。

  • 資料檢視總資料列計數最多為 1,048,576 個資料列。

  • 資料檢視記憶體大小在區段彙總模式中最多為 100 MB。