從 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。