Hente flere data fra Power BI

FetchMoreData-API-en lar deg laste inn databiter av forskjellige størrelser som en måte å aktivere Power BI-visualobjekter på for å omgå den harde grensen for en 30 000 raddatavisning. I tillegg til den opprinnelige tilnærmingen til aggregering av alle forespurte biter, støtter API-en nå også innlasting av databiter trinnvis.

Du kan konfigurere antall rader som skal hentes på et tidspunkt på forhånd, eller du kan bruke dataReductionCustomization til å la rapportforfatteren angi delstørrelsen dynamisk.

Merk

fetchMoreData API-en er tilgjengelig i versjon 3.4 og nyere.

Den dynamiske dataReductionCustomization API-en er tilgjengelig i versjon 5.2 og nyere.

Hvis du vil finne ut hvilken versjon du bruker, kan du sjekke apiVersion inn pbiviz.json-filen .

Aktivere en segmentert henting av store semantiske modeller

Definer en vindusstørrelse for dataReductionAlgorithm i visualobjektets capabilities.json-fil for den nødvendige dataViewMapping. Bestemmer count vindusstørrelsen, som begrenser antall nye datarader som du kan tilføye dataview i hver oppdatering.

Du kan for eksempel legge til følgende kode i capabilities.json-filen for å tilføye 100 rader med data om gangen:

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

Nye segmenter legges til i eksisterende dataview og leveres til visualobjektet som et update kall.

Bruke fetchMoreData i Power BI-visualobjektet

I Power BI kan fetchMoreData du på én av to måter:

  • segmenter aggregasjonsmodus
  • trinnvis oppdateringsmodus

Aggregasjonsmodus for segmenter (standard)

Med segmentaggregasjonsmodusen inneholder datavisningen som leveres til visualobjektet de akkumulerte dataene fra alle tidligere fetchMoreData requests. Datavisningsstørrelsen vokser derfor med hver oppdatering i henhold til vindusstørrelsen. Hvis for eksempel totalt 100 000 rader forventes, og vindusstørrelsen er satt til 10 000, bør den første oppdateringsdatavisningen inneholde 10 000 rader, den andre oppdateringsdatavisningen bør inneholde 20 000 rader og så videre.

Velg segmentaggregasjonsmodus ved å ringe fetchMoreData med aggregateSegments = true.

Du kan finne ut om det finnes data ved å kontrollere om det finnes dataView.metadata.segment:

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

Du kan også kontrollere om oppdateringen er den første oppdateringen eller en etterfølgende oppdatering ved å options.operationKindkontrollere . I følgende kode VisualDataChangeOperationKind.Create refererer du til det første segmentet og VisualDataChangeOperationKind.Append refererer til etterfølgende segmenter.

// 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 også aktivere fetchMoreData metoden fra en grensesnitthendelsesbehandling:

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 et svar på kall til this.host.fetchMoreData metoden kaller Power BI metoden for visualobjektet update med et nytt segment med data.

Merk

For å unngå begrensninger i klientminnet begrenser Power BI den hentede datasummen til 100 MB. Når denne grensen er nådd, fetchMoreData() returnerer .false

Trinnvis oppdateringsmodus

Med modusen for trinnvise oppdateringer inneholder datavisningen som leveres til visualobjektet, bare det neste settet med trinnvise data. Datavisningsstørrelsen er lik den definerte vindusstørrelsen (eller mindre hvis den siste databiten er mindre enn vindusstørrelsen). Hvis for eksempel totalt 101 000 rader forventes og vindusstørrelsen er satt til 10 000, vil visualobjektet få 10 oppdateringer med en datavisningsstørrelse på 10 000 og én oppdatering med en datavisning på størrelse 1000.

Modusen for trinnvise oppdateringer velges ved å ringe fetchMoreData med aggregateSegments = false.

Du kan finne ut om det finnes data ved å kontrollere om det finnes dataView.metadata.segment:

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

Du kan også kontrollere om oppdateringen er den første oppdateringen eller en etterfølgende oppdatering ved å options.operationKindkontrollere . I følgende kode VisualDataChangeOperationKind.Create refererer du til det første segmentet, og VisualDataChangeOperationKind.Segment refererer til etterfølgende segmenter.

// 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 også aktivere fetchMoreData metoden fra en grensesnitthendelsesbehandling:

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 et svar på kall til this.host.fetchMoreData metoden kaller Power BI metoden for visualobjektet update med et nytt segment med data.

Merk

Selv om dataene i de ulike oppdateringene av datavisningene for det meste er eksklusive, er det en viss overlapping mellom etterfølgende datavisninger.

For tabell- og kategorisk datatilordning kan de første N datavisningsradene forventes å inneholde data kopiert fra den forrige datavisningen.

N kan bestemmes av: (dataView.table['lastMergeIndex'] === undefined) ? 0 : dataView.table['lastMergeIndex'] + 1

Visualobjektet holder datavisningen sendt til den slik at den får tilgang til dataene uten ekstra kommunikasjon med Power BI.

Tilpasset datareduksjon

Siden utvikleren ikke alltid kan vite på forhånd hvilken type data visualobjektet skal brukes til å vise, vil de kanskje la rapportforfatteren angi datadelstørrelsen dynamisk. Fra API versjon 5.2 kan du la rapportforfatteren angi størrelsen på databitene som hentes hver gang.

Hvis du vil tillate at rapportforfatteren angir antallet, må du først definere et egenskapsruteobjekt kalt dataReductionCustomization i capabilities.json-filen :

    "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
                }
            }
        }
    },

Deretter definerer du standardverdiene for dataReductionCustomization.dataViewMappings

   "dataReductionCustomization": {
        "matrix": {
            "rowCount": {
                "propertyIdentifier": {
                    "objectName": "dataReductionCustomization",
                    "propertyName": "rowCount"
                },
                "defaultValue": "100"
            },
            "columnCount": {
                "propertyIdentifier": {
                    "objectName": "dataReductionCustomization",
                    "propertyName": "columnCount"
                },
                "defaultValue": "10"
            }
        }
    }

Informasjonen om datareduksjon vises under visualobjektet i formatruten.

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

Hensyn og begrensninger

  • Vindusstørrelsen er begrenset til et område på 2–30 000.

  • Antall rader for datavisning er begrenset til 1 048 576 rader.

  • I segmentaggregasjonsmodus er minnestørrelsen for datavisning begrenset til 100 MB.