Exportar relatório do Power BI para arquivo
A exportToFile
API permite exportar um relatório do Power BI usando uma chamada REST. Os seguintes formatos de ficheiro são suportados:
- .pptx (PowerPoint)
- .png
- Quando você exporta para um .png, um relatório com várias páginas é compactado em um arquivo .zip
- Cada arquivo no .zip representa uma página de relatório
- Os nomes de página são os mesmos que os valores de retorno das APIs Obter Páginas ou Obter Páginas em Grupo
Nota
A exportação de um relatório do Power BI para um arquivo usando a API exportToFile não é suportada para PPU (Premium Por Usuário).
Exemplos de utilização
Você pode usar o recurso de exportação de várias maneiras. Eis alguns exemplos:
Botão Enviar para impressão - Em seu aplicativo, crie um botão que, quando clicado, aciona um trabalho de exportação. O trabalho pode exportar o relatório visualizado como um .pdf ou um .pptx. Quando estiver concluído, o usuário poderá receber o arquivo como um download. Usando marcadores, você pode exportar o relatório em um estado específico, incluindo filtros, segmentações de dados e outras configurações configuradas. Como a API é assíncrona, pode demorar algum tempo até o ficheiro estar disponível.
Anexo de e-mail - Envie um e-mail automático em intervalos definidos, com um relatório de .pdf anexado. Esse cenário pode ser útil se você quiser automatizar o envio de um relatório semanal para os executivos. Para obter mais informações, consulte Exportar e enviar por email um relatório do Power BI com o Power Automate
Usando a API
Requisitos de licença
- O relatório que você está exportando deve residir em um espaço de trabalho apoiado por uma capacidade Premium, Incorporada ou de Malha.
- A
exportToFile
API não é suportada para Premium Per User (PPU).
Definições de administração
Antes de usar a API, verifique se as seguintes configurações de locatário administrador estão habilitadas:
- Exportar relatórios como apresentações do PowerPoint ou documentos PDF - Ativado por padrão.
- Exportar relatórios como arquivos de imagem - Necessário apenas para .png e desativado por padrão.
Eventos de "renderização"
Para garantir que a exportação não comece antes que a renderização visual termine, use a API de eventos "Renderização" e só inicie a exportação quando a renderização estiver concluída.
Consultas
A API é assíncrona. Quando a API exportToFile é chamada, ela dispara um trabalho de exportação. Depois de acionar um trabalho de exportação, use sondagem para acompanhar o trabalho até que ele seja concluído.
Durante a sondagem, a API retorna um número que representa a quantidade de trabalho concluído. O trabalho em cada trabalho de exportação é calculado com base no total de exportações no trabalho. Uma exportação inclui a exportação de um único visual ou de uma página com ou sem marcadores. Todas as exportações têm o mesmo peso. Se, por exemplo, seu trabalho de exportação incluir a exportação de um relatório com 10 páginas e a sondagem retornar 70, isso significa que a API processou sete das 10 páginas no trabalho de exportação.
Quando a exportação estiver concluída, a chamada da API de sondagem retorna uma URL do Power BI para obter o arquivo. O URL fica disponível durante 24 horas.
Funcionalidades suportadas
Esta seção descreve como usar os seguintes recursos suportados:
- Selecionar as páginas a imprimir
- Exportar uma página ou um único visual
- Marcadores
- Filtros
- Autenticação
- Segurança em Nível de Linha (RLS)
- Proteção de dados
- Localização
- Vinculação dinâmica
Selecionar as páginas a imprimir
Especifique as páginas que deseja imprimir de acordo com o valor de retorno Obter Páginas ou Obter Páginas em Grupo . Você também pode especificar a ordem das páginas que está exportando.
Exportar uma página ou um único visual
Você pode especificar uma página ou um único visual para exportar. As páginas podem ser exportadas com ou sem marcadores.
Dependendo do tipo de exportação, você precisa passar atributos diferentes para o objeto ExportReportPage . A tabela a seguir especifica quais atributos são necessários para cada trabalho de exportação.
Nota
Exportar um único visual tem o mesmo peso que exportar uma página (com ou sem marcadores). Isto significa que, em termos de cálculos do sistema, ambas as operações têm o mesmo valor.
Atributo | Página | Visual único | Comentários |
---|---|---|---|
bookmark |
Opcional | Usar para exportar uma página em um estado específico | |
pageName |
Use a API REST do GetPages ou a API do getPages cliente. |
||
visualName |
Há duas maneiras de obter o nome do visual:getVisuals cliente. |
Marcadores
Os marcadores podem ser usados para salvar um relatório em uma configuração específica, incluindo filtros aplicados e o estado dos visuais do relatório. Você pode usar a API exportToFile para exportar programaticamente o marcador de um relatório, de duas maneiras:
Exportar um marcador existente
Para exportar um marcador de relatório existente, use a propriedade, um identificador exclusivo (diferencia maiúsculas
name
de minúsculas), que você pode obter usando a API JavaScript de favoritos.Exportar o estado do relatório
Para exportar o estado atual do relatório, use a
state
propriedade. Por exemplo, você pode usar o método dobookmarksManager.capture
indicador para capturar as alterações que um usuário específico fez em um relatório e, em seguida, exportá-lo em seu estado atual usandocapturedBookmark.state
.
Nota
Não há suporte para marcadores pessoais e filtros persistentes .
Filtros
Usando reportLevelFilters
no PowerBIReportExportConfiguration, você pode exportar um relatório em uma condição filtrada.
Para exportar um relatório filtrado, insira os parâmetros da cadeia de caracteres de consulta de URL que você deseja usar como filtro em ExportFilter. Ao inserir a cadeia de caracteres, você deve remover a ?filter=
parte do parâmetro de consulta de URL.
A tabela inclui alguns exemplos de sintaxe de cadeias de caracteres que você pode passar para ExportFilter
.
Filtro | Sintaxe | Exemplo |
---|---|---|
Um valor em um campo | Tabela/Campo eq 'valor' | Loja/Território eq 'NC' |
Vários valores em um campo | Tabela/Campo em ('value1', 'value2') | Loja/Território em ('NC', 'TN') |
Um valor distinto em um campo e um valor distinto diferente em outro campo | Tabela/Campo1 eq 'valor1' e Tabela/Campo2 eq 'valor2' | Loja/Território eq 'NC' e Loja/Cadeia eq 'Modas Directas' |
Autenticação
Você pode autenticar usando um usuário (ou usuário mestre) ou uma entidade de serviço.
Segurança em Nível de Linha (RLS)
Com a Segurança em Nível de Linha (RLS), você pode exportar um relatório mostrando dados visíveis apenas para determinados usuários. Por exemplo, se você estiver exportando um relatório de vendas definido com funções regionais, poderá filtrar programaticamente o relatório para que apenas uma determinada região seja exibida.
Para exportar usando RLS, você deve ter as seguintes permissões:
- Permissões de gravação para o modelo semântico ao qual o relatório está conectado
- Colaborador ou administrador do espaço de trabalho onde o relatório reside
Proteção de dados
Os formatos .pdf e .pptx suportam rótulos de sensibilidade. Se você exportar um relatório com um rótulo de confidencialidade para um .pdf ou um .pptx, o arquivo exportado exibirá o relatório com seu rótulo de confidencialidade.
Um relatório com um rótulo de confidencialidade não pode ser exportado para um .pdf ou um .pptx usando uma entidade de serviço.
Localização
Ao usar a API, você pode passar a exportToFile
localidade desejada. As configurações de localização afetam a maneira como o relatório é exibido, por exemplo, alterando a formatação de acordo com o local selecionado.
Vinculação dinâmica
Para exportar um relatório enquanto ele estiver conectado a um modelo semântico diferente do modelo semântico padrão, especifique o datasetToBind
ID do conjunto de dados necessário no parâmetro ao chamar a API.
Leia mais sobre vinculação dinâmica.
Pedidos simultâneos
A exportToFile
API suporta um número limitado de solicitações simultâneas. O número máximo de solicitações simultâneas suportadas é de 500 por capacidade. Para evitar exceder o limite e obter um erro de solicitações demais (429), distribua a carga ao longo do tempo ou entre capacidades.
Apenas cinco páginas de um relatório são processadas simultaneamente. Por exemplo, se você estiver exportando um relatório com 50 páginas, o trabalho de exportação será processado em 10 intervalos sequenciais. Ao otimizar seu trabalho de exportação, convém considerar a execução de alguns trabalhos em paralelo.
Exemplos de código
Quando você cria um trabalho de exportação, há quatro etapas a serem seguidas:
- Envio de um pedido de exportação.
- Votação.
- Obter o ficheiro.
- Usando o fluxo de arquivos.
Esta seção fornece exemplos para cada etapa.
Etapa 1 - enviar uma solicitação de exportação
O primeiro passo é enviar um pedido de exportação. Neste exemplo, uma solicitação de exportação é enviada para uma página específica.
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;
}
Passo 2 - sondagem
Depois de enviar uma solicitação de exportação, use sondagem para identificar quando o arquivo de exportação que você está aguardando está pronto.
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;
}
Passo 3 - obter o ficheiro
Depois que a sondagem retornar uma URL, use este exemplo para obter o arquivo recebido.
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;
}
Etapa 4 - Usando o fluxo de arquivos
Quando você tem o fluxo de arquivos, você pode manipulá-lo da maneira que melhor se adapta às suas necessidades. Por exemplo, você pode enviá-lo por e-mail ou usá-lo para baixar os relatórios exportados.
Exemplo de ponta a ponta
Este é um exemplo completo para exportar um relatório. Este exemplo inclui as seguintes etapas:
- Envio do pedido de exportação.
- Votação.
- Obter o ficheiro.
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;
}
}
Considerações e limitações
- Uma carga de operação de API de exportação é avaliada como uma operação em segundo plano de execução lenta, conforme descrito em Avaliação de carga de capacidade Premium.
- Todos os modelos semânticos relacionados no relatório que você está exportando devem residir em uma capacidade Premium ou Incorporada, incluindo modelos semânticos com uma conexão Direct Query.
- Os relatórios exportados não podem exceder um tamanho de arquivo de 250 MB.
- Ao exportar para o .png, os rótulos de sensibilidade não são suportados.
- O número de exportações (visuais únicos ou páginas de relatório) que podem ser incluídas em um único relatório exportado é 50 (não incluindo a exportação de relatórios paginados). Se a solicitação incluir mais exportações, a API retornará um erro e o trabalho de exportação será cancelado.
- Não há suporte para marcadores pessoais e filtros persistentes para exportação de relatório do Power BI para arquivo.
- A
exportToFile
API exporta o relatório com o valor padrão se usado sem marcadores ou reportLevelFilters. - Não há suporte para a exportação de um relatório do Power BI conectado a um ou mais modelos semânticos compostos, que tenham pelo menos uma fonte de dados externa com logon único (SSO) habilitado. Ao exportar, os elementos visuais podem não ser renderizados corretamente.
- Os visuais do Power BI listados aqui não são suportados. Quando você exporta um relatório contendo esses elementos visuais, as partes do relatório que contêm esses elementos visuais não são renderizadas e exibem um símbolo de erro.
- Visuais personalizados não certificados do Power BI
- Visuais R
- PowerApps
- Visuais Python
- Power Automate
- Relatório visual paginado
- Visio
- Visuais do ArcGIS
Conteúdos relacionados
Reveja como incorporar conteúdo para os seus clientes e a sua organização:
- Exportar relatório paginado para arquivo
- Incorporar para os seus clientes
- Incorporar para a sua organização
- Exportar e enviar por email um relatório do Power BI com o Power Automate
Mais perguntas? Experimente a Comunidade do Power BI