Hent flere data fra Power BI
Med fetchMoreData-API'en kan du indlæse datasegmenter i forskellige størrelser som en måde at gøre det muligt for Power BI-visualiseringer at tilsidesætte den faste grænse for en datavisning på 30.000 rækker. Ud over den oprindelige tilgang til sammenlægning af alle de ønskede dele understøtter API'en nu også indlæsning af datasegmenter trinvist.
Du kan konfigurere det antal rækker, der skal hentes på forhånd, eller du kan bruge dataReductionCustomization
til at give rapportforfatteren mulighed for at angive segmentstørrelsen dynamisk.
Bemærk
API'en fetchMoreData
er tilgængelig i version 3.4 og nyere.
Den dynamiske dataReductionCustomization
API er tilgængelig i version 5.2 og nyere.
Hvis du vil finde ud af, hvilken version du bruger, skal du se apiVersion
i filen pbiviz.json .
Aktivér en segmenteret hentning af store semantiske modeller
Definer en vinduesstørrelse for dataReductionAlgorithm
i visualiseringens capabilities.json-fil for den påkrævede dataViewMapping
. count
bestemmer vinduesstørrelsen, hvilket begrænser antallet af nye datarækker, som du kan føje til dataview
i hver opdatering.
Tilføj f.eks. følgende kode i filen capabilities.json for at tilføje 100 rækker med data ad gangen:
"dataViewMappings": [
{
"table": {
"rows": {
"for": {
"in": "values"
},
"dataReductionAlgorithm": {
"window": {
"count": 100
}
}
}
}
]
Nye segmenter føjes til den eksisterende dataview
og leveres til visualiseringen som et update
kald.
Brug af fetchMoreData i Power BI-visualiseringen
I Power BI kan fetchMoreData
du gøre følgende på to måder:
- segmentsammenlægningstilstand
- trinvis opdateringstilstand
Segmentsammenlægningstilstand (standard)
Med segmentsammenlægningstilstanden indeholder den datavisning, der leveres til visualiseringen, de akkumulerede data fra alle tidligere fetchMoreData requests
. Derfor vokser datavisningens størrelse med hver opdatering i henhold til vinduesstørrelsen. Hvis der f.eks. forventes i alt 100.000 rækker, og vinduesstørrelsen er angivet til 10.000, skal den første opdateringsdatavisning indeholde 10.000 rækker, den anden opdateringsdatavisning skal indeholde 20.000 rækker osv.
Vælg sammenlægningstilstanden for segmenter ved at kalde fetchMoreData
med aggregateSegments = true
.
Du kan afgøre, om der findes data, ved at kontrollere, om der findes 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 opdateringen er den første eller en efterfølgende opdatering, ved at kontrollere options.operationKind
. I følgende kode VisualDataChangeOperationKind.Create
refererer til det første segment og VisualDataChangeOperationKind.Append
refererer til efterfø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 metoden fra en hændelseshandler for fetchMoreData
brugergrænsefladen:
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å kald af this.host.fetchMoreData
metoden kalder Power BI metoden for visualiseringen update
med et nyt datasegment.
Bemærk
Power BI begrænser det samlede antal hentede data til 100 MB for at undgå begrænsninger for klienthukommelsen. Når denne grænse er nået, fetchMoreData()
returneres false
.
Tilstanden Trinvise opdateringer
Med tilstanden trinvise opdateringer indeholder den datavisning, der leveres til visualiseringen, kun det næste sæt trinvise data. Datavisningsstørrelsen er lig med den definerede vinduesstørrelse (eller mindre, hvis den sidste bit data er mindre end vinduesstørrelsen). Hvis der f.eks. forventes i alt 101.000 rækker, og vinduesstørrelsen er angivet til 10.000, får visualiseringen 10 opdateringer med en datavisningsstørrelse på 10.000 og én opdatering med en datavisning på 1.000.
Tilstanden trinvise opdateringer vælges ved at kalde fetchMoreData
med aggregateSegments = false
.
Du kan afgøre, om der findes data, ved at kontrollere, om der findes 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 opdateringen er den første eller en efterfølgende opdatering, ved at kontrollere options.operationKind
. I følgende kode VisualDataChangeOperationKind.Create
refererer til det første segment og VisualDataChangeOperationKind.Segment
refererer til efterfø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 metoden fra en hændelseshandler for fetchMoreData
brugergrænsefladen:
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å kald af this.host.fetchMoreData
metoden kalder Power BI metoden for visualiseringen update
med et nyt datasegment.
Bemærk
Selvom dataene i de forskellige opdateringer af datavisninger for det meste er eksklusive, er der en vis overlapning mellem fortløbende datavisninger.
I forbindelse med tabel- og kategoridatatilknytning kan de første N
datavisningsrækker forventes at indeholde data, der er kopieret fra den forrige datavisning.
N
kan bestemmes af: (dataView.table['lastMergeIndex'] === undefined) ? 0 : dataView.table['lastMergeIndex'] + 1
Visualiseringen bevarer den datavisning, der overføres til den, så den kan få adgang til dataene uden ekstra kommunikation med Power BI.
Reduktion af brugerdefinerede data
Da udvikleren ikke altid på forhånd kan vide, hvilken type data visualiseringen skal vise, kan det være en god idé at give rapportforfatteren mulighed for at angive størrelsen på datasegmentet dynamisk. Fra API version 5.2 kan du give rapportforfatteren tilladelse til at angive størrelsen på de datasegmenter, der hentes hver gang.
Hvis du vil give rapportforfatteren tilladelse til at angive antallet, skal du først definere et objekt i egenskabsruden, der kaldes dataReductionCustomization
i din capabilities.json fil:
"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
}
}
}
},
Derefter skal du definere standardværdierne for dataReductionCustomization
efter dataViewMappings
.
"dataReductionCustomization": {
"matrix": {
"rowCount": {
"propertyIdentifier": {
"objectName": "dataReductionCustomization",
"propertyName": "rowCount"
},
"defaultValue": "100"
},
"columnCount": {
"propertyIdentifier": {
"objectName": "dataReductionCustomization",
"propertyName": "columnCount"
},
"defaultValue": "10"
}
}
}
Oplysningerne om datareduktion vises under visualiseringen i formatruden.
Overvejelser og begrænsninger
Vinduesstørrelsen er begrænset til et interval på 2-30.000.
Det samlede antal rækker i datavisningen er begrænset til 1.048.576 rækker.
Hukommelsesstørrelsen for datavisning er begrænset til 100 MB i segmenters sammenlægningstilstand.