Forbedret oppdatering med REST-API-en for Power BI
Du kan bruke et hvilket som helst programmeringsspråk som støtter REST-kall til å utføre semantiske modelloppdateringsoperasjoner ved hjelp av REST-API-en for Power BI Refresh Dataset.
Optimalisert oppdatering for store og komplekse partisjonerte modeller aktiveres tradisjonelt med programmeringsmetoder som bruker TOM (tabellobjektmodell), PowerShell-cmdleter eller TMSL (tabellmodellskriptspråk). Disse metodene krever imidlertid langvarige HTTP-tilkoblinger som kan være upålitelige.
REST-API-en for Oppdateringsdatasett for Power BI kan utføre modelloppdateringsoperasjoner asynkront, slik at langvarige HTTP-tilkoblinger fra klientprogrammer ikke er nødvendige. Sammenlignet med standard oppdateringsoperasjoner gir forbedret oppdatering med REST-API-en flere tilpasningsalternativer og følgende funksjoner som er nyttige for store modeller:
- Satsvise utføringer
- Oppdatering på tabell- og partisjonsnivå
- Bruke policyer for trinnvis oppdatering
-
GET
oppdateringsdetaljer - Oppdater avlysning
- Tidsavbruddskonfigurasjon
Notat
- Tidligere ble forbedret oppdatering kalt asynkron oppdatering med REST-API-. En standardoppdatering som bruker REST-API-en for oppdateringsdatasett, kjører imidlertid også asynkront av sin iboende natur.
- Forbedrede oppdateringsoperasjoner for REST-API for Power BI oppdaterer ikke flisbuffere automatisk. Flisen bufrer bare oppdatering når en bruker får tilgang til en rapport.
Grunnleggende URL-adresse
Den grunnleggende URL-adressen er i følgende format:
https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/refreshes
Du kan tilføye ressurser og operasjoner til den grunnleggende URL-adressen basert på parametere. I diagrammet nedenfor er Grupper, Datasettog Oppdateringersamlinger. Grupper, Datasettog Oppdater er objekter.
Krav
Du trenger følgende krav for å bruke REST-API-en:
- En semantisk modell i Power BI Premium, Premium per bruker eller Power BI Embedded.
- En gruppe-ID og datasett-ID som skal brukes i url-adressen for forespørselen.
- Dataset.ReadWrite.All tillatelsesomfang.
Antall oppdateringer er begrenset i henhold til de generelle begrensningene for API-baserte oppdateringer for Pro- og Premium-modeller.
Godkjenning
Alle kall må godkjennes med et gyldig OAuth 2-token for Microsoft Entra ID i autorisasjonshodet. Tokenet må oppfylle følgende krav:
- Enten være et brukertoken eller en programtjenestekontohaver.
- Få målgruppen riktig satt til
https://api.powerbi.com
. - Brukes av en bruker eller et program som har tilstrekkelige tillatelser på modellen.
Notat
REST-API-endringer endrer ikke gjeldende definerte tillatelser for modelloppdateringer.
POST /refreshes
Hvis du vil gjøre en oppdatering, bruker du POST-verbet i /refreshes-samlingen til å legge til et nytt oppdateringsobjekt i samlingen. Plasseringshodet i svaret inkluderer requestId
. Fordi operasjonen er asynkron, kan et klientprogram koble fra og bruke requestId
til å kontrollere statusen senere om nødvendig.
Følgende kode viser en eksempelforespørsel:
POST https://api.powerbi.com/v1.0/myorg/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/refreshes
Forespørselsteksten kan ligne på følgende eksempel:
{
"type": "Full",
"commitMode": "transactional",
"maxParallelism": 2,
"retryCount": 2,
"timeout": "02:00:00",
"objects": [
{
"table": "DimCustomer",
"partition": "DimCustomer"
},
{
"table": "DimDate"
}
]
}
Notat
Tjenesten godtar bare én oppdateringsoperasjon om gangen for en modell. Hvis det er en gjeldende oppdatering som kjører og en annen forespørsel sendes inn, returneres en 400 Bad Request
HTTP-statuskode.
Parametere
Hvis du vil utføre en forbedret oppdateringsoperasjon, må du angi én eller flere parametere i forespørselsteksten. Angitte parametere kan angi standardverdien eller en valgfri verdi. Når forespørselen angir parametere, gjelder alle andre parametere for operasjonen med standardverdiene. Hvis forespørselen ikke angir noen parametere, bruker alle parameterne standardverdiene, og en standard oppdateringsoperasjon utføres.
Navn | Type | Standard | Beskrivelse |
---|---|---|---|
type |
Opplisting | automatic |
Behandlingstypen som skal utføres. Typer justeres etter kommandotypene for TMSL-oppdatering: full , clearValues , calculate , dataOnly , automatic og defragment . Den add typen støttes ikke. |
commitMode |
Opplisting | transactional |
Bestemmer om objekter skal utføres i grupper eller bare når de er fullført. Modi er transactional og partialBatch . Når du bruker partialBatch skjer ikke oppdateringsoperasjonen innenfor én transaksjon. Hver kommando utføres enkeltvis. Hvis det oppstår en feil, kan modellen være tom eller bare inneholde et delsett av dataene. Hvis du vil beskytte mot feil og beholde dataene som var i modellen før operasjonen startet, utfører du operasjonen med commitMode = transactional . |
maxParallelism |
Int | 10 |
Bestemmer maksimalt antall tråder som kan kjøre behandlingskommandoene parallelt. Denne verdien justeres etter MaxParallelism egenskap som kan angis i TMSL-Sequence -kommandoen eller ved hjelp av andre metoder. |
retryCount |
Int | 0 |
Antall ganger operasjonen utføres på nytt før den mislykkes. |
objects |
Matrise | Hele modellen | En matrise med objekter som skal behandles. Hvert objekt inneholder table når du behandler en hel tabell, eller table og partition når du behandler en partisjon. Hvis ingen objekter er angitt, oppdateres hele modellen. |
applyRefreshPolicy |
Boolsk | true |
Hvis en policy for trinnvis oppdatering er definert, bestemmer du om policyen skal brukes. Moduser er true eller false . Hvis policyen ikke brukes, lar hele prosessen partisjonsdefinisjonene være uendret, og alle partisjoner oppdateres fullstendig i tabellen. Hvis commitMode er transactional , kan applyRefreshPolicy være true eller false . Hvis commitMode er partialBatch , støttes ikke applyRefreshPolicy av true , og applyRefreshPolicy må settes til false . |
effectiveDate |
Daddel | Gjeldende dato | Hvis en policy for trinnvis oppdatering brukes, overstyrer effectiveDate -parameteren gjeldende dato. Hvis ikke angitt, bestemmes gjeldende dag ved hjelp av tidssonekonfigurasjon under Oppdater. |
timeout |
Streng | 05:00:00 (5 timer) | Hvis en timeout er angitt, følger hvert dataoppdateringsforsøk på den semantiske modellen denne tidsavbruddet. En enkelt oppdateringsforespørsel kan inneholde flere forsøk hvis retryCount er angitt, noe som kan føre til at den totale oppdateringsvarigheten overskrider det angitte tidsavbruddet. Hvis du for eksempel angir en timeout på 1 time med en retryCount på 2, kan det føre til en total varighet på opptil 3 timer. Brukere kan justere timeout for å forkorte oppdateringsvarigheten for raskere feilgjenkjenning eller utvide den utover standard fem timer for mer komplekse dataoppdateringer. Den totale oppdateringsvarigheten, inkludert nye forsøk, kan imidlertid ikke overstige 24 timer. |
Svar
202 Accepted
Svaret inkluderer også et Location
svarhodefelt for å peke innringeren til oppdateringsoperasjonen som ble opprettet og godtatt. Den Location
er plasseringen til den nye ressursen forespørselen opprettet, som inkluderer requestId
som noen forbedrede oppdateringsoperasjoner krever. I følgende svar er for eksempel requestId
den siste identifikatoren i svaret 87f31ef7-1e3a-4006-9b0b-191693e79e9e
.
x-ms-request-id: 87f31ef7-1e3a-4006-9b0b-191693e79e9e
Location: https://api.powerbi.com/v1.0/myorg/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/refreshes/87f31ef7-1e3a-4006-9b0b-191693e79e9e
HENT /oppdater
Bruk GET-verbet i /refreshes-samlingen til å vise historiske, gjeldende og ventende oppdateringsoperasjoner.
Svarteksten kan se ut som følgende eksempel:
[
{
"requestId": "1344a272-7893-4afa-a4b3-3fb87222fdac",
"refreshType": "ViaEnhancedApi",
"startTime": "2020-12-07T02:06:57.1838734Z",
"endTime": "2020-12-07T02:07:00.4929675Z",
"status": "Completed",
"extendedStatus": "Completed"
},
{
"requestId": "474fc5a0-3d69-4c5d-adb4-8a846fa5580b",
"startTime": "2020-12-07T01:05:54.157324Z",
"refreshType": "ViaEnhancedApi",
"status": "Unknown"
}
{
"requestId": "85a82498-2209-428c-b273-f87b3a1eb905",
"refreshType": "ViaEnhancedApi",
"startTime": "2020-12-07T01:05:54.157324Z",
"status": "Unknown",
"extendedStatus": "NotStarted"
}
]
Notat
Power BI kan droppe forespørsler hvis det er for mange forespørsler på kort tid. Power BI gjør en oppdatering, setter den neste forespørselen i kø og slipper alle andre. Etter utforming kan du ikke spørre om status for tapte forespørsler.
Svaregenskaper
Navn | Type | Beskrivelse |
---|---|---|
requestId |
Guid | Identifikatoren for oppdateringsforespørselen. Du må requestId spørre etter status for individuell oppdateringsoperasjon eller avbryte en pågående oppdateringsoperasjon. |
refreshType |
Streng |
OnDemand indikerer at oppdateringen ble utløst interaktivt gjennom Power BI-portalen.Scheduled indikerer at en modelloppdateringsplan utløste oppdateringen. ViaApi indikerer at et API-kall utløste oppdateringen. ViaEnhancedApi indikerer at et API-kall utløste en forbedret oppdatering. |
startTime |
Streng | Dato og klokkeslett for oppdateringsstart. |
endTime |
Streng | Dato og klokkeslett for oppdateringsslutt. |
status |
Streng |
Completed indikerer at oppdateringsoperasjonen er fullført. Failed indikerer at oppdateringsoperasjonen mislyktes. Unknown indikerer at fullføringstilstanden ikke kan fastslås. Med denne statusen er endTime tom. Disabled indikerer at oppdateringen ble deaktivert ved selektiv oppdatering. Cancelled indikerer at oppdateringen ble avbrutt. |
extendedStatus |
Streng | Utvider status -egenskapen for å gi mer informasjon. |
Notat
I Azure Analysis Services er det fullførte status
resultatet succeeded
. Hvis du overfører en Azure Analysis Services-løsning til Power BI, må du kanskje endre løsningene dine.
Begrens antall oppdateringsoperasjoner som returneres
REST-API-en for Power BI støtter begrensning av det forespurte antallet oppføringer i oppdateringsloggen ved hjelp av den valgfrie $top
-parameteren. Hvis ikke angitt, er standardoppføringene alle tilgjengelige oppføringer.
GET https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/refreshes?$top={$top}
HENt /oppdater/<requestId>
Hvis du vil kontrollere statusen for en oppdateringsoperasjon, bruker du GET-verbet på oppdateringsobjektet ved å angi requestId
. Hvis operasjonen pågår, returnerer status
InProgress
, som i følgende eksempel på svartekst:
{
"startTime": "2020-12-07T02:06:57.1838734Z",
"endTime": "2020-12-07T02:07:00.4929675Z",
"type": "Full",
"status": "InProgress",
"currentRefreshType": "Full",
"objects": [
{
"table": "DimCustomer",
"partition": "DimCustomer",
"status": "InProgress"
},
{
"table": "DimDate",
"partition": "DimDate",
"status": "InProgress"
}
]
}
SLETT /oppdater/<requestId>
Hvis du vil avbryte en forbedret oppdateringsoperasjon som pågår, bruker du DELETE-verbet på oppdateringsobjektet ved å angi requestId
.
For eksempel
DELETE https://api.powerbi.com/v1.0/myorg/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/refreshes/1344a272-7893-4afa-a4b3-3fb87222fdac
Hensyn og begrensninger
Oppdateringsoperasjonen har følgende vurderinger og begrensninger:
Standard oppdateringsoperasjoner
- Du kan ikke avbryte planlagte eller behovsbetingede modelloppdateringer som ble utløst ved å velge oppdateringsknappen i portalen ved hjelp av
DELETE /refreshes/<requestId>
. - Planlagte og behovsbetingede modelloppdateringer som ble utløst ved å velge oppdateringsknappen i portalen, støtter ikke å få oppdateringsoperasjonsdetaljer ved hjelp av
GET /refreshes/<requestId>
. - Få detaljer, og Avbryt er bare nye operasjoner for forbedret oppdatering. Standardoppdatering støtter ikke disse operasjonene.
Power BI Embedded
Hvis kapasiteten er midlertidig stanset manuelt i Power BI-portalen eller ved hjelp av PowerShell, eller et systemavbrudd oppstår, forblir statusen for en kontinuerlig forbedret oppdateringsoperasjon InProgress
i maksimalt seks timer. Hvis kapasiteten gjenopptas innen seks timer, gjenopptas oppdateringsoperasjonen automatisk. Hvis kapasiteten gjenopptas etter mer enn seks timer, kan oppdateringsoperasjonen returnere en tidsavbruddsfeil. Deretter må du starte oppdateringsoperasjonen på nytt.
Utestengelse av semantisk modell
Power BI bruker dynamisk minnebehandling til å optimalisere kapasitetsminnet. Hvis modellen utestenges fra minnet under en oppdateringsoperasjon, kan følgende feil returneres:
{
"messages": [
{
"code": "0xC11C0020",
"message": "Session cancelled because it is connected to a database that has been evicted to free up memory for other operations",
"type": "Error"
}
]
}
Løsningen er å kjøre oppdateringsoperasjonen på nytt. Hvis du vil lære mer om dynamisk minnebehandling og modellutkastelse, kan du se Modellutkastelse.
Tidsbegrensninger for oppdatering av operasjon
En oppdateringsoperasjon kan inneholde flere forsøk hvis retryCount
er angitt. Hvert forsøk har et standard tidsavbrudd på 5 timer, som kan justeres ved hjelp av timeout
-parameteren. Den totale oppdateringsvarigheten, inkludert nye forsøk, må ikke overstige 24 timer.
Hvis retryCount
angir et tall, starter en ny oppdateringsoperasjon med tidsavbruddsgrensen. Tjenesten starter denne operasjonen på nytt til den enten lykkes, når retryCount
grensen, eller når maksimumsgrensen på 24 timer fra det første forsøket.
Du kan justere timeout
for å forkorte oppdateringsvarigheten for raskere feilgjenkjenning eller utvide den utover standard fem timer for mer komplekse dataoppdateringer.
Når du planlegger semantisk modelloppdatering med REST-API-en for oppdatering av datasett, bør du vurdere tidsbegrensninger og parameteren RetryCount. En oppdatering kan overskride tidsavbruddet hvis det første forsøket mislykkes, og antall forsøk på nytt er satt til 1 eller flere. Hvis du ber om en oppdatering med «retryCount»: 1, og det første forsøket mislykkes etter 4 timer, begynner et nytt forsøk. Hvis dette lykkes om 3 timer, er den totale tiden for oppdateringen 7 timer.
Hvis oppdateringsoperasjoner regelmessig mislykkes, overskrider tidsbegrensningen for tidsavbrudd eller overskrider ønsket driftstid for vellykket oppdatering, bør du vurdere å redusere mengden data som oppdateres fra datakilden. Du kan dele oppdateringer i flere forespørsler, for eksempel en forespørsel for hver tabell. Du kan også angi partialBatch i commitMode-parameteren.
Kodeeksempel
Hvis du vil ha et C#-kodeeksempel for å komme i gang, kan du se RestApiSample på GitHub.
Slik bruker du kodeeksempelet:
- Klon eller last ned repo.
- Åpne RestApiSample-løsningen.
- Finn linjen
client.BaseAddress = …
, og angi den grunnleggende URL-adressen.
Kodeeksempelet bruker godkjenning av tjenestekontohaver.