Abrufen größerer Datenmengen von Power BI
Mit der fetchMoreData-API können Sie Datenblöcke verschiedener Größen laden, damit Power BI-Visuals die harte Grenze von 30.000 Zeilendatenansichten umgehen können. Zusätzlich zum ursprünglichen Ansatz, bei dem alle angeforderten Blöcke aggregiert werden, unterstützt die API jetzt auch das inkrementelle Laden der Datenblöcke.
Sie können die Anzahl der Zeilen konfigurieren, die gleichzeitig im Voraus abgerufen werden sollen, oder Sie können dataReductionCustomization
verwenden, um dem Berichtsautor das dynamische Festlegen der Blockgröße zu ermöglichen.
Hinweis
Die fetchMoreData
-API ist in Version 3.4 und höher verfügbar.
Die dynamische dataReductionCustomization
-API ist in Version 5.2 und höher verfügbar.
Um herauszufinden, welche Version Sie verwenden, überprüfen Sie die apiVersion
in der Datei pbiviz.json.
Aktivieren eines segmentierten Abrufs großer Semantikmodelle
Definieren Sie eine Fenstergröße für dataReductionAlgorithm
in der capabilities.json-Datei des Visuals für die erforderliche dataViewMapping
. Die Fenstergröße wird durch count
bestimmt. Dadurch wird die Anzahl neuer Datenzeilen begrenzt, die Sie bei jeder Aktualisierung an dataview
anfügen können.
Fügen Sie beispielsweise den folgenden Code in der Datei capabilities.json hinzu, um gleichzeitig 100 Datenzeilen anzufügen:
"dataViewMappings": [
{
"table": {
"rows": {
"for": {
"in": "values"
},
"dataReductionAlgorithm": {
"window": {
"count": 100
}
}
}
}
]
Neue Segmente werden an die vorhandene dataview
angefügt und dem Visual als update
-Aufruf zur Verfügung gestellt.
Verwenden von fetchMoreData im Power BI-Visual
In Power BI gibt es zwei Möglichkeiten für fetchMoreData
:
- Segmentaggregation-Modus
- Inkrementeller Update-Modus
Modus für die Segmentaggregation (Standard)
Im Segmentaggregationsmodus enthält die Datenansicht, die für das Visual bereitgestellt wird, die akkumulierten Daten aus allen vorherigen fetchMoreData requests
. Daher wächst die Größe der Datenansicht mit jeder Aktualisierung entsprechend der Fenstergröße. Wenn z. B. insgesamt 100.000 Zeilen erwartet werden und die Fenstergröße auf 10.000 Zeilen festgelegt ist, sollte die erste Update-Datenansicht 10.000 Zeilen enthalten, die zweite 20.000 Zeilen usw.
Wählen Sie den Aggregationsmodus für Segmente aus, indem Sie fetchMoreData
mit aggregateSegments = true
aufrufen.
Sie können ermitteln, ob Daten vorhanden sind, indem Sie die Existenz von dataView.metadata.segment
überprüfen:
public update(options: VisualUpdateOptions) {
const dataView = options.dataViews[0];
console.log(dataView.metadata.segment);
// output: __proto__: Object
}
Anhand von options.operationKind
können Sie auch überprüfen, ob es sich um das erste Update oder um ein späteres Update handelt. Im folgenden Code bezieht sich VisualDataChangeOperationKind.Create
auf das erste Segment und VisualDataChangeOperationKind.Append
auf die nachfolgenden Segmente.
// 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
}
Sie können die Methode fetchMoreData
auch über einen Ereignishandler für die Benutzeroberfläche aufrufen:
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
}
}
}
Als Antwort auf das Aufrufen der this.host.fetchMoreData
-Methode ruft Power BI die update
-Methode des Visuals mit einem neuen Datensegment auf.
Hinweis
In Power BI ist die insgesamt abrufbare Datenmenge auf 100 MB beschränkt, um Speichereinschränkungen auf dem Client zu vermeiden. Wenn dieser Grenzwert erreicht ist, gibt fetchMoreData()
false
zurück.
Modus für inkrementelle Updates
Im Modus für inkrementelle Updates enthält die Datenansicht, die für das Visual bereitgestellt wird, nur den nächsten Satz inkrementeller Daten. Die Größe der Datenansicht ist gleich der definierten Fenstergröße (oder kleiner, wenn das letzte Stück der Daten kleiner als die Fenstergröße ist). Wenn z. B. insgesamt 101.000 Zeilen erwartet werden und die Fenstergröße auf 10.000 Zeilen festgelegt ist, erhält das Visual 10 Updates mit einer Datenansichtsgröße von 10.000 Zeilen und ein Update mit einer Datenansichtsgröße von 1.000.
Der Modus für inkrementelle Updates wird ausgewählt, indem fetchMoreData
mit aggregateSegments = false
aufgerufen wird.
Sie können ermitteln, ob Daten vorhanden sind, indem Sie die Existenz von dataView.metadata.segment
überprüfen:
public update(options: VisualUpdateOptions) {
const dataView = options.dataViews[0];
console.log(dataView.metadata.segment);
// output: __proto__: Object
}
Anhand von options.operationKind
können Sie auch überprüfen, ob es sich um das erste Update oder um ein späteres Update handelt. Im folgenden Code bezieht sich VisualDataChangeOperationKind.Create
auf das erste Segment und VisualDataChangeOperationKind.Segment
auf die nachfolgenden Segmente.
// 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
}
Sie können die Methode fetchMoreData
auch über einen Ereignishandler für die Benutzeroberfläche aufrufen:
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
}
}
}
Als Antwort auf das Aufrufen der this.host.fetchMoreData
-Methode ruft Power BI die update
-Methode des Visuals mit einem neuen Datensegment auf.
Hinweis
Obwohl die Daten in den verschiedenen Updates der Datenansichten überwiegend unterschiedlich sind, gibt es Überlappungen bei aufeinanderfolgenden Datenansichten.
Bei tabellarischen und kategorischen Datenzuordnungen kann davon ausgegangen werden, dass die ersten N
-Datenansichtszeilen Daten enthalten, die aus der vorherigen Datenansicht kopiert wurden.
N
kann bestimmt werden durch: (dataView.table['lastMergeIndex'] === undefined) ? 0 : dataView.table['lastMergeIndex'] + 1
Das Visual behält die Datenansicht bei, die ihm übergeben wird, sodass es ohne zusätzliche Kommunikation mit Power BI auf die Daten zugreifen kann.
Benutzerdefinierte Datenreduzierung
Da der Entwickler nicht immer im Voraus wissen kann, welche Art von Daten mit dem Visual angezeigt wird, muss er dem Berichtsautor möglicherweise erlauben, die Größe des Datenblocks dynamisch festzulegen. Ab API-Version 5.2 können Sie dem Berichtsautor erlauben, die Größe der Datenblöcke festzulegen, die auf einmal abgerufen werden.
Damit der Berichtsautor die Anzahl festlegen kann, definieren Sie zunächst ein Eigenschaftenbereichsobjekt mit dem Namen dataReductionCustomization
in der Datei 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
}
}
}
},
Definieren Sie dann nach den dataViewMappings
die Standardwerte für dataReductionCustomization
.
"dataReductionCustomization": {
"matrix": {
"rowCount": {
"propertyIdentifier": {
"objectName": "dataReductionCustomization",
"propertyName": "rowCount"
},
"defaultValue": "100"
},
"columnCount": {
"propertyIdentifier": {
"objectName": "dataReductionCustomization",
"propertyName": "columnCount"
},
"defaultValue": "10"
}
}
}
Die Informationen zur Datenreduzierung werden im Formatbereich unter Visual angezeigt.
Überlegungen und Einschränkungen
Die Fenstergröße ist auf einen Bereich von 2 bis 30.000 Zeilen beschränkt.
Die Gesamtanzahl der Zeilen für eine Datenansicht ist auf 1.048.576 Zeilen begrenzt.
Im Segmentaggregationsmodus ist die Größe des Datenansichtsspeichers auf 100 MB beschränkt.