Exportera Power BI-rapport till fil
API:et exportToFile
gör det möjligt att exportera en Power BI-rapport med hjälp av ett REST-anrop. Följande filformat stöds:
- .pptx (PowerPoint)
- .png
- När du exporterar till en .png komprimeras en rapport med flera sidor till en .zip fil
- Varje fil i .zip representerar en rapportsida
- Sidnamnen är samma som returvärdena för API:erna Hämta sidor eller Hämta sidor i grupp
Kommentar
Export av en Power BI-rapport till en fil med exportToFile-API:et stöds inte för Premium per användare (PPU).
Exempel på användning
Du kan använda exportfunktionen på flera sätt. Här är några exempel:
Knappen Skicka till utskrift – I ditt program skapar du en knapp som när du klickar på utlöser ett exportjobb. Jobbet kan exportera den visade rapporten som en .pdf eller en .pptx. När den är klar kan användaren ta emot filen som en nedladdning. Med hjälp av bokmärken kan du exportera rapporten i ett visst tillstånd, inklusive konfigurerade filter, utsnitt och andra inställningar. Eftersom API:et är asynkront kan det ta lite tid innan filen är tillgänglig.
Bifogad e-post – Skicka ett automatiserat e-postmeddelande med angivna intervall med en bifogad .pdf rapport. Det här scenariot kan vara användbart om du vill automatisera sändningen av en veckorapport till chefer. Mer information finns i Exportera och skicka en Power BI-rapport via e-post med Power Automate
Använda API:et
Licenskrav
- Rapporten som du exporterar måste finnas på en arbetsyta som backas upp av en Premium-, Embedded- eller Fabric-kapacitet.
- API:et
exportToFile
stöds inte för Premium per användare (PPU).
Administratörsinställningar
Innan du använder API:et kontrollerar du att följande inställningar för administratörsklient är aktiverade:
- Exportera rapporter som PowerPoint-presentationer eller PDF-dokument – Aktiverad som standard.
- Exportera rapporter som bildfiler – krävs endast för .png och inaktiveras som standard.
"Renderingshändelser"
För att se till att exporten inte börjar innan det visuella objektet har slutfört återgivningen använder du API:et "Rendering"-händelser och påbörjar bara exporten när renderingen är klar.
avsökning
API:et är asynkront. När exportToFile-API:et anropas utlöser det ett exportjobb. När du har utlöst ett exportjobb använder du avsökning för att spåra jobbet tills det är klart.
Under avsökningen returnerar API:et ett tal som representerar mängden arbete som har slutförts. Arbetet i varje exportjobb beräknas baserat på det totala antalet exporter i jobbet. En export omfattar export av ett enskilt visuellt objekt eller en sida med eller utan bokmärken. Alla exporter har samma vikt. Om ditt exportjobb till exempel inkluderar export av en rapport med 10 sidor och avsökningen returnerar 70, innebär det att API:et bearbetade sju av de 10 sidorna i exportjobbet.
När exporten är klar returnerar API-avsökningsanropet en Power BI-URL för att hämta filen. URL:en är tillgänglig i 24 timmar.
Funktioner som stöds
I det här avsnittet beskrivs hur du använder följande funktioner som stöds:
- Välja vilka sidor som ska skrivas ut
- Exportera en sida eller ett enda visuellt objekt
- Bokmärken
- Filter
- Autentisering
- Säkerhet på radnivå (RLS)
- Dataskydd
- Lokalisering
- Dynamisk bindning
Välja vilka sidor som ska skrivas ut
Ange de sidor som du vill skriva ut enligt returvärdet Hämta sidor eller Hämta sidor i grupp . Du kan också ange ordningen på de sidor som du exporterar.
Exportera en sida eller ett enda visuellt objekt
Du kan ange en sida eller ett enda visuellt objekt som ska exporteras. Sidor kan exporteras med eller utan bokmärken.
Beroende på typen av export måste du skicka olika attribut till ExportReportPage-objektet . I följande tabell anges vilka attribut som krävs för varje exportjobb.
Kommentar
Export av ett enskilt visuellt objekt har samma vikt som att exportera en sida (med eller utan bokmärken). Det innebär att när det gäller systemberäkningar har båda åtgärderna samma värde.
Attribut | Sida | Enskilt visuellt objekt | Kommentarer |
---|---|---|---|
bookmark |
Valfritt | Använd för att exportera en sida i ett visst tillstånd | |
pageName |
Använd Rest-API:et för GetPages eller klient-API:etgetPages . |
||
visualName |
Det finns två sätt att hämta namnet på det visuella objektet:getVisuals . |
Bokmärken
Bokmärken kan användas för att spara en rapport i en specifik konfiguration, inklusive tillämpade filter och tillståndet för rapportens visuella objekt. Du kan använda exportToFile-API:et för att programmatiskt exportera en rapports bokmärke på två sätt:
Exportera ett befintligt bokmärke
Om du vill exportera ett befintligt rapportbokmärke använder
name
du egenskapen, en unik (skiftlägeskänslig) identifierare, som du kan få med hjälp av JavaScript-API:et för bokmärken.Exportera rapportens tillstånd
Om du vill exportera rapportens aktuella tillstånd använder du egenskapen
state
. Du kan till exempel använda bokmärketsbookmarksManager.capture
metod för att samla in de ändringar som en specifik användare har gjort i en rapport och sedan exportera den i dess aktuella tillstånd med .capturedBookmark.state
Kommentar
Personliga bokmärken och beständiga filter stöds inte.
Filter
Med hjälp av reportLevelFilters
i PowerBIReportExportConfiguration kan du exportera en rapport i ett filtrerat villkor.
Om du vill exportera en filtrerad rapport infogar du de URL-frågesträngsparametrar som du vill använda som filter i ExportFilter. När du anger strängen måste du ta bort ?filter=
delen av URL-frågeparametern.
Tabellen innehåller några syntaxexempel på strängar som du kan skicka till ExportFilter
.
Filtrera | Syntax | Exempel |
---|---|---|
Ett värde i ett fält | Tabell/fält eq "värde" | Lagra/område eq 'NC' |
Flera värden i ett fält | Tabell/fält i ('value1', 'value2') | Lagra/område i ('NC', 'TN') |
Ett distinkt värde i ett fält och ett annat distinkt värde i ett annat fält | Tabell/Fält1 eq 'value1' och Table/Field2 eq 'value2' | Store/Territory eq 'NC' och Store/Chain eq 'Fashions Direct' |
Autentisering
Du kan autentisera med hjälp av en användare (eller huvudanvändare) eller ett huvudnamn för tjänsten.
Säkerhet på radnivå (RLS)
Med säkerhet på radnivå (RLS) kan du exportera en rapport som visar data som bara är synliga för vissa användare. Om du till exempel exporterar en försäljningsrapport som definierats med regionala roller kan du programmatiskt filtrera rapporten så att endast en viss region visas.
Om du vill exportera med RLS måste du ha följande behörigheter:
- Skrivbehörigheter för den semantiska modell som rapporten är ansluten till
- Deltagare eller administratör för arbetsytan där rapporten finns
Dataskydd
Formaten .pdf och .pptx stöder känslighetsetiketter. Om du exporterar en rapport med en känslighetsetikett till en .pdf eller en .pptx, visar den exporterade filen rapporten med dess känslighetsetikett.
En rapport med en känslighetsetikett kan inte exporteras till en .pdf eller en .pptx med hjälp av tjänstens huvudnamn.
Lokalisering
När du använder API:et exportToFile
kan du skicka önskat språk. Inställningarna för lokalisering påverkar hur rapporten visas, till exempel genom att ändra formatering enligt den valda lokala inställningen.
Dynamisk bindning
Om du vill exportera en rapport medan den är ansluten till en semantisk modell, och sedan standard-semantikmodellen, anger du det nödvändiga datamängds-ID:t i parametern datasetToBind
när du anropar API:et.
Läs mer om dynamisk bindning.
Samtidiga förfrågningar
API:et exportToFile
stöder ett begränsat antal samtidiga begäranden. Det maximala antalet samtidiga begäranden som stöds är 500 per kapacitet. Om du vill undvika att överskrida gränsen och få ett fel med för många begäranden (429) distribuerar du belastningen över tid eller mellan kapaciteter.
Endast fem sidor i en rapport bearbetas samtidigt. Om du till exempel exporterar en rapport med 50 sidor bearbetas exportjobbet i 10 sekventiella intervall. När du optimerar exportjobbet kanske du vill överväga att köra några jobb parallellt.
Kodexempel
När du skapar ett exportjobb finns det fyra steg att följa:
Det här avsnittet innehåller exempel för varje steg.
Steg 1 – skicka en exportbegäran
Det första steget är att skicka en exportbegäran. I det här exemplet skickas en exportbegäran för en specifik sida.
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;
}
Steg 2 – avsökning
När du har skickat en exportbegäran använder du avsökning för att identifiera när exportfilen som du väntar på är klar.
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;
}
Steg 3 – hämta filen
När avsökningen returnerar en URL använder du det här exemplet för att hämta den mottagna filen.
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;
}
Steg 4 – Använda filströmmen
När du har filströmmen kan du hantera den på det sätt som bäst passar dina behov. Du kan till exempel skicka e-post till den eller använda den för att ladda ned de exporterade rapporterna.
Exempel från slutpunkt till slutpunkt
Det här är ett exempel från slutpunkt till slutpunkt för att exportera en rapport. Det här exemplet innehåller följande steg:
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;
}
}
Beaktanden och begränsningar
- En export-API-åtgärdsbelastning utvärderas som en långsam bakgrundsåtgärd, enligt beskrivningen i Utvärdering av premiumkapacitetsbelastning.
- Alla relaterade semantiska modeller i rapporten som du exporterar måste finnas på en Premium- eller Embedded-kapacitet, inklusive semantiska modeller med en Direct Query-anslutning.
- Exporterade rapporter får inte överskrida filstorleken 250 MB.
- När du exporterar till .png stöds inte känslighetsetiketter.
- Antalet exporter (enskilda visuella objekt eller rapportsidor) som kan tas med i en enskild exporterad rapport är 50 (inklusive export av sidnumrerade rapporter). Om begäran innehåller fler exporter returnerar API:et ett fel och exportjobbet avbryts.
- Personliga bokmärken och beständiga filter stöds inte för power BI-rapportexport till fil.
exportToFile
API:et exporterar rapporten med standardvärdet om det används utan bokmärken eller reportLevelFilters.- Export av en Power BI-rapport som är ansluten till en eller flera sammansatta semantiska modeller, som har minst en extern datakälla med enkel inloggning (SSO) aktiverad, stöds inte. När du exporterar kanske visuella objekt inte återges korrekt.
- När du exporterar en rapport med dynamisk bindning med hjälp av REST-API:et
exportToFile
kan den dynamiskt bundna semantiska modellen inte vara en sammansatt modell med en direkt fråga till SQL Server Analysis Services (SSAS). - De visuella Power BI-objekt som visas här stöds inte. När du exporterar en rapport som innehåller dessa visuella objekt återges inte de delar av rapporten som innehåller dessa visuella objekt och en felsymbol visas.
- Ocertifierade anpassade visuella Power BI-objekt
- Visuella R-objekt
- PowerApps
- Visuella Python-objekt
- Power Automate
- Visuellt sidnumrerat rapportobjekt
- Visio
- Visuella ArcGIS-objekt
Relaterat innehåll
Läs om hur du bäddar in innehåll för dina kunder och din organisation:
- Exportera sidnumrerad rapport till fil
- Bädda in för dina kunder
- Bädda in för din organisation
- Exportera och skicka en Power BI-rapport via e-post med Power Automate
Fler frågor? Prova Power BI Community