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 di una visualizzazione dati di 30.000 righe. Oltre all'approccio originale di aggregare tutti i blocchi richiesti, l'API supporta ora anche il caricamento incrementale di blocchi di dati.

È possibile configurare il numero di righe da recuperare in anticipo oppure per dataReductionCustomization 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 il file pbiviz.json .

Abilitare un recupero segmentato di modelli semantici di grandi dimensioni

Definire le dimensioni di una finestra per dataReductionAlgorithm nel file capabilities.json dell'oggetto visivo per l'oggetto obbligatoriodataViewMapping. Determina count la dimensione della finestra, che limita il numero di nuove righe di dati che è possibile aggiungere a dataview in ogni aggiornamento.

Ad esempio, aggiungere il codice seguente nel file capabilities.json per aggiungere 100 righe di dati alla volta:

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

I nuovi segmenti vengono aggiunti all'oggetto visivo esistente dataview e forniti all'oggetto visivo come update chiamata.

Uso di fetchMoreData nell'oggetto visivo di Power BI

In Power BI è possibile fetchMoreData usare uno dei due modi seguenti:

  • Modalità di aggregazione dei segmenti
  • modalità aggiornamenti incrementali

Modalità di aggregazione segmenti (impostazione predefinita)

Con la modalità di aggregazione dei segmenti, la visualizzazione dati fornita all'oggetto visivo contiene i dati accumulati da tutti i precedenti fetchMoreData requests. Pertanto, le dimensioni della visualizzazione dati aumentano con 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 vista dati di aggiornamento deve includere 20.000 righe e così via.

Selezionare la modalità di aggregazione dei segmenti chiamando fetchMoreData con aggregateSegments = true.

È possibile determinare se i dati esistono controllando l'esistenza di dataView.metadata.segment:

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

È anche possibile verificare se l'aggiornamento è il primo aggiornamento o un aggiornamento successivo controllando options.operationKind. Nel codice seguente si VisualDataChangeOperationKind.Create riferisce 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 fetchMoreData metodo 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
        }
    }
}

In risposta alla chiamata al this.host.fetchMoreData metodo, Power BI chiama il update metodo dell'oggetto visivo con un nuovo segmento di dati.

Nota

Per evitare vincoli di memoria 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 visualizzazione dati fornita all'oggetto visivo contiene solo il set successivo di dati incrementali. Le dimensioni della visualizzazione dati sono uguali alle dimensioni della finestra definite (o minori, se l'ultimo bit di dati è inferiore alle 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 visualizzazione dati pari a 10.000 e un aggiornamento con una visualizzazione dati di dimensioni pari a 1.000.

La modalità di aggiornamento incrementale viene selezionata chiamando fetchMoreData con aggregateSegments = false.

È possibile determinare se i dati esistono controllando l'esistenza di dataView.metadata.segment:

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

È anche possibile verificare se l'aggiornamento è il primo aggiornamento o un aggiornamento successivo controllando options.operationKind. Nel codice seguente si VisualDataChangeOperationKind.Create riferisce 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 fetchMoreData metodo 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
        }
    }
}

In risposta alla chiamata al this.host.fetchMoreData metodo, Power BI chiama il update metodo dell'oggetto visivo con un nuovo segmento di dati.

Nota

Anche se i dati nei diversi aggiornamenti delle visualizzazioni dati sono principalmente esclusivi, esistono alcune sovrapposizioni tra visualizzazioni dati consecutive.

Per il mapping di tabelle e dati categorici, è possibile che le prime N righe della vista dati 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 visualizzazione dati passata in modo che possa accedere ai dati senza comunicazioni aggiuntive con Power BI.

Riduzione dei dati personalizzata

Poiché lo sviluppatore non può sempre sapere in anticipo quale tipo di dati verrà usato per visualizzare l'oggetto visivo, potrebbe voler consentire all'autore del report di impostare in modo dinamico le dimensioni del blocco di dati. 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 innanzitutto un oggetto riquadro delle 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 , dataViewMappingsdefinire 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 verranno visualizzate sotto l'oggetto visivo nel riquadro formato.

Screenshot of the format pan with option to set data reduction count.

Considerazioni e limitazioni

  • La dimensione della finestra è limitata a un intervallo di 2-30.000.

  • Il numero totale di righe della visualizzazione dati è limitato a 1.048.576 righe.

  • In modalità di aggregazione segmenti, le dimensioni della memoria della visualizzazione dati sono limitate a 100 MB.