Recuperare altri dati da Power BI
L'API fetchMoreData consente di caricare blocchi di dati di dimensioni diverse per consentire agli oggetti visivi di Power BI di ignorare il limite rigido pari a 30.000 della vista dati di riga. Oltre all'approccio originale di aggregare tutti i blocchi richiesti, l'API ora supporta anche il caricamento incrementale di blocchi di dati.
È possibile configurare il numero di righe da recuperare alla volta in anticipo, oppure è possibile usare dataReductionCustomization
per consentire all'autore del report di impostare dinamicamente le dimensioni del blocco.
Nota
L'API fetchMoreData
è disponibile nella versione 3.4 e successive.
L'API dinamica dataReductionCustomization
è disponibile nella versione 5.2 e successive.
Per scoprire quale versione si sta usando, archiviare apiVersion
nel file pbiviz.json.
Abilitare un recupero segmentato di modelli semantici di grandi dimensioni
Definire le dimensioni di una finestra per dataReductionAlgorithm
nel file di capabilities.json dell'oggetto visivo per l'oggetto obbligatorio dataViewMapping
. count
determina la dimensione della finestra, che limita il numero di nuove righe di dati che è possibile accodare a dataview
, in ogni aggiornamento.
Ad esempio, aggiungere il codice seguente nel file capabilities.json per accodare 100 righe di dati alla volta:
"dataViewMappings": [
{
"table": {
"rows": {
"for": {
"in": "values"
},
"dataReductionAlgorithm": {
"window": {
"count": 100
}
}
}
}
]
I nuovi segmenti vengono accodati all'oggetto dataview
esistente e forniti all'oggetto visivo come chiamata update
.
Uso di fetchMoreData nell'oggetto visivo di Power BI
In Power BI è possibile fetchMoreData
in una delle due modalità seguenti:
- modalità aggregazione dei segmenti
- modalità aggiornamenti incrementali
Modalità aggregazione dei segmenti (impostazione predefinita)
Con la modalità aggregazione dei segmenti, la vista dati fornita all'oggetto visivo contiene i dati accumulati da tutti i precedenti fetchMoreData requests
. Pertanto, le dimensioni della vista dati aumentano a ogni aggiornamento, in base alle dimensioni della finestra. Ad esempio, se è previsto un totale di 100.000 righe e le dimensioni della finestra sono impostate su 10.000, la prima vista dati di aggiornamento deve includere 10.000 righe, la seconda deve includere 20.000 righe e così via.
Selezionare la modalità aggregazione dei segmenti chiamando fetchMoreData
con aggregateSegments = true
.
È possibile determinare se i dati sono presenti verificando l'esistenza di dataView.metadata.segment
:
public update(options: VisualUpdateOptions) {
const dataView = options.dataViews[0];
console.log(dataView.metadata.segment);
// output: __proto__: Object
}
Inoltre controllando options.operationKind
è possibile verificare se si tratta del primo aggiornamento o se è un aggiornamento successivo. Nel codice seguente, VisualDataChangeOperationKind.Create
fa riferimento al primo segmento e VisualDataChangeOperationKind.Append
fa riferimento ai segmenti successivi.
// 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
}
È anche possibile richiamare il metodo fetchMoreData
da un gestore eventi dell'interfaccia utente:
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
}
}
}
Come risposta alla chiamata del metodo this.host.fetchMoreData
, Power BI chiama il metodo update
dell'oggetto visivo con un nuovo segmento di dati.
Nota
Per evitare vincoli di memoria del client, Power BI limita il totale dei dati recuperati a 100 MB. Quando viene raggiunto questo limite, fetchMoreData()
restituisce false
.
Modalità aggiornamenti incrementali
Con la modalità aggiornamenti incrementali, la vista dati fornita all'oggetto visivo contiene solo il set di dati incrementali successivo. Le dimensioni della vista dati sono uguali alle dimensioni definite della finestra (o minori, se l'ultimo bit di dati è più piccolo delle dimensioni della finestra). Ad esempio, se è previsto un totale di 101.000 righe e le dimensioni della finestra sono impostate su 10.000, l'oggetto visivo otterrà 10 aggiornamenti con dimensioni di vista dati pari a 10.000 e un aggiornamento con una vista dati di dimensioni pari a 1.000.
La modalità aggiornamenti incrementali viene selezionata chiamando fetchMoreData
con aggregateSegments = false
.
È possibile determinare se i dati sono presenti verificando l'esistenza di dataView.metadata.segment
:
public update(options: VisualUpdateOptions) {
const dataView = options.dataViews[0];
console.log(dataView.metadata.segment);
// output: __proto__: Object
}
Inoltre controllando options.operationKind
è possibile verificare se si tratta del primo aggiornamento o se è un aggiornamento successivo. Nel codice seguente, VisualDataChangeOperationKind.Create
fa riferimento al primo segmento e VisualDataChangeOperationKind.Segment
fa riferimento ai segmenti successivi.
// 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
}
È anche possibile richiamare il metodo fetchMoreData
da un gestore eventi dell'interfaccia utente:
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
}
}
}
Come risposta alla chiamata del metodo this.host.fetchMoreData
, Power BI chiama il metodo update
dell'oggetto visivo con un nuovo segmento di dati.
Nota
Anche se i dati nei diversi aggiornamenti delle viste dati sono principalmente esclusivi, tra le viste dati consecutive esistono alcune sovrapposizioni.
Per il mapping di tabelle e dati categorici, è possibile che le prime righe della vista dati N
contengano dati copiati dalla vista dati precedente.
N
può essere determinato da: (dataView.table['lastMergeIndex'] === undefined) ? 0 : dataView.table['lastMergeIndex'] + 1
L'oggetto visivo mantiene la vista dati che gli è stata passata, così che possa accedere ai dati senza ulteriori comunicazioni con Power BI.
Riduzione dei dati personalizzata
Poiché lo sviluppatore non è sempre in grado di sapere in anticipo quale tipo di dati verrà visualizzato dall'oggetto visivo, potrebbe voler consentire all'autore del report di impostare le dimensioni del blocco di dati in modo dinamico. Dalla versione 5.2 dell'API è possibile consentire all'autore del report di impostare le dimensioni dei blocchi di dati recuperati ogni volta.
Per consentire all'autore del report di impostare il conteggio, definire prima un oggetto riquadro proprietà denominato dataReductionCustomization
nel file 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
}
}
}
},
Quindi, dopo dataViewMappings
, definire i valori predefiniti per dataReductionCustomization
.
"dataReductionCustomization": {
"matrix": {
"rowCount": {
"propertyIdentifier": {
"objectName": "dataReductionCustomization",
"propertyName": "rowCount"
},
"defaultValue": "100"
},
"columnCount": {
"propertyIdentifier": {
"objectName": "dataReductionCustomization",
"propertyName": "columnCount"
},
"defaultValue": "10"
}
}
}
Le informazioni sulla riduzione dei dati sono visualizzate sotto l'oggetto visivo nel riquadro formato.
Considerazioni e limitazioni
La dimensione della finestra è limitata a un intervallo di 2-30.000.
Il conteggio totale di righe della vista dati è limitato a 1.048.576 righe.
Le dimensioni della memoria della vista dati sono limitate a 100 MB in modalità aggregazione segmenti.