Erweiterte Aktualisierung mit der Power BI-REST-API
Sie können jede beliebige Programmiersprache, die REST-Aufrufe unterstützt, für Aktualisierungsvorgänge von Semantikmodellen mithilfe der Power BI-REST-API zum Aktualisieren von Datasets verwenden.
Für eine optimierte Aktualisierung bei großen und komplexen partitionierten Modellen wurden traditionell Programmiermethoden unter Verwendung von TOM (Tabular Object Model, tabellarisches Objektmodell), PowerShell-Cmdlets oder TMSL (Tabular Model Scripting Language, Skriptsprache für tabellarische Modelle) eingesetzt. Diese Methoden erfordern jedoch lange bestehende HTTP-Verbindungen, die unzuverlässig sein können.
Die Power BI-REST-API zum Aktualisieren von Datasets kann Aktualisierungsvorgänge von Modellen asynchron ausführen, sodass keine lange bestehenden HTTP-Verbindungen von Clientanwendungen erforderlich sind. Im Vergleich zu Standardaktualisierungsvorgängen bietet die erweiterte Aktualisierung mithilfe der REST-API zusätzliche Anpassungsoptionen und die folgenden Features, die für große Modelle nützlich sind:
- Commits im Batch
- Aktualisierung auf Tabellen- und Partitionsebene
- Anwenden von Richtlinien für die inkrementelle Aktualisierung
GET
von Details zur Aktualisierung- Abbruch der Aktualisierung
Hinweis
- Früher wurde die erweiterte Aktualisierung als asynchrone Aktualisierung mit REST-API bezeichnet. Eine Standardaktualisierung mit der REST-API zur Datasetaktualisierung wird jedoch prinzipbedingt asynchron ausgeführt.
- Erweiterte Power BI-REST-API-Aktualisierungsvorgänge übernehmen keine automatische Aktualisierung der Kachelcaches. Die Caches der Kacheln werden nur aktualisiert, wenn ein Benutzer auf einen Bericht zugreift.
Basis-URL
Die Basis-URL weist das folgende Format auf:
https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/refreshes
Sie können Ressourcen und Vorgänge auf der Grundlage von Parametern an die Basis-URL anfügen. Im folgenden Diagramm stellen Gruppen, Datasets und AktualisierungenSammlungen dar. Gruppe, Dataset und Aktualisierung sind Objekte.
Anforderungen
Sie müssen die folgenden Anforderungen erfüllen, um die REST-API zu verwenden:
- Ein Semantikmodell in Power BI Premium, einer Premium-Einzelbenutzerlizenz oder Power BI Embedded.
- Eine Gruppen-ID und Dataset-ID, die in der Anforderungs-URL verwendet werden soll.
- Den Berechtigungs-Geltungsbereich Dataset.ReadWrite.All.
Die Anzahl der Aktualisierungen ist gemäß den allgemeinen Einschränkungen für API-basierte Aktualisierungen für Pro- ebenso wie für Premium-Modelle beschränkt.
Authentifizierung
Alle Aufrufe müssen mit einem gültigen Microsoft Entra ID OAuth 2-Token im Autorisierungsheader authentifiziert werden. Das Token muss die folgenden Anforderungen erfüllen:
- Es muss entweder ein Benutzertoken oder ein Anwendungsdienstprinzipal sein.
- Die Zielgruppe muss ordnungsgemäß auf
https://api.powerbi.com
festgelegt sein. - Es muss von einem Benutzer oder einer Anwendung verwendet werden, der bzw. die über ausreichende Berechtigungen für das Modell verfügt.
Hinweis
Durch REST API-Änderungen werden die aktuell definierten Berechtigungen für Modellaktualisierungen nicht geändert.
POST /refreshes
Verwenden Sie zum Ausführen einer Aktualisierung das POST-Verb für die /refreshes-Sammlung, um der Sammlung ein neues Aktualisierungsobjekt hinzuzufügen. Der Location-Header in der Antwort enthält die requestId
. Da der Vorgang asynchron ist, kann eine Clientanwendung die Verbindung trennen und die requestId
verwenden, um den Status bei Bedarf später zu überprüfen.
Der folgende Code zeigt eine Beispielanforderung:
POST https://api.powerbi.com/v1.0/myorg/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/refreshes
Der Anforderungstext kann etwa dem folgenden Beispiel ähneln:
{
"type": "Full",
"commitMode": "transactional",
"maxParallelism": 2,
"retryCount": 2,
"objects": [
{
"table": "DimCustomer",
"partition": "DimCustomer"
},
{
"table": "DimDate"
}
]
}
Hinweis
Der Dienst akzeptiert jeweils nur einen Aktualisierungsvorgang für ein Modell. Wenn aktuell eine Aktualisierung ausgeführt und eine weitere Anforderung übermittelt wird, wird der HTTP-Statuscode 400 Bad Request
zurückgegeben.
Parameter
Zum Ausführen eines erweiterten Aktualisierungsvorgangs müssen Sie einen oder mehrere Parameter im Anforderungstext angeben. Über die angegebenen Parameter kann der Standardwert oder ein optionaler Wert angegeben werden. Wenn die Anforderung Parameter angibt, gelten alle anderen Parameter mit ihren Standardwerten für den Vorgang. Wenn die Anforderung keine Parameter angibt, verwenden alle Parameter ihre Standardwerte, und es wird ein Standardaktualisierungsvorgang durchgeführt.
Name | type | Standard | BESCHREIBUNG |
---|---|---|---|
type |
Enum | automatic |
Der auszuführende Verarbeitungstyp. Typen werden an den TMSL-Aktualisierungsbefehlstypen ausgerichtet: full , clearValues , calculate , dataOnly , automatic und defragment . Der Typ add wird nicht unterstützt. |
commitMode |
Enumeration | transactional |
Bestimmt, ob Objekte in Batches oder erst nach Abschluss committet werden sollen. Die Modi sind transactional und partialBatch . Bei Verwendung von partialBatch findet der Aktualisierungsvorgang nicht innerhalb einer Transaktion statt. Jeder Befehl wird einzeln committet. Wenn ein Fehler auftritt, ist das Modell möglicherweise leer oder enthält nur eine Teilmenge der Daten. Führen Sie den Vorgang mit commitMode = transactional aus, um sich vor Fehlern zu schützen und die Daten beizubehalten, die sich vor dem Beginn des Vorgangs im Modell befanden. |
maxParallelism |
Int | 10 |
Bestimmt die maximale Anzahl von Threads, die die Verarbeitungsbefehle parallel ausführen können. Dieser Wert orientiert sich an der MaxParallelism -Eigenschaft, die im TMSL-Befehl Sequence oder mit anderen Methoden festgelegt werden kann. |
retryCount |
Int | 0 |
Gibt an, wie oft der Vorgang wiederholt wird, bevor ein Fehler ausgegeben wird. |
objects |
Array | Gesamtes Model | Ein Array zu verarbeitender Objekte. Jedes Objekt enthält table , wenn eine gesamte Tabelle verarbeitet wird, oder table und partition , wenn eine Partition verarbeitet wird. Wenn keine Objekte angegeben werden, wird das gesamte Modell aktualisiert. |
applyRefreshPolicy |
Boolean | true |
Bestimmt, wenn eine Richtlinie für die inkrementelle Aktualisierung definiert ist, ob die Richtlinie angewendet werden soll. Die Modi sind true oder false . Wenn die Richtlinie nicht angewendet wird, belässt der gesamte Prozess die Partitionsdefinitionen unverändert und aktualisiert alle Partitionen in der Tabelle vollständig. Wenn commitMode transactional ist, kann applyRefreshPolicy true oder false sein. Wenn commitMode partialBatch ist, wird applyRefreshPolicy von true nicht unterstützt und applyRefreshPolicy muss auf false festgelegt werden. |
effectiveDate |
Date | Aktuelles Datum | Wenn eine Richtlinie für die inkrementelle Aktualisierung angewendet wird, überschreibt der effectiveDate -Parameter das aktuelle Datum. Bei einer fehlenden Angabe wird UTC verwendet, um den aktuellen Tag zu ermitteln. |
Antwort
202 Accepted
Die Antwort enthält außerdem ein Location
-Antwortheaderfeld, um den Aufrufer an den Aktualisierungsvorgang zu verweisen, der erstellt und akzeptiert wurde. Die Location
ist der Speicherort der neuen Ressource, die durch die Anforderung erstellt wurde, einschließlich der requestId
, die für einige erweiterte Aktualisierungsvorgänge erforderlich ist. In der folgenden Antwort ist requestId
beispielsweise der letzte Bezeichner in der Antwort 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
Verwenden Sie das GET-Verb für die /refreshes-Sammlung, um bisherige, aktuelle und ausstehende Aktualisierungsvorgänge aufzulisten.
Der Antworttext könnte wie das folgende Beispiel aussehen:
[
{
"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"
}
]
Hinweis
Power BI kann Anforderungen löschen, wenn in kurzer Zeit zu viele Anforderungen eingehen. Power BI führt eine Aktualisierung durch, stellt die nächste Anforderung in die Warteschlange ein und löscht alle anderen. Standardmäßig können Sie den Status für gelöschte Anforderungen nicht abfragen.
Antworteigenschaften
Name | Typ | Beschreibung |
---|---|---|
requestId |
Guid | Dies ist der Bezeichner der Aktualisierungsanforderung. Sie benötigen requestId , um den Status eines einzelnen Aktualisierungsvorgangs abzufragen oder einen gerade ausgeführten Aktualisierungsvorgang abzubrechen. |
refreshType |
String | OnDemand gibt an, dass die Aktualisierung interaktiv über das Power BI-Portal ausgelöst wurde.Scheduled gibt an, dass die Aktualisierung durch einen Zeitplan für die Modellaktualisierung ausgelöst wurde. ViaApi gibt an, dass die Aktualisierung durch einen API-Aufruf ausgelöst wurde. ViaEnhancedApi gibt an, dass eine erweiterte Aktualisierung durch einen API-Aufruf ausgelöst wurde. |
startTime |
String | Datum und Uhrzeit des Aktualisierungsbeginns. |
endTime |
String | Datum und Uhrzeit des Aktualisierungsendes. |
status |
String | Completed gibt an, dass der Aktualisierungsvorgang erfolgreich abgeschlossen wurde. Failed gibt an, dass bei der Aktualisierung ein Fehler aufgetreten ist. Unknown gibt an, dass der Abschlusszustand nicht bestimmt werden kann. Bei diesem Status ist endTime leer. Disabled gibt an, dass die Aktualisierung durch eine selektive Aktualisierung deaktiviert wurde. Cancelled gibt an, dass die Aktualisierung erfolgreich abgebrochen wurde. |
extendedStatus |
String | Erweitert die status -Eigenschaft, um weitere Informationen bereit zu stellen. |
Hinweis
In Azure Analysis Services ist das abgeschlossene status
-Ergebnis succeeded
. Wenn Sie eine Azure Analysis Services-Lösung zu Power BI migrieren, müssen Sie Ihre Lösungen möglicherweise ändern.
Begrenzen der Anzahl zurückgegebener Aktualisierungsvorgänge
Die Power BI-REST-API unterstützt das Beschränken der angeforderten Anzahl von Einträgen im Aktualisierungsverlauf mithilfe des Parameters $top
. Wenn kein Wert angegeben wird, werden standardmäßig alle verfügbaren Einträge verwendet.
GET https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/refreshes?$top={$top}
GET /refreshes/<requestId>
Wenn Sie den Status eines Aktualisierungsvorgangs überprüfen möchten, verwenden Sie das GET-Verb für das Aktualisierungsobjekt, indem Sie die requestId
angeben. Wenn der Vorgang aktuell ausgeführt wird, gibt status
InProgress
zurück, wie im Antworttext im folgenden Beispiel:
{
"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>
Soll ein aktuell ausgeführter erweiterter Aktualisierungsvorgang abgebrochen werden, verwenden Sie das DELETE-Verb für das Aktualisierungsobjekt, indem Sie die requestId
angeben.
Beispiel:
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
Überlegungen und Einschränkungen
Für den Aktualisierungsvorgang gelten die folgenden Überlegungen und Einschränkungen:
Standardaktualisierungsvorgänge
- Sie können geplante oder bedarfsgesteuerte manuelle Modellaktualisierungen nicht mithilfe von
DELETE /refreshes/<requestId>
abbrechen. - Geplante und bedarfsbasierte manuelle Modellaktualisierungen bieten keine Unterstützung für das Abrufen von Details zum Aktualisierungsvorgang mithilfe von
GET /refreshes/<requestId>
. - „Details abrufen“ und „Abbrechen“ sind neue Vorgänge, die nur für erweiterte Aktualisierungen zur Verfügung stehen. Standardaktualisierungen unterstützen diese Vorgänge nicht.
Power BI Embedded
Wenn die Kapazität manuell im Power BI-Portal oder mithilfe von PowerShell angehalten wird oder ein Systemausfall auftritt, bleibt der Status eines laufenden erweiterten Aktualisierungsvorgangs maximal sechs Stunden lang InProgress
. Wenn die Kapazität innerhalb von sechs Stunden fortgesetzt wird, wird auch der Aktualisierungsvorgang automatisch fortgesetzt. Wird die Kapazität erst nach mehr als sechs Stunden fortgesetzt, gibt der Aktualisierungsvorgang möglicherweise einen Timeoutfehler zurück. In diesem Fall müssen Sie den Aktualisierungsvorgang neu starten.
Semantikmodellabweisung
Power BI verwendet die dynamische Speicherverwaltung, um den Kapazitätsspeicher zu optimieren. Wenn das Modell während eines Aktualisierungsvorgangs aus dem Arbeitsspeicher entfernt wird, wird möglicherweise der folgende Fehler zurückgegeben:
{
"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"
}
]
}
Die Lösung besteht darin, den Aktualisierungsvorgang erneut auszuführen. Weitere Informationen zur dynamischen Speicherverwaltung und zum Entfernen von Modellen finden Sie unter Entfernen von Modellen.
Zeitlimits für Aktualisierungsvorgänge
Die maximale Zeitspanne für einen einzelnen Aktualisierungsvorgang beträgt fünf Stunden. Wenn der Aktualisierungsvorgang innerhalb des Fünf-Stunden-Limits nicht erfolgreich abgeschlossen und retryCount
nicht angegeben oder im Anforderungstext mit 0
(dem Standardwert) angegeben ist, wird ein Timeoutfehler zurückgegeben.
Wenn retryCount
1
oder eine andere Zahl angibt, wird ein neuer Aktualisierungsvorgang mit einem Limit von fünf Stunden gestartet. Wenn dieser Wiederholungsvorgang fehlschlägt, wiederholt der Dienst den Aktualisierungsvorgang bis zur größten Anzahl von Wiederholungen, die in retryCount
angegeben wurde, oder bis zum Erreichen des Zeitlimits für die Verarbeitung von erweiterten Aktualisierungen von 24 Stunden ab dem Beginn der ersten Aktualisierungsanforderung.
Wenn Sie Ihre Lösung für die erweiterte Modellaktualisierung mit der REST-API zur Aktualisierung von Datasets planen, müssen diese Zeitlimits und der retryCount
-Parameter beachtet werden. Ein erfolgreicher Aktualisierungsabschluss kann fünf Stunden überschreiten, wenn ein anfänglicher Aktualisierungsvorgang fehlschlägt und retryCount
1
oder mehr angibt.
Wenn Sie beispielsweise einen Aktualisierungsvorgang mit "retryCount": 1
anfordern und der anfängliche Wiederholungsvorgang vier Stunden nach der Startzeit fehlschlägt, beginnt ein zweiter Aktualisierungsvorgang für diese Anforderung. Wenn dieser zweite Aktualisierungsvorgang in drei Stunden erfolgreich ausgeführt wird, beträgt die Gesamtdauer für die erfolgreiche Ausführung der Aktualisierungsanforderung sieben Stunden.
Wenn Aktualisierungsvorgänge regelmäßig fehlschlagen, das Zeitlimit von fünf Stunden überschreiten oder die gewünschte Zeit für erfolgreiche Aktualisierungen überschreiten, sollten Sie die Menge der Daten reduzieren, die aus der Datenquelle aktualisiert werden. Sie können die Aktualisierung in mehrere Anforderungen aufteilen, z. B. eine Anforderung für jede Tabelle. Sie können im Parameter commitMode
darüber hinaus partialBatch
angeben.
Codebeispiel
Ein C#-Codebeispiel für Ihren Einstieg finden Sie im RestApiSample auf GitHub.
So verwenden Sie das Codebeispiel:
- Klonen Sie das Repository, oder laden Sie es herunter.
- Öffnen Sie die RestApiSample-Lösung.
- Suchen Sie die Zeile
client.BaseAddress = …
, und geben Sie Ihre Basis-URL an.
Das Codebeispiel verwendet die Dienstprinzipal-Authentifizierung.