Verbeterde vernieuwing met de Power BI REST API
U kunt elke programmeertaal gebruiken die REST-aanroepen ondersteunt om semantische bewerkingen voor het vernieuwen van modellen uit te voeren met behulp van de REST API voor Power BI Refresh Dataset.
Geoptimaliseerd vernieuwen voor grote en complexe gepartitioneerde modellen wordt traditioneel aangeroepen met programmeermethoden die gebruikmaken van TOM (Tabular Object Model), PowerShell-cmdlets of TMSL (Tabular Model Scripting Language). Voor deze methoden zijn echter langlopende HTTP-verbindingen vereist die onbetrouwbaar kunnen zijn.
De REST API voor Power BI Refresh Dataset kan modelvernieuwingsbewerkingen asynchroon uitvoeren, zodat langlopende HTTP-verbindingen van clienttoepassingen niet nodig zijn. In vergelijking met standaardvernieuwingsbewerkingen biedt verbeterde vernieuwing met de REST API meer aanpassingsopties en de volgende functies die nuttig zijn voor grote modellen:
- Batchgewijze doorvoeringen
- Vernieuwen op tabel- en partitieniveau
- Beleid voor incrementeel vernieuwen toepassen
GET
details vernieuwen- Annulering vernieuwen
Notitie
- Voorheen werd verbeterde vernieuwing asynchrone vernieuwing met REST API genoemd. Een standaardvernieuwing die gebruikmaakt van de REST API voor gegevensset vernieuwen, wordt echter ook asynchroon uitgevoerd op basis van de inherente aard.
- Verbeterde vernieuwingsbewerkingen voor Power BI REST API vernieuwen niet automatisch tegelcaches. Tegel wordt alleen vernieuwd wanneer een gebruiker een rapport opent.
Basis-URL
De basis-URL heeft de volgende indeling:
https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/refreshes
U kunt resources en bewerkingen toevoegen aan de basis-URL op basis van parameters. In het volgende diagram zijn groepen, gegevenssets en vernieuwingen verzamelingen. Groep, gegevensset en vernieuwen zijn objecten.
Vereisten
U hebt de volgende vereisten nodig om de REST API te gebruiken:
- Een semantisch model in Power BI Premium, Premium per gebruiker of Power BI Embedded.
- Een groeps-id en gegevensset-id die moeten worden gebruikt in de aanvraag-URL.
- Dataset.ReadWrite.All permission scope.
Het aantal vernieuwingen is beperkt volgens de algemene beperkingen voor op API gebaseerde vernieuwingen voor Pro- en Premium-modellen.
Verificatie
Alle aanroepen moeten worden geverifieerd met een geldig OAuth 2-token van Microsoft Entra ID in de autorisatieheader. Het token moet voldoen aan de volgende vereisten:
- Een gebruikerstoken of een service-principal voor toepassingen zijn.
- Laat de doelgroep juist instellen op
https://api.powerbi.com
. - Worden gebruikt door een gebruiker of toepassing met voldoende machtigingen voor het model.
Notitie
REST API-wijzigingen wijzigen momenteel gedefinieerde machtigingen voor modelvernieuwingen niet.
POST/vernieuwingen
Als u een vernieuwing wilt uitvoeren, gebruikt u de POST-bewerking in de verzameling /refreshes om een nieuw vernieuwingsobject toe te voegen aan de verzameling. De locatieheader in het antwoord bevat de requestId
. Omdat de bewerking asynchroon is, kan een clienttoepassing de verbinding verbreken en de requestId
status zo nodig controleren.
De volgende code toont een voorbeeldaanvraag:
POST https://api.powerbi.com/v1.0/myorg/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/refreshes
De hoofdtekst van de aanvraag lijkt mogelijk op het volgende voorbeeld:
{
"type": "Full",
"commitMode": "transactional",
"maxParallelism": 2,
"retryCount": 2,
"objects": [
{
"table": "DimCustomer",
"partition": "DimCustomer"
},
{
"table": "DimDate"
}
]
}
Notitie
De service accepteert slechts één vernieuwingsbewerking tegelijk voor een model. Als er een huidige actieve vernieuwing is en er een andere aanvraag wordt ingediend, retourneert een 400 Bad Request
HTTP-statuscode.
Parameters
Als u een verbeterde vernieuwingsbewerking wilt uitvoeren, moet u een of meer parameters opgeven in de aanvraagbody. Opgegeven parameters kunnen de standaardwaarde of een optionele waarde opgeven. Wanneer de aanvraag parameters opgeeft, zijn alle andere parameters van toepassing op de bewerking met hun standaardwaarden. Als de aanvraag geen parameters opgeeft, gebruiken alle parameters hun standaardwaarden en wordt er een standaardvernieuwingsbewerking uitgevoerd.
Name | Type | Standaard | Beschrijving |
---|---|---|---|
type |
Opsomming | automatic |
Het type verwerking dat moet worden uitgevoerd. Typen worden uitgelijnd met de opdrachttypen tmSL-vernieuwing: , , , , en defragment automatic . dataOnly calculate clearValues full Het add type wordt niet ondersteund. |
commitMode |
Opsomming | transactional |
Bepaalt of objecten in batches moeten worden doorgevoerd of alleen wanneer deze zijn voltooid. Modi zijn transactional en partialBatch . Wanneer u partialBatch de vernieuwingsbewerking gebruikt, vindt deze niet plaats binnen één transactie. Elke opdracht wordt afzonderlijk doorgevoerd. Als er een fout opgetreden is, is het model mogelijk leeg of bevat het alleen een subset van de gegevens. Als u wilt beschermen tegen fouten en de gegevens wilt bewaren die zich in het model bevond voordat de bewerking werd gestart, voert u de bewerking uit met commitMode = transactional . |
maxParallelism |
Int | 10 |
Bepaalt het maximum aantal threads dat de verwerkingsopdrachten parallel kan uitvoeren. Deze waarde wordt uitgelijnd met de MaxParallelism eigenschap die kan worden ingesteld in de TMSL-opdracht Sequence of met behulp van andere methoden. |
retryCount |
Int | 0 |
Aantal keren dat de bewerking opnieuw wordt geprobeerd voordat de bewerking mislukt. |
objects |
Matrix | Volledig model | Een matrix met objecten die moeten worden verwerkt. Elk object bevat table bij het verwerken van een hele tabel of partition table bij het verwerken van een partitie. Als er geen objecten zijn opgegeven, wordt het hele model vernieuwd. |
applyRefreshPolicy |
Booleaanse waarde | true |
Als een beleid voor incrementeel vernieuwen is gedefinieerd, bepaalt u of het beleid moet worden toegepast. Modi zijn true of false . Als het beleid niet wordt toegepast, blijven partitiedefinities ongewijzigd en worden alle partities in de tabel volledig vernieuwd. Als commitMode dat het is transactional , applyRefreshPolicy kan het zijn true of false . Als commitMode dat het is partialBatch , applyRefreshPolicy true van wordt niet ondersteund en applyRefreshPolicy moet worden ingesteld op false . |
effectiveDate |
Datum | Huidige datum | Als een beleid voor incrementeel vernieuwen wordt toegepast, overschrijft de effectiveDate parameter de huidige datum. Als dit niet is opgegeven, wordt UTC gebruikt om de huidige dag te bepalen. |
Respons
202 Accepted
Het antwoord bevat ook een Location
antwoordheaderveld om de aanroeper te laten verwijzen naar de vernieuwingsbewerking die is gemaakt en geaccepteerd. Dit Location
is de locatie van de nieuwe resource die de aanvraag heeft gemaakt, waaronder de requestId
vereiste verbeterde vernieuwingsbewerkingen. In het volgende antwoord requestId
is bijvoorbeeld de laatste id in het antwoord 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
Gebruik de GET-bewerking in de verzameling /refreshes om historische, huidige en in behandeling zijnde vernieuwingsbewerkingen weer te geven.
De hoofdtekst van het antwoord ziet er mogelijk uit zoals in het volgende voorbeeld:
[
{
"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"
}
]
Notitie
Power BI kan aanvragen verwijderen als er te veel aanvragen in een korte periode zijn. Power BI voert een vernieuwing uit, zet de volgende aanvraag in de wachtrij en verwijdert alle andere. Standaard kunt u geen querystatus uitvoeren op verwijderde aanvragen.
Responseigenschappen
Name | Type | Description |
---|---|---|
requestId |
Guid | De id van de vernieuwingsaanvraag. U moet requestId een query uitvoeren op de status van een afzonderlijke vernieuwingsbewerking of een actieve vernieuwingsbewerking annuleren. |
refreshType |
String | OnDemand geeft aan dat het vernieuwen interactief is geactiveerd via de Power BI-portal.Scheduled geeft aan dat een schema voor modelvernieuwing de vernieuwing heeft geactiveerd. ViaApi geeft aan dat een API-aanroep de vernieuwing heeft geactiveerd. ViaEnhancedApi geeft aan dat een API-aanroep een verbeterde vernieuwing heeft geactiveerd. |
startTime |
String | De datum en tijd waarop het vernieuwen is gestart. |
endTime |
String | De datum en tijd waarop het vernieuwen is beëindigd. |
status |
String | Completed geeft aan dat de vernieuwingsbewerking is voltooid. Failed geeft aan dat de vernieuwingsbewerking is mislukt. Unknown geeft aan dat de voltooiingsstatus niet kan worden bepaald. Met deze status endTime is deze leeg. Disabled geeft aan dat de vernieuwing is uitgeschakeld door selectief vernieuwen. Cancelled geeft aan dat het vernieuwen is geannuleerd. |
extendedStatus |
String | Vergroot de status accommodatie om meer informatie te verstrekken. |
Notitie
In Azure Analysis Services is succeeded
het voltooide status
resultaat. Als u een Azure Analysis Services-oplossing migreert naar Power BI, moet u mogelijk uw oplossingen wijzigen.
Het aantal geretourneerde vernieuwingsbewerkingen beperken
De Power BI REST API biedt ondersteuning voor het beperken van het aangevraagde aantal vermeldingen in de vernieuwingsgeschiedenis met behulp van de optionele $top
parameter. Als dit niet is opgegeven, is de standaardwaarde alle beschikbare vermeldingen.
GET https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/refreshes?$top={$top}
GET /refreshes/<requestId>
Als u de status van een vernieuwingsbewerking wilt controleren, gebruikt u de GET-bewerking voor het vernieuwingsobject door het requestId
op te geven. Als de bewerking wordt uitgevoerd, retourneert InProgress
deze, status
zoals in de volgende voorbeeldtekst van het antwoord:
{
"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>
Als u een uitgebreide vernieuwingsbewerking wilt annuleren, gebruikt u de bewerking DELETE in het vernieuwingsobject door het requestId
op te geven.
Bijvoorbeeld:
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
Overwegingen en beperkingen
De vernieuwingsbewerking heeft de volgende overwegingen en beperkingen:
Standaardvernieuwingsbewerkingen
- U kunt geplande of on-demand handmatige modelvernieuwing niet annuleren met behulp van
DELETE /refreshes/<requestId>
. - Geplande en on-demand handmatige modelvernieuwing biedt geen ondersteuning voor het ophalen van details van vernieuwingsbewerkingen met behulp van
GET /refreshes/<requestId>
. - Details ophalen en Annuleren zijn alleen nieuwe bewerkingen voor verbeterde vernieuwing. Standaardvernieuwing biedt geen ondersteuning voor deze bewerkingen.
Power BI Embedded
Als de capaciteit handmatig wordt onderbroken in de Power BI-portal of met behulp van PowerShell, of als er een systeemstoring optreedt, blijft InProgress
de status van een doorlopende vernieuwingsbewerking maximaal zes uur bestaan. Als de capaciteit binnen zes uur wordt hervat, wordt de vernieuwingsbewerking automatisch hervat. Als de capaciteit na langer dan zes uur wordt hervat, kan de vernieuwingsbewerking een time-outfout retourneren. Vervolgens moet u de vernieuwingsbewerking opnieuw starten.
Semantische modelverwijdering
Power BI maakt gebruik van dynamisch geheugenbeheer om capaciteitsgeheugen te optimaliseren. Als het model tijdens een vernieuwingsbewerking uit het geheugen wordt verwijderd, kan de volgende fout worden geretourneerd:
{
"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"
}
]
}
De oplossing is om de vernieuwingsbewerking opnieuw uit te voeren. Zie Modelverwijdering voor meer informatie over dynamisch geheugenbeheer en modelverwijdering.
Tijdslimieten voor vernieuwingsbewerkingen
De maximale tijdsduur voor één vernieuwingsbewerking is vijf uur. Als de vernieuwingsbewerking niet binnen de limiet van vijf uur is voltooid en retryCount
niet is opgegeven of is opgegeven als 0
(de standaardinstelling) in de aanvraagbody, wordt er een time-outfout geretourneerd.
Als retryCount
u een ander nummer opgeeft 1
, wordt een nieuwe vernieuwingsbewerking met een limiet van vijf uur gestart. Als deze bewerking voor opnieuw proberen mislukt, blijft de service de vernieuwingsbewerking opnieuw uitvoeren tot het grootste aantal nieuwe pogingen dat retryCount
aangeeft, of de tijdslimiet voor de verbeterde vernieuwingsverwerking van 24 uur vanaf het begin van de eerste vernieuwingsaanvraag.
Wanneer u uw verbeterde oplossing voor modelvernieuwing plant met de REST API voor gegevensset vernieuwen, is het belangrijk om rekening te houden met deze tijdslimieten en de retryCount
parameter. Een geslaagde vernieuwing kan langer zijn dan vijf uur als een initiële vernieuwingsbewerking mislukt en retryCount
of meer opgeeft 1
.
Als u bijvoorbeeld een vernieuwingsbewerking aanvraagt met "retryCount": 1
en de eerste bewerking voor opnieuw proberen vier uur na de begintijd mislukt, wordt een tweede vernieuwingsbewerking voor die aanvraag gestart. Als deze tweede vernieuwingsbewerking in drie uur slaagt, is de totale tijd voor een geslaagde uitvoering van de vernieuwingsaanvraag zeven uur.
Als vernieuwingsbewerkingen regelmatig mislukken, de tijdslimiet van vijf uur overschrijden of de gewenste geslaagde vernieuwingsbewerkingstijd overschrijden, kunt u overwegen om de hoeveelheid gegevens die worden vernieuwd uit de gegevensbron te verminderen. U kunt vernieuwen splitsen in meerdere aanvragen, bijvoorbeeld een aanvraag voor elke tabel. U kunt ook opgeven partialBatch
in de commitMode
parameter.
Voorbeeld van code
Zie RestApiSample op GitHub voor een voorbeeld van C#-code om u op weg te helpen.
Het codevoorbeeld gebruiken:
- Kloon of download de opslagplaats.
- Open de RestApiSample-oplossing.
- Zoek de regel
client.BaseAddress = …
en geef uw basis-URL op.
In het codevoorbeeld wordt verificatie van de service-principal gebruikt.