Hämta mer data från Power BI
Med fetchMoreData-API :et kan du läsa in datasegment av olika storlekar som ett sätt att göra det möjligt för visuella Power BI-objekt att kringgå den hårda gränsen för en datavy på 30 000 rader. Förutom den ursprungliga metoden för att aggregera alla begärda segment har API:et nu även stöd för inläsning av datasegment stegvis.
Du kan konfigurera antalet rader som ska hämtas åt gången i förväg, eller så kan du använda dataReductionCustomization
för att låta rapportförfattaren ange segmentstorleken dynamiskt.
Kommentar
API:et fetchMoreData
är tillgängligt i version 3.4 och senare.
Det dynamiska dataReductionCustomization
API:et är tillgängligt i version 5.2 och senare.
Om du vill ta reda på vilken version du använder kontrollerar apiVersion
du i filen pbiviz.json .
Aktivera en segmenterad hämtning av stora semantiska modeller
Definiera en fönsterstorlek för dataReductionAlgorithm
i det visuella objektets capabilities.json-fil för den obligatoriska dataViewMapping
. Avgör count
fönsterstorleken, vilket begränsar antalet nya datarader som du kan lägga till dataview
i i varje uppdatering.
Lägg till exempel till följande kod i filen capabilities.json för att lägga till 100 rader data i taget:
"dataViewMappings": [
{
"table": {
"rows": {
"for": {
"in": "values"
},
"dataReductionAlgorithm": {
"window": {
"count": 100
}
}
}
}
]
Nya segment läggs till i det befintliga dataview
och tillhandahålls till det visuella objektet som ett update
anrop.
Använda fetchMoreData i det visuella Power BI-objektet
I Power BI kan fetchMoreData
du på något av två sätt:
- segment sammansättningsläge
- inkrementellt uppdateringsläge
Segmentsammansättningsläge (standard)
Med segmentens sammansättningsläge innehåller datavyn som tillhandahålls till det visuella objektet de ackumulerade data från alla tidigare fetchMoreData requests
. Därför växer datavyns storlek med varje uppdatering enligt fönsterstorleken. Om till exempel totalt 100 000 rader förväntas och fönsterstorleken är inställd på 10 000 ska den första uppdateringsdatavyn innehålla 10 000 rader, den andra uppdateringsdatavyn ska innehålla 20 000 rader och så vidare.
Välj segmentsammansättningsläget genom att anropa fetchMoreData
med aggregateSegments = true
.
Du kan avgöra om data finns genom att kontrollera om det finns dataView.metadata.segment
:
public update(options: VisualUpdateOptions) {
const dataView = options.dataViews[0];
console.log(dataView.metadata.segment);
// output: __proto__: Object
}
Du kan också kontrollera om uppdateringen är den första uppdateringen eller en efterföljande uppdatering genom att kontrollera options.operationKind
. I följande kod VisualDataChangeOperationKind.Create
refererar till det första segmentet och VisualDataChangeOperationKind.Append
refererar till efterföljande 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.Append) {
}
// complete update implementation
}
Du kan också anropa fetchMoreData
metoden från en UI-händelsehanterare:
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
}
}
}
Som svar på att anropa this.host.fetchMoreData
metoden anropar update
Power BI metoden för det visuella objektet med ett nytt datasegment.
Kommentar
För att undvika begränsningar för klientminne begränsar Power BI den hämtade datasumman till 100 MB. När den här gränsen har nåtts fetchMoreData()
returnerar false
.
Läge för inkrementella uppdateringar
Med läget för inkrementella uppdateringar innehåller datavyn som tillhandahålls till det visuella objektet endast nästa uppsättning inkrementella data. Datavisningsstorleken är lika med den definierade fönsterstorleken (eller mindre, om den sista databiten är mindre än fönsterstorleken). Om till exempel totalt 101 000 rader förväntas och fönsterstorleken är inställd på 10 000, skulle det visuella objektet få 10 uppdateringar med en datavystorlek på 10 000 och en uppdatering med en datavy av storlek 1 000.
Läget för inkrementella uppdateringar väljs genom att anropa fetchMoreData
med aggregateSegments = false
.
Du kan avgöra om data finns genom att kontrollera om det finns dataView.metadata.segment
:
public update(options: VisualUpdateOptions) {
const dataView = options.dataViews[0];
console.log(dataView.metadata.segment);
// output: __proto__: Object
}
Du kan också kontrollera om uppdateringen är den första uppdateringen eller en efterföljande uppdatering genom att kontrollera options.operationKind
. I följande kod VisualDataChangeOperationKind.Create
refererar till det första segmentet och VisualDataChangeOperationKind.Segment
refererar till efterföljande 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
}
Du kan också anropa fetchMoreData
metoden från en UI-händelsehanterare:
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
}
}
}
Som svar på att anropa this.host.fetchMoreData
metoden anropar update
Power BI metoden för det visuella objektet med ett nytt datasegment.
Kommentar
Även om data i de olika uppdateringarna av datavyerna mestadels är exklusiva, finns det viss överlappning mellan efterföljande datavyer.
För tabell- och kategoridatamappning kan de första N
datavyraderna förväntas innehålla data som kopierats från den tidigare datavyn.
N
kan fastställas genom att: (dataView.table['lastMergeIndex'] === undefined) ? 0 : dataView.table['lastMergeIndex'] + 1
Det visuella objektet håller datavyn skickad till den så att den kan komma åt data utan extra kommunikation med Power BI.
Anpassad dataminskning
Eftersom utvecklaren inte alltid i förväg kan veta vilken typ av data det visuella objektet ska visa, kanske de vill tillåta rapportförfattaren att ange datasegmentets storlek dynamiskt. Från API version 5.2 kan du låta rapportförfattaren ange storleken på de datasegment som hämtas varje gång.
Om du vill att rapportförfattaren ska kunna ange antalet måste du först definiera ett egenskapsfönsterobjekt som heter dataReductionCustomization
i filen 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
}
}
}
},
dataViewMappings
Efter definierar du sedan standardvärdena för dataReductionCustomization
.
"dataReductionCustomization": {
"matrix": {
"rowCount": {
"propertyIdentifier": {
"objectName": "dataReductionCustomization",
"propertyName": "rowCount"
},
"defaultValue": "100"
},
"columnCount": {
"propertyIdentifier": {
"objectName": "dataReductionCustomization",
"propertyName": "columnCount"
},
"defaultValue": "10"
}
}
}
Informationen om dataminskning visas under visuellt objekt i formatfönstret.
Beaktanden och begränsningar
Fönsterstorleken är begränsad till ett intervall på 2–30 000.
Det totala antalet rader i datavyn är begränsat till 1 048 576 rader.
Minnesstorleken för datavyn är begränsad till 100 MB i segmentsammansättningsläge.