Dela via


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)
  • .PDF
  • .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

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 Gäller inte för. Använd för att exportera en sida i ett visst tillstånd
pageName Gäller för. Gäller för. Använd Rest-API:et för GetPages eller klient-API:etgetPages.
visualName Gäller inte för. Gäller för. Det finns två sätt att hämta namnet på det visuella objektet:
  • Använd klient-API:etgetVisuals.
  • Lyssna och logga händelsen visualClicked , som utlöses när ett visuellt objekt väljs. Mer information finns i Hantera händelser
  • .

    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ärkets bookmarksManager.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:

    1. Skickar en exportbegäran.
    2. Avsökning.
    3. Hämtar filen.
    4. Använda filströmmen.

    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:

    1. Skickar exportbegäran.
    2. Avsökning.
    3. Hämtar filen.
    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

    Läs om hur du bäddar in innehåll för dina kunder och din organisation:

    Fler frågor? Prova Power BI Community