Exportar relatório paginado para arquivo
A API exportToFile
permite exportar um relatório paginado do Power BI usando uma chamada REST. Os seguintes formatos de ficheiro são suportados:
.pptx (PowerPoint)
.pdf (e PDF acessível ou PDF/UA)
.xlsx (Excel)
.docx (Word)
.csv
.xml
.mhtml
Imagem
Ao exportar para uma imagem, defina o formato da imagem através da configuração de formatoOutputFormat
. Os valores deOutputFormat
suportados são:- .tiff (padrão)
- .bmp
- .emf
- .gif
- .jpeg
- .png
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 parâmetros de relatório e configurações de formato, você pode exportar o relatório em um estado específico, incluindo dados filtrados, tamanhos de página personalizados e outras configurações específicas de formato. Como a API é assíncrona, pode levar algum tempo para que o arquivo esteja disponível.
Anexo de e-mail - Envie automaticamente um e-mail em intervalos definidos, com um relatório em anexo .pdf. Esse cenário pode ser útil se você quiser automatizar o envio de um relatório semanal para os executivos.
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 API
exportToFile
tem suporte limitado em Premium Per User (PPU).
Renderização de eventos
Para garantir que a exportação não comece antes que o visual termine a renderização, use a API de eventos "Renderização" e só inicie a exportação quando a renderização estiver concluída.
Votação
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 a sondagem para acompanhar o trabalho até que seja concluído.
Quando a exportação estiver concluída, a chamada da API de sondagem retorna um URL do Power BI para obter o arquivo. O URL fica disponível durante 24 horas.
Funcionalidades suportadas
Configurações de formato
Especifique várias configurações de formato para cada formato de arquivo. As propriedades e valores suportados são equivalentes a parâmetros de Informações do Dispositivo para parâmetros de URL de relatório paginados.
Eis dois exemplos. A primeira é para exportar as primeiras quatro páginas de um relatório usando o tamanho da página do relatório para um arquivo .pptx. O segundo exemplo é para exportar a terceira página de um relatório para um arquivo de .jpeg.
Exportando as quatro primeiras páginas para um .pptx
{
"format": "PPTX",
"paginatedReportConfiguration":{
"formatSettings":{
"UseReportPageSize": "true",
"StartPage": "1",
"EndPage": "4"
}
}
}
Exportando a terceira página para um .jpeg
{
"format": "IMAGE",
"paginatedReportConfiguration":{
"formatSettings":{
"OutputFormat": "JPEG",
"StartPage": "3",
"EndPage": "3"
}
}
}
Parâmetros do relatório
Você pode usar a API exportToFile
para exportar programaticamente um relatório com um conjunto de parâmetros de relatório. Isso é feito usando as funcionalidades de parâmetros de relatório .
Veja um exemplo para definir valores de parâmetros de relatório.
{
"format": "PDF",
"paginatedReportConfiguration":{
"parameterValues":[
{"name": "State", "value": "WA"},
{"name": "City", "value": "Seattle"},
{"name": "City", "value": "Bellevue"},
{"name": "City", "value": "Redmond"}
]
}
}
Autenticação
Você pode autenticar usando um utilizador (ou utilizador mestre) ou um principal de serviço .
Segurança em Nível de Linha (RLS)
Ao usar um modelo semântico do Power BI que tenha RLS (Segurança em Nível de Linha) definida como uma fonte de dados, 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 permissão de leitura para o modelo semântico do Power BI que o relatório está usando como fonte de dados.
Aqui está um exemplo de fornecimento de um nome de usuário eficaz para RLS.
{
"format": "PDF",
"paginatedReportConfiguration":{
"identities": [
{"username": "john@contoso.com"}
]
}
}
Autenticação única SQL e Dataverse (SSO)
No Power BI, você tem a opção de definir OAuth com SSO. Quando o fizer, as credenciais do utilizador que visualiza o relatório são utilizadas para recuperar dados. O token de acesso no cabeçalho da solicitação não é usado para acessar os dados. O token deve ser passado com a identidade efetiva no corpo postal.
Obter o token de acesso correto para o recurso que você deseja acessar às vezes pode ser complicado.
- Para o Azure SQL, o recurso é
https://database.windows.net
. - Para Dataverse, o recurso é o endereço
https://
para seu ambiente. Por exemplo,https://contoso.crm.dynamics.com
.
Acesse a API de token usando o método AuthenticationContext.AcquireTokenAsync.
Aqui está um exemplo para fornecer uma identidade efetiva (nome de usuário) com um token de acesso.
{
"format":"PDF",
"paginatedReportConfiguration":{
"formatSettings":{
"AccessiblePDF":"true",
"PageHeight":"11in",
"PageWidth":"8.5in",
"MarginBottom":"2in"
},
"identities":[
{
"username":"john@contoso.com",
"identityBlob": {
"value": "eyJ0eX....full access token"
}
}
]
}
}
Solicitações simultâneas
O exportToFile
suporta um número limitado de solicitações simultâneas. O número máximo de solicitações de renderização de relatório paginado simultâneo é 500. Para evitar exceder o limite e obter um erro de demasiadas solicitações (429), distribua a carga ao longo do tempo ou entre diferentes capacidades.
Com Premium Per User (PPU), a API exportToFile
permite apenas uma solicitação em uma janela de cinco minutos. Várias solicitações dentro da janela de cinco minutos resultam em um erro Too Many Requests (429).
Exemplos de código
O Power BI API SDK usado nos exemplos de código pode ser baixado aqui.
Quando você cria um trabalho de exportação, há três etapas a serem seguidas:
- Envio de um pedido de exportação.
- Votação.
- Obter o ficheiro.
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 um intervalo de páginas, tamanho e valores de parâmetro de relatório específicos.
private async Task<string> PostExportRequest(
Guid reportId,
Guid groupId)
{
// For documentation purposes the export configuration is created in this method
// Ordinarily, it would be created outside and passed in
var paginatedReportExportConfiguration = new PaginatedReportExportConfiguration()
{
FormatSettings = new Dictionary<string, string>()
{
{"PageHeight", "14in"},
{"PageWidth", "8.5in" },
{"StartPage", "1"},
{"EndPage", "4"},
},
ParameterValues = new List<ParameterValue>()
{
{ new ParameterValue() {Name = "State", Value = "WA"} },
{ new ParameterValue() {Name = "City", Value = "Redmond"} },
},
};
var exportRequest = new ExportReportRequest
{
Format = FileFormat.PDF,
PaginatedReportExportConfiguration = paginatedReportExportConfiguration,
};
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 a sondagem para identificar quando o arquivo de exportação que você está esperando está pronto.
private async Task<Export> PollExportRequest(
Guid reportId,
Guid groupId,
string exportId /* Get from the ExportToAsync response */,
int timeOutInMinutes,
CancellationToken token)
{
Export exportStatus = null;
DateTime startTime = DateTime.UtcNow;
const int secToMillisec = 1000;
do
{
if (DateTime.UtcNow.Subtract(startTime).TotalMinutes > timeOutInMinutes || token.IsCancellationRequested)
{
// Error handling for timeout and cancellations
return null;
}
var httpMessage =
await Client.Reports.GetExportToFileStatusInGroupWithHttpMessagesAsync(groupId, reportId, exportId);
exportStatus = httpMessage.Body;
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 only populated when the status is either Running or NotStarted
var retryAfter = httpMessage.Response.Headers.RetryAfter;
var retryAfterInSec = retryAfter.Delta.Value.Seconds;
await Task.Delay(retryAfterInSec * secToMillisec);
}
}
// While not in a terminal state, keep polling
while (exportStatus.Status != ExportState.Succeeded && exportStatus.Status != ExportState.Failed);
return exportStatus;
}
Passo 3 - obter o ficheiro
Assim que a sondagem devolver uma URL, use este exemplo para aceder ao ficheiro recebido.
private async Task<ExportedFile> GetExportedFile(
Guid reportId,
Guid groupId,
Export export /* Get from the GetExportStatusAsync response */)
{
if (export.Status == ExportState.Succeeded)
{
var httpMessage =
await Client.Reports.GetFileOfExportToFileInGroupWithHttpMessagesAsync(groupId, reportId, export.Id);
return new ExportedFile
{
FileStream = httpMessage.Body,
ReportName = export.ReportName,
FileExtension = export.ResourceFileExtension,
};
}
return null;
}
public class ExportedFile
{
public Stream FileStream;
public string ReportName;
public string FileExtension;
}
Exemplo de ponta a ponta
Este é um exemplo completo para exportar um relatório. Este exemplo inclui as seguintes etapas:
private async Task<ExportedFile> ExportPaginatedReport(
Guid reportId,
Guid groupId,
int pollingtimeOutInMinutes,
CancellationToken token)
{
try
{
var exportId = await PostExportRequest(reportId, groupId);
var export = await PollExportRequest(reportId, groupId, exportId, pollingtimeOutInMinutes, token);
if (export == null || export.Status != ExportState.Succeeded)
{
// Error, failure in exporting the report
return null;
}
return await GetExportedFile(reportId, groupId, export);
}
catch
{
// Error handling
throw;
}
}
Considerações e limitações
Não há suporte para a exportação de um relatório paginado que tenha um modelo semântico do Power BI como fonte de dados nos seguintes casos:
- O chamador é um perfil de serviço principal .
- Uma das fontes de dados do modelo semântico é configurada com logon único (SSO) habilitado e uma identidade efetiva foi fornecida.
- O modelo semântico do Power BI tem uma conexão DirectQuery para o Azure Analysis Services ou para outro modelo semântico do Power BI, e uma identidade efetiva foi atribuída.
A exportação de um relatório paginado que tenha a fonte de dados do Azure Analysis Services configurada com o logon único (SSO) habilitado não é suportada nos seguintes casos:
Para exportar um relatório paginado com uma identidade efetiva, o nome de usuário deve ser um usuário existente da ID do Microsoft Entra do seu locatário.
A exportação de um relatório é limitada a 60 minutos, o que corresponde à vida útil do token de acesso do usuário. Se você receber um erro de tempo limite além da marca de 60 minutos ao exportar grandes quantidades de dados, considere reduzir a quantidade de dados usando filtros apropriados.
O hiperlink URL de compartilhamento de arquivos (caminho de compartilhamento de arquivos /UNC) não funciona ao exportar um relatório paginado publicado no serviço do Power BI online.
Conteúdo relacionado
Reveja como incorporar conteúdo para os seus clientes e a sua organização: