Förbättrad uppdatering med Power BI REST API
Du kan använda valfritt programmeringsspråk som stöder REST-anrop för att utföra semantiska modelluppdateringsåtgärder med hjälp av REST-API:et för Power BI-uppdateringsdatauppsättning.
Optimerad uppdatering för stora och komplexa partitionerade modeller anropas traditionellt med programmeringsmetoder som använder TOM (tabellobjektmodell), PowerShell-cmdletar eller TMSL (skriptspråk för tabellmodell). Dessa metoder kräver dock långvariga HTTP-anslutningar som kan vara otillförlitliga.
Rest-API:et för Power BI-uppdateringsdatauppsättningen kan utföra modelluppdateringsåtgärder asynkront, så tidskrävande HTTP-anslutningar från klientprogram är inte nödvändiga. Jämfört med standarduppdateringsåtgärder ger förbättrad uppdatering med REST-API:et fler anpassningsalternativ och följande funktioner som är användbara för stora modeller:
- Batchincheckningar
- Uppdatering på tabell- och partitionsnivå
- Tillämpa inkrementella uppdateringsprinciper
GET
uppdatera information- Avbokning av uppdatering
Kommentar
- Tidigare kallades förbättrad uppdatering för asynkron uppdatering med REST API. Men en standarduppdatering som använder REST-API:et Uppdatera datauppsättning körs också asynkront på grund av dess inneboende natur.
- Förbättrade power BI REST API-uppdateringsåtgärder uppdaterar inte panelcacheminnen automatiskt. Panelen cachelagrar uppdatering endast när en användare kommer åt en rapport.
Bas-URL
Bas-URL:en har följande format:
https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/refreshes
Du kan lägga till resurser och åtgärder i bas-URL:en baserat på parametrar. I följande diagram är grupper, datauppsättningar och uppdateringar samlingar. Grupp, datauppsättning och uppdatering är objekt.
Behov
Du behöver följande krav för att använda REST-API:et:
- En semantisk modell i Power BI Premium, Premium per användare eller Power BI Embedded.
- Ett grupp-ID och datamängds-ID som ska användas i begärande-URL:en.
- Dataset.ReadWrite.All behörighetsomfång.
Antalet uppdateringar är begränsat enligt de allmänna begränsningarna för API-baserade uppdateringar för Pro- och Premium-modeller.
Autentisering
Alla anrop måste autentiseras med en giltig Microsoft Entra ID OAuth 2-token i auktoriseringshuvudet. Token måste uppfylla följande krav:
- Vara antingen en användartoken eller ett huvudnamn för programtjänsten.
- Låt målgruppen vara korrekt inställd på
https://api.powerbi.com
. - Används av en användare eller ett program som har tillräcklig behörighet för modellen.
Kommentar
REST API-ändringar ändrar inte för närvarande definierade behörigheter för modelluppdateringar.
POST /refreshes
Om du vill göra en uppdatering använder du POST-verbet i samlingen /refreshes för att lägga till ett nytt uppdateringsobjekt i samlingen. Platsrubriken i svaret innehåller requestId
. Eftersom åtgärden är asynkron kan ett klientprogram koppla från och använda requestId
för att kontrollera statusen senare om det behövs.
Följande kod visar en exempelbegäran:
POST https://api.powerbi.com/v1.0/myorg/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/refreshes
Begärandetexten kan likna följande exempel:
{
"type": "Full",
"commitMode": "transactional",
"maxParallelism": 2,
"retryCount": 2,
"objects": [
{
"table": "DimCustomer",
"partition": "DimCustomer"
},
{
"table": "DimDate"
}
]
}
Kommentar
Tjänsten accepterar endast en uppdateringsåtgärd i taget för en modell. Om det finns en aktuell uppdatering som körs och en annan begäran skickas returnerar en 400 Bad Request
HTTP-statuskod.
Parametrar
Om du vill utföra en förbättrad uppdateringsåtgärd måste du ange en eller flera parametrar i begärandetexten. Angivna parametrar kan ange standardvärdet eller ett valfritt värde. När begäran anger parametrar gäller alla andra parametrar för åtgärden med deras standardvärden. Om begäran inte anger några parametrar använder alla parametrar sina standardvärden och en standarduppdateringsåtgärd utförs.
Namn | Type | Standardvärde | beskrivning |
---|---|---|---|
type |
Enum | automatic |
Vilken typ av bearbetning som ska utföras. Typerna överensstämmer med TMSL-uppdateringskommandotyperna: full , clearValues , calculate , dataOnly , automatic och defragment . Typen add stöds inte. |
commitMode |
Enum | transactional |
Avgör om objekt ska checkas in i batchar eller bara när de är klara. Lägen är transactional och partialBatch . När du använder partialBatch uppdateringsåtgärden sker inte inom en transaktion. Varje kommando checkas in individuellt. Om det uppstår ett fel kan modellen vara tom eller bara innehålla en delmängd av data. För att skydda mot fel och behålla de data som fanns i modellen innan åtgärden startade kör du åtgärden med commitMode = transactional . |
maxParallelism |
Int | 10 |
Avgör det maximala antalet trådar som kan köra bearbetningskommandona parallellt. Det här värdet överensstämmer med egenskapen MaxParallelism som kan anges i TMSL-kommandot Sequence eller med hjälp av andra metoder. |
retryCount |
Int | 0 |
Antal gånger åtgärden försöker igen innan den misslyckas. |
objects |
Matris | Hela modellen | En matris med objekt som ska bearbetas. Varje objekt inkluderar table när en hel tabell bearbetas eller table partition när en partition bearbetas. Om inga objekt anges uppdateras hela modellen. |
applyRefreshPolicy |
Booleskt | true |
Om en inkrementell uppdateringsprincip har definierats avgör du om principen ska tillämpas. Lägen är true eller false . Om principen inte tillämpas lämnar den fullständiga processen partitionsdefinitionerna oförändrade och uppdaterar alla partitioner i tabellen fullständigt. Om commitMode är transactional , applyRefreshPolicy kan vara true eller false . Om commitMode är partialBatch stöds applyRefreshPolicy inte av true och applyRefreshPolicy måste anges till false . |
effectiveDate |
Datum | Aktuellt datum | Om en inkrementell uppdateringsprincip tillämpas åsidosätter parametern effectiveDate det aktuella datumet. Om det inte anges används UTC för att fastställa den aktuella dagen. |
Response
202 Accepted
Svaret innehåller också ett Location
svarshuvudfält som pekar anroparen på uppdateringsåtgärden som skapades och accepterades. Location
är platsen för den nya resursen som begäran skapades, vilket inkluderar den requestId
som vissa förbättrade uppdateringsåtgärder kräver. I följande svar requestId
är till exempel den sista identifieraren 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
GET/refreshes
Använd GET-verbet i samlingen /refreshes för att visa historiska, aktuella och väntande uppdateringsåtgärder.
Svarstexten kan se ut som i följande exempel:
[
{
"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",
"endTime": "2020-12-07T01:05:57.353371Z",
"status": "Unknown"
}
{
"requestId": "85a82498-2209-428c-b273-f87b3a1eb905",
"refreshType": "ViaEnhancedApi",
"startTime": "2020-12-07T01:05:54.157324Z",
"endTime": "2020-12-07T01:05:57.353371Z",
"status": "Unknown",
"extendedStatus": "NotStarted"
}
]
Kommentar
Power BI kan ta bort begäranden om det finns för många begäranden på kort tid. Power BI gör en uppdatering, köar nästa begäran och släpper alla andra. Du kan inte fråga efter status för borttagna begäranden.
Svarsegenskaper
Namn | Type | Beskrivning |
---|---|---|
requestId |
GUID | Identifieraren för uppdateringsbegäran. Du måste requestId fråga efter status för enskilda uppdateringar eller avbryta en pågående uppdateringsåtgärd. |
refreshType |
String | OnDemand anger att uppdateringen utlöstes interaktivt via Power BI-portalen.Scheduled anger att ett modelluppdateringsschema utlöste uppdateringen. ViaApi anger att ett API-anrop utlöste uppdateringen. ViaEnhancedApi anger att ett API-anrop utlöste en förbättrad uppdatering. |
startTime |
String | Datum och tid för uppdateringsstart. |
endTime |
String | Datum och tid för uppdateringsslut. |
status |
String | Completed anger att uppdateringsåtgärden har slutförts. Failed anger att uppdateringsåtgärden misslyckades. Unknown anger att slutförandetillståndet inte kan fastställas. Med den här statusen endTime är den tom. Disabled anger att uppdateringen inaktiverades av selektiv uppdatering. Cancelled anger att uppdateringen avbröts. |
extendedStatus |
String | Utökar egenskapen status för att ge mer information. |
Kommentar
I Azure Analysis Services är succeeded
det slutförda status
resultatet . Om du migrerar en Azure Analysis Services-lösning till Power BI kan du behöva ändra dina lösningar.
Begränsa antalet returnerade uppdateringsåtgärder
Power BI REST API stöder begränsning av det begärda antalet poster i uppdateringshistoriken med hjälp av den valfria $top
parametern. Om det inte anges är standardvärdet alla tillgängliga poster.
GET https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/refreshes?$top={$top}
GET /refreshes/<requestId>
Om du vill kontrollera status för en uppdateringsåtgärd använder du GET-verbet på uppdateringsobjektet genom att requestId
ange . Om åtgärden pågår status
returnerar InProgress
, som i följande exempelsvarstext:
{
"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"
}
]
}
DELETE /refreshes/<requestId>
Om du vill avbryta en pågående förbättrad uppdateringsåtgärd använder du DELETE-verbet på uppdateringsobjektet genom att requestId
ange .
Exempel:
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
Beaktanden och begränsningar
Uppdateringsåtgärden har följande överväganden och begränsningar:
Standarduppdateringsåtgärder
- Du kan inte avbryta schemalagda eller manuella modelluppdateringar på begäran med hjälp
DELETE /refreshes/<requestId>
av . - Schemalagda och manuella modelluppdateringar på begäran stöder inte uppdateringsåtgärdsinformation med hjälp
GET /refreshes/<requestId>
av . - Hämta information och Avbryt är bara nya åtgärder för förbättrad uppdatering. Standarduppdateringen stöder inte dessa åtgärder.
Power BI Embedded
Om kapaciteten pausas manuellt i Power BI-portalen eller med hjälp av PowerShell, eller om ett systemstopp inträffar, förblir statusen för pågående förbättrad uppdateringsåtgärd i InProgress
högst sex timmar. Om kapaciteten återupptas inom sex timmar återupptas uppdateringsåtgärden automatiskt. Om kapaciteten återupptas efter mer än sex timmar kan uppdateringsåtgärden returnera ett timeoutfel. Sedan måste du starta om uppdateringsåtgärden.
Avhysning av semantisk modell
Power BI använder dynamisk minneshantering för att optimera kapacitetsminnet. Om modellen tas bort från minnet under en uppdateringsåtgärd kan följande fel returneras:
{
"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 är att köra uppdateringsåtgärden igen. Mer information om dynamisk minneshantering och modellavhysning finns i Modellavhysning.
Tidsgränser för uppdateringsåtgärd
Den maximala tiden för en enskild uppdateringsåtgärd är fem timmar. Om uppdateringsåtgärden inte har slutförts inom femtimmarsgränsen och retryCount
inte har angetts eller anges som 0
(standard) i begärandetexten returneras ett timeout-fel.
Om retryCount
anger 1
eller ett annat tal startar en ny uppdateringsåtgärd med en gräns på fem timmar. Om den här återförsöksåtgärden misslyckas fortsätter tjänsten att försöka uppdatera igen upp till det största antalet återförsök som retryCount
anger, eller den utökade tidsgränsen för uppdateringsbearbetning på 24 timmar från början av den första uppdateringsbegäran.
När du planerar din förbättrade modelluppdateringslösning med REST-API:et Uppdatera datauppsättning är det viktigt att tänka på dessa tidsgränser och parametern retryCount
. En lyckad uppdatering kan överstiga fem timmar om en inledande uppdatering misslyckas och retryCount
anger 1
eller mer.
Om du till exempel begär en uppdateringsåtgärd med "retryCount": 1
, och den första återförsöksåtgärden misslyckas fyra timmar från starttiden, påbörjas en andra uppdateringsåtgärd för den begäran. Om den andra uppdateringsåtgärden lyckas på tre timmar är den totala tiden för lyckad körning av uppdateringsbegäran sju timmar.
Om uppdateringsåtgärder regelbundet misslyckas, överskrider tidsgränsen på fem timmar eller överskrider önskad lyckad uppdateringsåtgärd kan du överväga att minska mängden data som uppdateras från datakällan. Du kan dela upp uppdateringen i flera begäranden, till exempel en begäran för varje tabell. Du kan också ange partialBatch
i parametern commitMode
.
Kodexempel
Ett C#-kodexempel för att komma igång finns i RestApiSample på GitHub.
Så här använder du kodexemplet:
- Klona eller ladda ned lagringsplatsen.
- Öppna RestApiSample-lösningen.
- Leta upp raden
client.BaseAddress = …
och ange din bas-URL.
Kodexemplet använder autentisering med tjänstens huvudnamn.