Eksporter Power BI-rapport til fil

exportToFile API-en aktiverer eksport av en Power BI-rapport ved hjelp av en REST-samtale. Følgende filformater støttes:

  • PPTX (PowerPoint)
  • .Pdf
  • .png
    • Når du eksporterer til en PNG-fil, komprimeres en rapport med flere sider til en ZIP-fil
    • Hver fil i ZIP representerer en rapportside
    • Sidenavnene er de samme som returverdiene for Hent sider eller Hent sider i gruppe-API-er

Merk

Eksport av en Power BI-rapport til en fil ved hjelp av exportToFile API-en støttes ikke for Premium per bruker (PPU).

Eksempler på bruk

Du kan bruke eksportfunksjonen på flere måter. Her er et par eksempler:

  • Send for å skrive ut-knappen – Opprett en knapp i programmet når du klikker på utløser en eksportjobb. Jobben kan eksportere den viste rapporten som en PDF- eller PPTX-fil. Når den er fullført, kan brukeren motta filen som en nedlasting. Ved hjelp av bokmerker kan du eksportere rapporten i en bestemt tilstand, inkludert konfigurerte filtre, slicere og andre innstillinger. Da API-en er asynkron, kan det ta litt tid før filen blir tilgjengelig.

  • E-postvedlegg – Send en automatisert e-postmelding med angitte intervaller, med en vedlagt PDF-rapport. Dette scenarioet kan være nyttig hvis du vil automatisere sending av en ukentlig rapport til ledere. Hvis du vil ha mer informasjon, kan du se Eksportere og sende en Power BI-rapport via e-post med Power Automate

Bruke API-en

Lisenskrav

  • Rapporten du eksporterer, må ligge i et arbeidsområde støttet av en Premium-, Embedded- eller Fabric-kapasitet.
  • exportToFile API-en støttes ikke for Premium per bruker (PPU).

Administratorinnstillinger

Før du bruker API-en, må du kontrollere at følgende leierinnstillinger for administratorer er aktivert:

  • Eksporter rapporter som PowerPoint-presentasjoner eller PDF-dokumenter – aktivert som standard.
  • Eksporter rapporter som bildefiler – obligatorisk bare for PNG og deaktivert som standard.

«Gjengivelse»-hendelser

Hvis du vil forsikre deg om at eksporten ikke begynner før gjengivelsen av visualobjektet er ferdig, bruker du API-en for gjengivelseshendelser og starter bare eksporten når gjengivelsen er fullført.

Polling

API-en er asynkron. Når exportToFile-API-en kalles, utløses en eksportjobb. Når du har utløst en eksportjobb, kan du bruke avspørring til å spore jobben til den er fullført.

Under avspørring returnerer API-en et tall som representerer mengden arbeid som er fullført. Arbeidet i hver eksportjobb beregnes basert på summen av eksporten i jobben. En eksport inkluderer eksport av ett enkelt visualobjekt eller en side med eller uten bokmerker. Alle eksporter har samme vekt. Hvis eksportjobben for eksempel omfatter eksport av en rapport med 10 sider, og avspørringen returnerer 70, betyr det at API-en behandlet syv av de ti sidene i eksportjobben.

Når eksporten er fullført, returnerer API-kallet for avspørring en Nettadresse for Power BI for å hente filen. URL-adressen er tilgjengelig i 24 timer.

Støttede funksjoner

Denne delen beskriver hvordan du bruker følgende støttede funksjoner:

Velge hvilke sider som skal skrives ut

Angi sidene du vil skrive ut i henhold til hent sider eller Hent sider i gruppeavkastningsverdien . Du kan også angi rekkefølgen på sidene du eksporterer.

Eksportere en side eller ett enkelt visualobjekt

Du kan angi en side eller ett enkelt visualobjekt som skal eksporteres. Sider kan eksporteres med eller uten bokmerker.

Avhengig av eksporttypen må du sende forskjellige attributter til ExportReportPage-objektet . Tabellen nedenfor angir hvilke attributter som kreves for hver eksportjobb.

Merk

Eksport av ett enkelt visualobjekt har samme vekt som å eksportere en side (med eller uten bokmerker). Dette betyr at når det gjelder systemberegninger, har begge operasjonene samme verdi.

Attributt Side Enkelt visualobjekt Kommentarer
bookmark Valgfritt Does not apply to. Bruk denne til å eksportere en side i en bestemt tilstand
pageName Applies to. Applies to. Bruk GetPages REST-API-en eller klient-API-engetPages.
visualName Does not apply to. Applies to. Det finnes to måter å få navnet på visualobjektet på:
  • Bruk klient-API-engetVisuals.
  • Lytt og loggvis visualObjekthendelsen, som utløses når et visualobjekt er valgt. Hvis du vil ha mer informasjon, kan du se Slik håndterer du hendelser
  • .

    Bokmerker

    Bokmerker kan brukes til å lagre en rapport i en bestemt konfigurasjon, inkludert brukte filtre og tilstanden til rapportens visualobjekter. Du kan bruke exportToFile-API-en til programmatisk å eksportere bokmerket for en rapport på to måter:

    • Eksportere et eksisterende bokmerke

      Hvis du vil eksportere et eksisterende rapportbokmerke, bruker name du egenskapen, en unik identifikator (skiller mellom store og små bokstaver) som du kan få ved hjelp av javascript-API-ene for bokmerkene.

    • Eksporter rapportens tilstand

      Hvis du vil eksportere gjeldende status for rapporten, bruker du state egenskapen. Du kan for eksempel bruke bokmerkets bookmarksManager.capture metode til å registrere endringene en bestemt bruker har gjort i en rapport, og deretter eksportere den i gjeldende tilstand ved hjelp av capturedBookmark.state.

    Filtre

    Ved hjelp av reportLevelFilters PowerBIReportExportConfiguration kan du eksportere en rapport i en filtrert betingelse.

    Hvis du vil eksportere en filtrert rapport, setter du inn parameterne for nettadressespørringsstrengen du vil bruke som filter, til ExportFilter. Når du skriver inn strengen, må du fjerne ?filter= delen av nettadressespørringsparameteren.

    Tabellen inneholder noen syntakseksempler på strenger du kan sende til ExportFilter.

    Filter Syntaks Eksempel
    En verdi i et felt Tabell/felt eq 'verdi' Store/Distrikt eq 'NC'
    Flere verdier i et felt Tabell/felt i ('verdi1', 'verdi2') Store/Distrikt i ('NC', 'TN')
    En distinkt verdi i ett felt, og en annen distinkt verdi i et annet felt Tabell/felt1 eq 'verdi1' og tabell/felt2 eq 'verdi2' Store/Territory eq 'NC' og Store/Chain eq 'Fashions Direct'

    Autentisering

    Du kan godkjenne ved hjelp av en bruker (eller hovedbruker) eller en tjenestekontohaver.

    Sikkerhet på radnivå (RLS)

    Med Sikkerhet på radnivå (RLS) kan du eksportere en rapport som viser data som bare er synlige for bestemte brukere. Hvis du for eksempel eksporterer en salgsrapport definert med regionale roller, kan du programmatisk filtrere rapporten slik at bare et bestemt område vises.

    Hvis du vil eksportere ved hjelp av RLS, må du ha følgende tillatelser:

    • Skrive- og dele tillatelser for semantisk modell rapporten er koblet til
    • Arbeidsområdemedlem eller administrator for arbeidsområdet der rapporten befinner seg

    Databeskyttelse

    PDF- og PPTX-formatene støtter følsomhetsetiketter. Hvis du eksporterer en rapport med en følsomhetsetikett til en PDF- eller PPTX-fil, viser den eksporterte filen rapporten med følsomhetsetiketten.

    En rapport med en følsomhetsetikett kan ikke eksporteres til en PDF- eller PPTX-fil ved hjelp av en tjenestekontohaver.

    Lokalisering

    Når du bruker exportToFile API-en, kan du sende ønsket nasjonal innstilling. Lokaliseringsinnstillingene påvirker måten rapporten vises på, for eksempel ved å endre formateringen i henhold til den valgte lokale.

    Dynamisk binding

    Hvis du vil eksportere en rapport mens den er koblet til en annen semantisk modell enn standard semantisk modell, angir du den nødvendige datasett-ID-en i parameteren datasetToBind når du kaller API-en. Les mer om dynamisk binding.

    Samtidige forespørsler

    exportToFile API-en støtter et begrenset antall samtidige forespørsler. Maksimalt antall samtidige forespørsler som støttes, er 500 per kapasitet. Hvis du vil unngå å overskride grensen og få en for mange forespørsler (429)-feil, kan du enten distribuere belastningen over tid eller på tvers av kapasiteter. Bare fem sider i en rapport behandles samtidig. Hvis du for eksempel eksporterer en rapport med 50 sider, behandles eksportjobben i 10 sekvensielle intervaller. Når du optimaliserer eksportjobben, bør du vurdere å utføre noen få jobber parallelt.

    Kodeeksempler

    Når du oppretter en eksportjobb, er det fire trinn å følge:

    1. Sender en eksportforespørsel.
    2. Avstemning.
    3. Henter filen.
    4. Bruke filstrømmen.

    Denne inndelingen inneholder eksempler for hvert trinn.

    Trinn 1 – sende en eksportforespørsel

    Det første trinnet er å sende en eksportforespørsel. I dette eksemplet sendes en eksportforespørsel for en bestemt side.

    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;
    }
    

    Trinn 2 – avstemning

    Når du har sendt en eksportforespørsel, kan du bruke avspørring til å identifisere når eksportfilen du venter på, er 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;
    }
    

    Trinn 3 – hente filen

    Når avspørring returnerer en URL-adresse, kan du bruke dette eksemplet til å hente den mottatte 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;
    }
    

    Trinn 4 – Bruke filstrømmen

    Når du har filstrømmen, kan du håndtere den på den måten som passer best til dine behov. Du kan for eksempel sende den via e-post eller bruke den til å laste ned de eksporterte rapportene.

    Eksempel på ende-til-ende

    Dette er et eksempel fra ende til ende for eksport av en rapport. Dette eksemplet inneholder følgende faser:

    1. Sender eksportforespørselen.
    2. Avstemning.
    3. Henter 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;
        }
    }
    

    Hensyn og begrensninger

    • En eksport-API-operasjonsbelastning evalueres som en langsom bakgrunnsoperasjon, som beskrevet i premium kapasitetsbelastningsevaluering.
    • Alle relaterte semantiske modeller i rapporten du eksporterer, må ligge på en Premium- eller Embedded-kapasitet, inkludert semantiske modeller med en Direct Query-tilkobling.
    • Eksporterte rapporter kan ikke overskride en filstørrelse på 250 MB.
    • Når du eksporterer til PNG, støttes ikke følsomhetsetiketter.
    • Antall eksporter (enkeltvisualobjekter eller rapportsider) som kan inkluderes i én enkelt eksportert rapport, er 50 (ikke inkludert eksport av paginerte rapporter). Hvis forespørselen inneholder flere eksporter, returnerer API-en feil, og eksportjobben avbrytes.
    • Personlige bokmerker og faste filtre støttes ikke for eksport av Power BI-rapporter til fil.
    • exportToFile API-en eksporterer rapporten med standardverdi hvis den brukes uten bokmerker eller reportLevelFilters.
    • Power BI-visualobjektene som er oppført her, støttes ikke. Når du eksporterer en rapport som inneholder disse visualobjektene, gjengis ikke de delene av rapporten som inneholder disse visualobjektene, og viser et feilsymbol.
      • Uncertified Power BI egendefinerte visualobjekter
      • R-visualobjekter
      • PowerApps
      • Python-visualobjekter
      • Power Automate
      • Visualobjekt for paginert rapport
      • Visio
      • ArcGIS-visualobjekter

    Se gjennom hvordan du bygger inn innhold for kundene og organisasjonen:

    Flere spørsmål? Prøv Power BI-fellesskap