Udostępnij za pośrednictwem


Ulepszone odświeżanie przy użyciu interfejsu API REST usługi Power BI

Możesz użyć dowolnego języka programowania, który obsługuje wywołania REST, aby przeprowadzać operacje odświeżania modelu semantycznego za pomocą interfejsu API REST do odświeżania zestawu danych Power BI.

Zoptymalizowane odświeżanie dla dużych i złożonych modeli partycjonowanych jest tradycyjnie wywoływane przy użyciu metod programowania korzystających z modelu TOM (tabelarycznego modelu obiektów), poleceń cmdlet programu PowerShell lub języka TMSL (tabelarycznego języka skryptowego modelu). Jednak te metody wymagają długotrwałych połączeń HTTP, które mogą być zawodne.

Interfejs API REST odświeżania zestawu danych usługi Power BI może wykonywać operacje odświeżania modelu asynchronicznie, więc długotrwałe połączenia HTTP z aplikacji klienckich nie są niezbędne. W porównaniu ze standardowymi operacjami odświeżania ulepszone odświeżanie za pomocą interfejsu API REST oferuje więcej opcji dostosowywania i następujące funkcje, które są przydatne w przypadku dużych modeli:

  • Zatwierdzenia wsadowe
  • Odświeżanie na poziomie tabeli i partycji
  • Stosowanie zasad odświeżania przyrostowego
  • odśwież szczegóły GET
  • Anulowanie odświeżania
  • Konfiguracja limitu czasu

Notatka

  • Wcześniej rozszerzone odświeżanie było nazywane asynchronicznym odświeżaniem z wykorzystaniem REST API. Jednak standardowe odświeżanie korzystające z interfejsu API REST zestawu danych również jest uruchamiane asynchronicznie ze względu na jego nieodłączny charakter.
  • Rozszerzone operacje odświeżania interfejsu API REST usługi Power BI nie powodują automatycznego odświeżania pamięci podręcznych kafelków. Bufory kafelków są odświeżane tylko wtedy, gdy użytkownik uzyskuje dostęp do raportu.

Podstawowy adres URL

Podstawowy adres URL ma następujący format:

https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/refreshes 

Zasoby i operacje można dołączać do podstawowego adresu URL na podstawie parametrów. Na poniższym diagramie grupyDatasetsi Refreshes to kolekcje . Grupa, Zestaw danych, i Odśwież są obiektami .

Diagram przedstawiający przepływ odświeżania asynchronicznego.

Wymagania

Do korzystania z interfejsu API REST potrzebne są następujące wymagania:

  • Model semantyczny dla Power BI Premium, Premium na użytkownika lub Power BI Embedded.
  • Identyfikator grupy i identyfikator zestawu danych do użycia w adresie URL żądania.
  • Zakres uprawnień Dataset.ReadWrite.All.

Liczba odświeżeń jest ograniczona zgodnie z ogólnymi ograniczeniami dotyczącymi odświeżeń opartych na interfejsie API dla modeli Pro i Premium.

Uwierzytelnianie

Wszystkie wywołania muszą uwierzytelniać się przy użyciu prawidłowego tokenu OAuth 2 Microsoft Entra ID w nagłówku autoryzacyjnym. Token musi spełniać następujące wymagania:

  • Bądź tokenem użytkownika lub głównym węzłem usługi aplikacji.
  • Czy odbiorcy są poprawnie ustawieni na https://api.powerbi.com?
  • Być używane przez użytkownika lub aplikację, która ma wystarczające uprawnienia do modelu.

Notatka

Modyfikacje interfejsu API REST nie zmieniają obecnie zdefiniowanych uprawnień dla odświeżeń modelu.

POST /refreshes

Aby przeprowadzić odświeżanie, użyj czasownika POST w kolekcji /refreshes, aby dodać nowy obiekt odświeżania do kolekcji. W odpowiedzi nagłówek Location zawiera requestId. Ponieważ operacja jest asynchroniczna, aplikacja kliencka może rozłączyć się i użyć requestId, aby później sprawdzić stan w razie potrzeby.

Poniższy kod przedstawia przykładowe żądanie:

POST https://api.powerbi.com/v1.0/myorg/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/refreshes

Treść żądania może przypominać następujący przykład:

{
    "type": "Full",
    "commitMode": "transactional",
    "maxParallelism": 2,
    "retryCount": 2,
    "timeout": "02:00:00",
    "objects": [
        {
            "table": "DimCustomer",
            "partition": "DimCustomer"
        },
        {
            "table": "DimDate"
        }
    ]
}

Notatka

Usługa akceptuje tylko jedną operację odświeżania naraz dla modelu. Jeśli jest obecnie trwające odświeżanie i złożone zostanie inne żądanie, kod stanu HTTP 400 Bad Request zostanie zwrócony.

Parametry

Aby wykonać rozszerzoną operację odświeżania, należy określić co najmniej jeden parametr w treści żądania. Określone parametry mogą określać wartość domyślną lub opcjonalną. Gdy żądanie określa parametry, wszystkie inne parametry mają zastosowanie do operacji z ich wartościami domyślnymi. Jeśli żądanie nie określa żadnych parametrów, wszystkie parametry używają wartości domyślnych, a nastąpi standardowa operacja odświeżania.

Nazwa Typ Domyślny Opis
type Wyliczenie automatic Rodzaj przetwarzania, które należy wykonać. Typy są zgodne z typami poleceń odświeżania TMSL: full, clearValues, calculate, dataOnly, automatici defragment. Typ add nie jest obsługiwany.
commitMode Wyliczenie transactional Określa, czy obiekty mają być zatwierdzane w partiach, czy dopiero po zakończeniu. Tryby są transactional i partialBatch. W przypadku korzystania z partialBatch operacja odświeżania nie występuje w ramach jednej transakcji. Każde polecenie jest zatwierdzane indywidualnie. Jeśli wystąpi awaria, model może być pusty lub zawierać tylko podzbiór danych. Aby zabezpieczyć się przed awarią i zachować dane, które znajdowały się w modelu przed rozpoczęciem operacji, wykonaj operację przy użyciu commitMode = transactional.
maxParallelism Int 10 Określa maksymalną liczbę wątków, które mogą równolegle uruchamiać polecenia przetwarzania. Ta wartość jest zgodna z właściwością MaxParallelism, którą można ustawić w poleceniu TMSL Sequence lub przy użyciu innych metod.
retryCount Int 0 Liczba ponownych prób operacji przed niepowodzeniem.
objects Tablica Cały model Tablica obiektów do przetworzenia. Każdy obiekt zawiera table podczas przetwarzania całej tabeli lub table i partition podczas przetwarzania partycji. Jeśli nie określono żadnych obiektów, cały model zostanie odświeżyny.
applyRefreshPolicy Boolowski true Jeśli zdefiniowano zasady odświeżania przyrostowego, określi, czy zasady mają być stosowane. Dostępne tryby to true lub false. Jeśli zasady nie są stosowane, cały proces pozostawia definicje partycji bez zmian i w pełni odświeża wszystkie partycje w tabeli.

Jeśli commitMode jest transactional, applyRefreshPolicy można true lub false. Jeśli commitMode jest partialBatch, applyRefreshPolicy związane z true nie jest obsługiwane, a applyRefreshPolicy musi być ustawione na wartość false.
effectiveDate Data Bieżąca data Jeśli zastosowano zasady odświeżania przyrostowego, parametr effectiveDate zastępuje bieżącą datę. Jeśli nie zostanie określony, bieżący dzień zostanie określony przy użyciu konfiguracji strefy czasowej w "Odśwież".
timeout Struna 05:00:00 (5 godzin) Jeśli określono timeout, każda próba odświeżenia danych w modelu semantycznym jest zgodna z tym limitem czasu. Pojedyncze żądanie odświeżania może zawierać wiele prób, jeśli określono retryCount, co może spowodować przekroczenie limitu czasu całkowitego czasu odświeżania. Na przykład ustawienie timeout na 1 godzinę i retryCount na 2 może skutkować całkowitym czasem odświeżania wynoszącym do 3 godzin. Użytkownicy mogą dostosować timeout, aby skrócić czas trwania odświeżania w celu szybszego wykrywania błędów lub rozszerzyć go poza domyślne 5 godzin w celu bardziej złożonych odświeżeń danych. Jednak łączny czas trwania odświeżania, w tym ponownych prób, nie może przekraczać 24 godzin.

Odpowiedź

202 Accepted

Odpowiedź zawiera również pole nagłówka odpowiedzi Location, aby wskazać wywołującego na operację odświeżania, która została utworzona i zaakceptowana. Location to lokalizacja nowego zasobu utworzonego w wyniku żądania, który obejmuje requestId wymagane przez niektóre rozszerzone operacje odświeżania. Na przykład w następującej odpowiedzi requestId jest ostatnim identyfikatorem w odpowiedzi 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 (żądanie HTTP) /refreshes (aktualizacje)

Użyj czasownika GET w kolekcji /refreshes, aby wyświetlić listę historycznych, bieżących i oczekujących operacji odświeżania.

Treść odpowiedzi może wyglądać podobnie do następującego przykładu:

[
    {
        "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"
    }
]

Notatka

Usługa Power BI może usuwać żądania, jeśli w krótkim czasie istnieje zbyt wiele żądań. Usługa Power BI wykonuje odświeżanie, kolejkuje następne żądanie i usuwa wszystkie inne. Zgodnie z projektem nie można wykonywać zapytań o stan porzuconych żądań.

Właściwości odpowiedzi

Nazwa Typ Opis
requestId Guid Identyfikator żądania odświeżania. Musisz użyć requestId, aby zapytać o status indywidualnej operacji odświeżania lub anulować operację odświeżania w toku.
refreshType Struna OnDemand wskazuje, że odświeżanie zostało wyzwolone interaktywnie za pośrednictwem portalu usługi Power BI.
Scheduled wskazuje, że harmonogram odświeżania modelu wyzwolił odświeżanie.
ViaApi wskazuje, że wywołanie interfejsu API wyzwoliło odświeżanie.
ViaEnhancedApi wskazuje, że wywołanie interfejsu API wyzwoliło rozszerzone odświeżanie.
startTime Struna Data i godzina rozpoczęcia odświeżania.
endTime Struna Data i godzina zakończenia odświeżania.
status Struna Completed wskazuje, że operacja odświeżania została ukończona pomyślnie.
Failed wskazuje, że operacja odświeżania nie powiodła się.
Unknown wskazuje, że nie można określić stanu ukończenia. W przypadku tego stanu endTime jest pusta.
Disabled wskazuje, że odświeżanie zostało wyłączone poprzez selektywne odświeżanie.
Cancelled wskazuje, że odświeżanie zostało pomyślnie anulowane.
extendedStatus Struna Rozbudowuje właściwość status w celu dostarczenia większej ilości informacji.

Notatka

W usługach Azure Analysis Services wynik status jest ukończony jako succeeded. W przypadku migracji rozwiązania azure Analysis Services do usługi Power BI może być konieczne zmodyfikowanie rozwiązań.

Ogranicz liczbę zwracanych operacji odświeżania

Interfejs API REST usługi Power BI obsługuje ograniczanie żądanej liczby wpisów w historii odświeżania przy użyciu opcjonalnego parametru $top. Jeśli nie zostanie określony, wartość domyślna to wszystkie dostępne wpisy.

GET https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/refreshes?$top={$top}      

GET /refreshes/<requestId>

Aby sprawdzić stan operacji odświeżania, użyj czasownika GET w obiekcie odświeżania, określając requestId. Jeśli operacja jest w toku, status zwraca InProgress, jak w następującej przykładowej treści odpowiedzi:

{
    "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"
        }
    ]
}

USUŃ /refreshes/<identyfikator_żądania>

Aby anulować rozszerzoną operację odświeżania w toku, użyj polecenia DELETE w obiekcie odświeżania, określając requestId.

Na przykład

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

Zagadnienia i ograniczenia

Operacja odświeżania ma następujące zagadnienia i ograniczenia:

Standardowe operacje odświeżania

  • Nie można anulować odświeżania modelu, zarówno zaplanowanego, jak i na żądanie, które zostało zainicjowane poprzez wybranie przycisku odświeżania w portalu za pomocą DELETE /refreshes/<requestId>.
  • Zaplanowane odświeżenia modelu i te na żądanie, które zostały wyzwolone przez naciśnięcie przycisku odświeżania w portalu, nie obsługują uzyskiwania szczegółów operacji odświeżania przy użyciu GET /refreshes/<requestId>.
  • "Pobierz szczegóły i Anuluj to nowe operacje dostępne tylko dla funkcji rozszerzonego odświeżania." Odświeżanie standardowe nie obsługuje tych operacji.

Power BI Embedded

Jeśli pojemność jest wstrzymana ręcznie w portalu usługi Power BI albo za pomocą programu PowerShell, lub wystąpi awaria systemu, status każdej trwającej rozszerzonej operacji odświeżania pozostaje InProgress przez maksymalnie sześć godzin. Jeśli pojemność zostanie wznowiona w ciągu sześciu godzin, operacja odświeżania zostanie wznowiona automatycznie. Jeśli pojemność zostanie przywrócona po więcej niż sześciu godzinach, operacja odświeżania może zwrócić błąd przekroczenia limitu czasu. Następnie należy ponownie uruchomić operację odświeżania.

Eksmisja modelu semantycznego

Usługa Power BI używa dynamicznego zarządzania pamięcią do optymalizacji pamięci pojemności. Jeśli model zostanie usunięty z pamięci podczas operacji odświeżania, możliwe, że może zostać zwrócony następujący błąd:

{
    "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"
        }
    ]
}

Rozwiązaniem jest ponowne uruchomienie operacji odświeżania. Aby dowiedzieć się więcej na temat dynamicznego zarządzania pamięcią i eksmisji modelu, zobacz eksmisji modelu.

Limity czasu operacji odświeżania

Operacja odświeżania może obejmować wiele prób, jeśli określono retryCount. Każda próba ma domyślny limit czasu 5 godzin, który można dostosować przy użyciu parametru timeout. Łączny czas trwania odświeżania, w tym ponownych prób, nie może przekraczać 24 godzin.

Jeśli retryCount określa liczbę, nowa operacja odświeżania rozpoczyna się od limitu czasu. Usługa ponawia próbę wykonania tej operacji, dopóki nie zakończy się powodzeniem, nie osiągnie limitu retryCount lub nie osiągnie maksymalnego 24-godzinnego limitu od pierwszej próby.

Można dostosować timeout, aby skrócić czas trwania odświeżania w celu szybszego wykrywania błędów lub rozszerzyć go poza domyślne 5 godzin w celu bardziej złożonych odświeżeń danych.

Podczas planowania odświeżania modelu semantycznego przy użyciu interfejsu API REST odświeżania zestawu danych należy wziąć pod uwagę limity czasu i parametr retryCount. Odświeżanie może przekroczyć limit czasu, jeśli początkowa próba zakończy się niepowodzeniem, a parametr retryCount ma wartość 1 lub więcej. Jeśli zażądasz odświeżenia za pomocą polecenia "retryCount": 1, a pierwsza próba zakończy się niepowodzeniem po 4 godzinach, rozpocznie się druga próba. Jeśli zakończy się to powodzeniem w ciągu 3 godzin, łączny czas odświeżania wynosi 7 godzin.

Jeśli operacje odświeżania regularnie kończą się niepowodzeniem, przekraczają limit czasu lub przekraczają żądany pomyślny czas operacji odświeżania, rozważ zmniejszenie ilości odświeżonych danych ze źródła danych. Odświeżanie można podzielić na wiele żądań, na przykład żądanie dla każdej tabeli. Można również określić parametr partialBatch w parametrze commitMode.

Przykładowy kod

Aby zapoznać się z przykładem kodu w języku C#, zobacz RestApiSample w witrynie GitHub.

Aby użyć przykładowego kodu:

  1. Sklonuj lub pobierz repozytorium.
  2. Otwórz rozwiązanie RestApiSample.
  3. Znajdź wiersz client.BaseAddress = … i podaj swój podstawowy adres URL .

Przykładowy kod używa uwierzytelniania głównego użytkownika usługi.