Eksportowanie raportu usługi Power BI do pliku
Interfejs exportToFile
API umożliwia eksportowanie raportu usługi Power BI przy użyciu wywołania REST. Obsługiwane są następujące formaty plików:
- .pptx (PowerPoint)
- .png
- Podczas eksportowania do .png raport z wieloma stronami jest kompresowany do pliku .zip
- Każdy plik w .zip reprezentuje stronę raportu
- Nazwy stron są takie same jak wartości zwracane w interfejsach API Pobierz strony lub Pobierz strony w interfejsach API grupy
Uwaga
Eksportowanie raportu usługi Power BI do pliku przy użyciu interfejsu API exportToFile nie jest obsługiwane w przypadku warstwy Premium na użytkownika (PPU).
Przykłady użycia
Możesz użyć funkcji eksportu na kilka sposobów. Oto kilka przykładów:
Przycisk Wyślij do drukowania — w aplikacji utwórz przycisk, który po kliknięciu wyzwala zadanie eksportu. Zadanie może wyeksportować wyświetlany raport jako .pdf lub .pptx. Po zakończeniu użytkownik może otrzymać plik jako plik do pobrania. Za pomocą zakładek można wyeksportować raport w określonym stanie, w tym skonfigurowane filtry, fragmentatory i inne ustawienia. Ponieważ interfejs API jest asynchroniczny, może upłynąć trochę czasu zanim plik będzie dostępny.
Załącznik wiadomości e-mail — wysyłaj automatyczną wiadomość e-mail w określonych odstępach czasu z dołączonym raportem .pdf. Ten scenariusz może być przydatny, jeśli chcesz zautomatyzować wysyłanie cotygodniowego raportu do kadry kierowniczej. Aby uzyskać więcej informacji, zobacz Eksportowanie i wysyłanie wiadomości e-mail do raportu usługi Power BI przy użyciu usługi Power Automate
Korzystanie z interfejsu API
Wymagania dotyczące licencji
- Eksportowany raport musi znajdować się w obszarze roboczym wspieranym przez pojemność Premium, Embedded lub Fabric.
- Interfejs
exportToFile
API nie jest obsługiwany w przypadku warstwy Premium na użytkownika (PPU).
Ustawienia administratora
Przed użyciem interfejsu API sprawdź, czy są włączone następujące ustawienia dzierżawy administratora:
- Eksportuj raporty jako prezentacje programu PowerPoint lub dokumenty PDF — domyślnie włączone.
- Eksportowanie raportów jako plików obrazów — wymagane tylko dla .png i wyłączonych domyślnie.
Zdarzenia renderowania
Aby upewnić się, że eksport nie rozpoczyna się przed zakończeniem renderowania wizualizacji, użyj interfejsu API zdarzeń renderowania i rozpocznij eksport tylko po zakończeniu renderowania.
Sondowanie
Interfejs API jest asynchroniczny. Po wywołaniu interfejsu API exportToFile wyzwala ono zadanie eksportu. Po wyzwoleniu zadania eksportu użyj sondowania , aby śledzić zadanie, dopóki nie zostanie ukończone.
Podczas sondowania interfejs API zwraca liczbę reprezentującą ilość wykonanej pracy. Praca w każdym zadaniu eksportu jest obliczana na podstawie sumy eksportów w zadaniu. Eksport obejmuje eksportowanie pojedynczej wizualizacji lub strony z zakładkami lub bez nich. Wszystkie eksporty mają taką samą wagę. Jeśli na przykład zadanie eksportu obejmuje eksportowanie raportu z 10 stron, a sondowanie zwraca wartość 70, oznacza to, że interfejs API przetworzył siedem z 10 stron w zadaniu eksportu.
Po zakończeniu eksportowania wywołanie interfejsu API sondowania zwraca adres URL usługi Power BI na potrzeby pobierania pliku. Adres URL jest dostępny przez 24 godziny.
Obsługiwane funkcje
W tej sekcji opisano sposób używania następujących obsługiwanych funkcji:
- Wybieranie stron do wydrukowania
- Eksportowanie strony lub pojedynczej wizualizacji
- Zakładki
- Filtry
- Authentication
- Zabezpieczenia na poziomie wiersza (RLS)
- Ochrona danych
- Lokalizacja
- Powiązanie dynamiczne
Wybieranie stron do wydrukowania
Określ strony, które mają być drukowane zgodnie z wartością Zwracaną przez strony pobierz lub Pobierz strony. Możesz również określić kolejność eksportowanych stron.
Eksportowanie strony lub pojedynczej wizualizacji
Możesz określić stronę lub pojedynczą wizualizację do wyeksportowania. Strony można eksportować z zakładkami lub bez tych zakładek.
W zależności od typu eksportu należy przekazać różne atrybuty do obiektu ExportReportPage . W poniższej tabeli określono, które atrybuty są wymagane dla każdego zadania eksportu.
Uwaga
Eksportowanie pojedynczej wizualizacji ma taką samą wagę jak eksportowanie strony (z zakładkami lub bez ich). Oznacza to, że pod względem obliczeń systemowych obie operacje mają tę samą wartość.
Atrybut | Strona | Pojedyncza wizualizacja | Komentarze |
---|---|---|---|
bookmark |
Opcjonalnie | Służy do eksportowania strony w określonym stanie | |
pageName |
Użyj interfejsu API REST getPages lub interfejsu getPages API klienta. |
||
visualName |
Istnieją dwa sposoby uzyskiwania nazwy wizualizacji:getVisuals API klienta. |
Zakładki
Zakładki mogą służyć do zapisywania raportu w określonej konfiguracji, w tym zastosowanych filtrów i stanu wizualizacji raportu. Interfejs API exportToFile umożliwia programowe eksportowanie zakładki raportu na dwa sposoby:
Eksportowanie istniejącej zakładki
Aby wyeksportować istniejącą zakładkę raportu, użyj
name
właściwości , unikatowego (z uwzględnieniem wielkości liter), który można uzyskać przy użyciu interfejsu API języka JavaScript zakładek.Eksportowanie stanu raportu
Aby wyeksportować bieżący stan raportu, użyj
state
właściwości . Na przykład możesz użyć metody zakładkibookmarksManager.capture
, aby przechwycić zmiany wprowadzone przez określonego użytkownika do raportu, a następnie wyeksportować go w bieżącym stanie przy użyciu poleceniacapturedBookmark.state
.
Filtry
Za pomocą polecenia reportLevelFilters
PowerBIReportExportConfiguration można wyeksportować raport w filtrowanym warunku.
Aby wyeksportować filtrowany raport, wstaw parametry ciągu zapytania adresu URL, których chcesz użyć jako filtru, w polu ExportFilter. Po wprowadzeniu ciągu należy usunąć ?filter=
część parametru zapytania adresu URL.
Tabela zawiera kilka przykładów składni ciągów, które można przekazać do .ExportFilter
Filtr | Składnia | Przykład |
---|---|---|
Wartość w polu | Tabela/Pole eq "value" | Store/Territory eq 'NC' |
Wiele wartości w polu | Table/Field in ('value1', 'value2') | Store/Territory in ('NC', 'TN') |
Unikatowa wartość w jednym polu i inna unikatowa wartość w innym polu | Table/Field1 eq "value1" i Table/Field2 eq "value2" | Store/Territory eq "NC" i Store/Chain eq "Fashions Direct" |
Uwierzytelnianie
Możesz uwierzytelnić się przy użyciu użytkownika (lub użytkownika głównego) lub jednostki usługi.
Zabezpieczenia na poziomie wiersza (RLS)
Za pomocą zabezpieczeń na poziomie wiersza można wyeksportować raport przedstawiający dane widoczne tylko dla niektórych użytkowników. Jeśli na przykład eksportujesz raport sprzedaży zdefiniowany za pomocą ról regionalnych, możesz programowo filtrować raport tak, aby był wyświetlany tylko w określonym regionie.
Aby wyeksportować przy użyciu zabezpieczeń na poziomie wiersza, musisz mieć następujące uprawnienia:
- Uprawnienia do zapisu dla modelu semantycznego, z który raport jest połączony
- Współautor lub administrator obszaru roboczego, w którym znajduje się raport
Ochrona danych
Formaty .pdf i .pptx obsługują etykiety poufności. W przypadku eksportowania raportu z etykietą poufności do .pdf lub .pptx wyeksportowany plik wyświetla raport z etykietą poufności.
Nie można wyeksportować raportu z etykietą poufności do .pdf lub .pptx przy użyciu jednostki usługi.
Lokalizacja
W przypadku korzystania z interfejsu exportToFile
API możesz przekazać odpowiednie ustawienia regionalne. Ustawienia lokalizacji wpływają na sposób wyświetlania raportu, na przykład przez zmianę formatowania zgodnie z wybranym lokalnym.
Powiązanie dynamiczne
Aby wyeksportować raport, gdy jest on połączony z semantycznym modelem innym niż domyślny model semantyczny, określ wymagany identyfikator zestawu danych w parametrze datasetToBind
podczas wywoływania interfejsu API.
Przeczytaj więcej na temat powiązania dynamicznego.
Żądania współbieżne
Interfejs exportToFile
API obsługuje ograniczoną liczbę współbieżnych żądań. Maksymalna liczba obsługiwanych żądań współbieżnych wynosi 500 na pojemność. Aby uniknąć przekroczenia limitu i błędu zbyt wielu żądań (429), należy rozłożyć obciążenie w czasie lub w różnych pojemnościach.
Jednocześnie przetwarzane są tylko pięć stron raportu. Jeśli na przykład eksportujesz raport z 50 stronami, zadanie eksportu jest przetwarzane w 10 interwałach sekwencyjnych. Podczas optymalizowania zadania eksportu warto rozważyć równoległe wykonanie kilku zadań.
Przykłady kodu
Podczas tworzenia zadania eksportu należy wykonać cztery kroki:
- Wysyłanie żądania eksportu.
- Sondowanie.
- Pobieranie pliku.
- Za pomocą strumienia plików.
Ta sekcja zawiera przykłady dla każdego kroku.
Krok 1. Wysyłanie żądania eksportu
Pierwszym krokiem jest wysłanie żądania eksportu. W tym przykładzie żądanie eksportu jest wysyłane dla określonej strony.
private async Task<string> PostExportRequest(
Guid reportId,
Guid groupId,
FileFormat format,
IList<string> pageNames = null, /* Get the page names from the GetPages REST API */
string urlFilter = null)
{
var powerBIReportExportConfiguration = new PowerBIReportExportConfiguration
{
Settings = new ExportReportSettings
{
Locale = "en-us",
},
// Note that page names differ from the page display names
// To get the page names use the GetPages REST API
Pages = pageNames?.Select(pn => new ExportReportPage(Name = pn)).ToList(),
// ReportLevelFilters collection needs to be instantiated explicitly
ReportLevelFilters = !string.IsNullOrEmpty(urlFilter) ? new List<ExportFilter>() { new ExportFilter(urlFilter) } : null,
};
var exportRequest = new ExportReportRequest
{
Format = format,
PowerBIReportConfiguration = powerBIReportExportConfiguration,
};
// The 'Client' object is an instance of the Power BI .NET SDK
var export = await Client.Reports.ExportToFileInGroupAsync(groupId, reportId, exportRequest);
// Save the export ID, you'll need it for polling and getting the exported file
return export.Id;
}
Krok 2. Sondowanie
Po wysłaniu żądania eksportu użyj sondowania, aby określić, kiedy plik eksportu, na który czekasz, jest gotowy.
private async Task<HttpOperationResponse<Export>> PollExportRequest(
Guid reportId,
Guid groupId,
string exportId /* Get from the PostExportRequest response */,
int timeOutInMinutes,
CancellationToken token)
{
HttpOperationResponse<Export> httpMessage = null;
Export exportStatus = null;
DateTime startTime = DateTime.UtcNow;
const int c_secToMillisec = 1000;
do
{
if (DateTime.UtcNow.Subtract(startTime).TotalMinutes > timeOutInMinutes || token.IsCancellationRequested)
{
// Error handling for timeout and cancellations
return null;
}
// The 'Client' object is an instance of the Power BI .NET SDK
httpMessage = await Client.Reports.GetExportToFileStatusInGroupWithHttpMessagesAsync(groupId, reportId, exportId);
exportStatus = httpMessage.Body;
// You can track the export progress using the PercentComplete that's part of the response
SomeTextBox.Text = string.Format("{0} (Percent Complete : {1}%)", exportStatus.Status.ToString(), exportStatus.PercentComplete);
if (exportStatus.Status == ExportState.Running || exportStatus.Status == ExportState.NotStarted)
{
// The recommended waiting time between polling requests can be found in the RetryAfter header
// Note that this header is not always populated
var retryAfter = httpMessage.Response.Headers.RetryAfter;
var retryAfterInSec = retryAfter.Delta.Value.Seconds;
await Task.Delay(retryAfterInSec * c_secToMillisec);
}
}
// While not in a terminal state, keep polling
while (exportStatus.Status != ExportState.Succeeded && exportStatus.Status != ExportState.Failed);
return httpMessage;
}
Krok 3. Pobieranie pliku
Gdy sondowanie zwróci adres URL, użyj tego przykładu, aby pobrać odebrany plik.
private async Task<ExportedFile> GetExportedFile(
Guid reportId,
Guid groupId,
Export export /* Get from the PollExportRequest response */)
{
if (export.Status == ExportState.Succeeded)
{
// The 'Client' object is an instance of the Power BI .NET SDK
var fileStream = await Client.Reports.GetFileOfExportToFileAsync(groupId, reportId, export.Id);
return new ExportedFile
{
FileStream = fileStream,
FileSuffix = export.ResourceFileExtension,
};
}
return null;
}
public class ExportedFile
{
public Stream FileStream;
public string FileSuffix;
}
Krok 4. Korzystanie ze strumienia plików
Gdy masz strumień plików, możesz obsłużyć go w taki sposób, aby najlepiej pasował do Twoich potrzeb. Możesz na przykład wysłać wiadomość e-mail lub użyć jej do pobrania wyeksportowanych raportów.
Przykład kompleksowego
Jest to kompleksowe przykład eksportowania raportu. Ten przykład obejmuje następujące etapy:
- Wysyłanie żądania eksportu.
- Sondowanie.
- Pobieranie pliku.
private async Task<ExportedFile> ExportPowerBIReport(
Guid reportId,
Guid groupId,
FileFormat format,
int pollingtimeOutInMinutes,
CancellationToken token,
IList<string> pageNames = null, /* Get the page names from the GetPages REST API */
string urlFilter = null)
{
const int c_maxNumberOfRetries = 3; /* Can be set to any desired number */
const int c_secToMillisec = 1000;
try
{
Export export = null;
int retryAttempt = 1;
do
{
var exportId = await PostExportRequest(reportId, groupId, format, pageNames, urlFilter);
var httpMessage = await PollExportRequest(reportId, groupId, exportId, pollingtimeOutInMinutes, token);
export = httpMessage.Body;
if (export == null)
{
// Error, failure in exporting the report
return null;
}
if (export.Status == ExportState.Failed)
{
// Some failure cases indicate that the system is currently busy. The entire export operation can be retried after a certain delay
// In such cases the recommended waiting time before retrying the entire export operation can be found in the RetryAfter header
var retryAfter = httpMessage.Response.Headers.RetryAfter;
if(retryAfter == null)
{
// Failed state with no RetryAfter header indicates that the export failed permanently
return null;
}
var retryAfterInSec = retryAfter.Delta.Value.Seconds;
await Task.Delay(retryAfterInSec * c_secToMillisec);
}
}
while (export.Status != ExportState.Succeeded && retryAttempt++ < c_maxNumberOfRetries);
if (export.Status != ExportState.Succeeded)
{
// Error, failure in exporting the report
return null;
}
var exportedFile = await GetExportedFile(reportId, groupId, export);
// Now you have the exported file stream ready to be used according to your specific needs
// For example, saving the file can be done as follows:
/*
var pathOnDisk = @"C:\temp\" + export.ReportName + exportedFile.FileSuffix;
using (var fileStream = File.Create(pathOnDisk))
{
exportedFile.FileStream.CopyTo(fileStream);
}
*/
return exportedFile;
}
catch
{
// Error handling
throw;
}
}
Rozważania i ograniczenia
- Obciążenie operacji interfejsu API eksportu jest oceniane jako wolno działająca operacja w tle, zgodnie z opisem w temacie Ocena obciążenia pojemności Premium.
- Wszystkie powiązane modele semantyczne w eksportowanym raporcie muszą znajdować się w pojemności Premium lub Embedded, w tym modele semantyczne z połączeniem zapytania bezpośredniego.
- Wyeksportowane raporty nie mogą przekraczać rozmiaru pliku o rozmiarze 250 MB.
- Podczas eksportowania do .png etykiety poufności nie są obsługiwane.
- Liczba eksportów (pojedynczych wizualizacji lub stron raportu), które można uwzględnić w jednym wyeksportowanym raporcie, wynosi 50 (bez eksportowania raportów podzielonych na strony). Jeśli żądanie zawiera więcej eksportów, interfejs API zwraca błąd i zadanie eksportu zostanie anulowane.
- Zakładki osobiste i filtry trwałe nie są obsługiwane w przypadku eksportowania raportu usługi Power BI do pliku.
- Interfejs
exportToFile
API eksportuje raport z wartością domyślną, jeśli jest używany bez zakładek lub reportLevelFilters. - Eksportowanie raportu usługi Power BI połączonego z co najmniej jednym złożonym modelem semantycznym, który ma co najmniej jedno zewnętrzne źródło danych z włączonym logowaniem jednokrotnym (SSO), nie jest obsługiwane. Podczas eksportowania wizualizacje mogą nie być poprawnie renderowane.
- Podczas eksportowania raportu z powiązaniem dynamicznym przy użyciu interfejsu
exportToFile
API REST model semantyczny dynamicznie powiązany nie może być modelem złożonym z bezpośrednim zapytaniem do usług SQL Server Analysis Services (SSAS). - Wizualizacje usługi Power BI wymienione tutaj nie są obsługiwane. Podczas eksportowania raportu zawierającego te wizualizacje części raportu zawierające te wizualizacje nie są renderowane i wyświetlają symbol błędu.
- Niecertyfikowane wizualizacje niestandardowe usługi Power BI
- Wizualizacje języka R
- PowerApps
- Wizualizacje języka Python
- Power Automate
- Wizualizacja raportu podzielonego na strony
- Visio
- Wizualizacje ArcGIS
Powiązana zawartość
Zapoznaj się ze sposobem osadzania zawartości dla klientów i organizacji:
- Eksportowanie raportu podzielonego na strony do pliku
- Osadzanie dla klientów
- Osadzanie dla organizacji
- Eksportowanie i wysyłanie wiadomości e-mail do raportu usługi Power BI przy użyciu usługi Power Automate
Więcej pytań? Wypróbuj Społeczność usługi Power BI