Solucionar problemas de modelos DirectQuery no Power BI Desktop
Este artigo ajuda a diagnosticar problemas de desempenho com modelos de dados DirectQuery do Power BI desenvolvidos no Power BI Desktop ou no serviço Power BI. O artigo também descreve como obter informações detalhadas para ajudar você a otimizar os relatórios.
Recomendamos iniciar qualquer diagnóstico de problemas de desempenho no Power BI Desktop, e não no serviço Power BI ou no Servidor de Relatórios do Power BI. Os problemas de desempenho geralmente dependem do nível de desempenho da fonte de dados subjacente. Você pode identificar e diagnosticar mais facilmente esses problemas no ambiente isolado do Power BI Desktop, sem envolver componentes como um gateway local.
Se você não encontrar os problemas de desempenho no Power BI Desktop, poderá concentrar sua investigação nas especificidades do relatório no serviço Power BI.
Você também deve tentar isolar os problemas de um visual individual antes de examinar muitos visuais em uma página.
Performance Analyzer
O Performance Analyzer é uma ferramenta útil para identificar problemas de desempenho em todo o processo de solução de problemas. Se você puder identificar um único visual lento em uma página no Power BI Desktop, poderá usar o Performance Analyzer para determinar quais consultas o Power BI Desktop envia para a fonte subjacente.
Você também pode visualizar rastreamentos e informações de diagnóstico que as fontes de dados subjacentes emitem. Esses rastreamentos podem conter informações úteis sobre os detalhes de como a consulta foi executada e como melhorá-la.
Mesmo sem rastreamentos da fonte, você pode visualizar as consultas enviadas pelo Power BI, juntamente com seus tempos de execução.
Observação
Para fontes baseadas em DirectQuery SQL, o Performance Analyzer mostra consultas apenas de fontes de dados do SQL Server, do Oracle e de Teradata.
Arquivo de rastreamento
Por padrão, o Power BI Desktop registra eventos durante uma determinada sessão em um arquivo de rastreamento chamado FlightRecorderCurrent.trc. Você pode encontrar o arquivo de rastreamento para a sessão atual na pasta AppData do usuário atual, em <>User\AppData\Local\Microsoft\Power BI Desktop\AnalysisServicesWorkspaces.
As seguintes fontes de dados do DirectQuery gravam todas as consultas que o Power BI as envia para o arquivo de rastreamento. O log pode oferecer suporte a outras fontes DirectQuery no futuro.
- SQL Server
- Banco de Dados SQL do Azure
- Azure Synapse Analytics (antigo SQL Data Warehouse)
- Oracle
- Teradata
- SAP HANA
Para acessar facilmente a pasta do arquivo de rastreamento no Power BI Desktop, selecione Arquivo>Opções e configurações>Opções e selecione Diagnóstico.
Em Coleta de despejo de memória, selecione o link Abrir pasta de despejo de memória/rastreamentos para abrir a pasta <Usuário>\AppData\Local\Microsoft\Power BI Desktop\Traces.
Navegue até a pasta pai dessa pasta e abra a AnalysisServicesWorkspaces, que contém uma subpasta de workspace para cada instância aberta do Power BI Desktop. Os nomes das subpastas têm sufixos inteiros, como AnalysisServicesWorkspace2058279583.
Cada pasta de AnalysisServicesWorkspace inclui uma subpasta de Dados contendo o arquivo de rastreamento FlightRecorderCurrent.trc da sessão do Power BI atual. Essa pasta desaparece quando a sessão do Power BI Desktop associada é encerrada.
Você pode abrir os arquivos de rastreamento usando a ferramenta SQL Server Profiler, que pode ser obtida gratuitamente como parte do download do SSMS (SQL Server Management Studio). Depois de baixar e instalar o SQL Server Management Studio, abra o SQL Server Profiler.
Para abrir um arquivo de rastreamento:
No SQL Server Profiler, selecione Arquivo>Abrir>Arquivo de rastreamento.
Navegue ou insira o caminho para o arquivo de rastreamento da sessão atual do Power BI, como <User>\AppData\Local\Microsoft\Power BI Desktop\AnalysisServicesWorkspaces\AnalysisServicesWorkspace2058279583\Data, e abra FlightRecorderCurrent.trc.
O SQL Server Profiler exibe todos os eventos da sessão atual. A captura de tela a seguir realça um grupo de eventos para uma consulta. Cada grupo de consulta tem os seguintes eventos:
Eventos
Query Begin
eQuery End
, que representam o início e o fim de uma consulta DAX gerada alterando um visual ou filtro na interface do usuário do Power BI ou filtrando ou transformando dados no Editor do Power Query.Um ou mais pares de eventos
DirectQuery Begin
eDirectQuery End
, que representam uma consulta enviada à fonte de dados subjacente, como parte da avaliação da consulta DAX.
Várias consultas DAX podem ser executadas em paralelo para que eventos de grupos diferentes possam ser intercalados. Você pode usar o valor de ActivityID
para determinar quais eventos pertencem ao mesmo grupo.
As seguintes colunas também são pertinentes:
- TextData: os detalhes textuais do evento. Para eventos
Query Begin
eQuery End
, o detalhe é a consulta DAX. Para eventosDirectQuery Begin
eDirectQuery End
, o detalhe é a consulta SQL enviada à fonte de dados subjacente. O valor de TextData para o evento selecionado no momento também aparece no painel na parte inferior da tela. - EndTime: a hora em que o evento foi concluído.
- Duração: o tempo, em milissegundos, necessário para executar a consulta DAX ou SQL.
- Erro: indica se ocorreu um erro e, nesse caso, o evento também será exibido em vermelho.
A imagem anterior restringe algumas das colunas menos interessantes, para que você possa ver as colunas mais interessantes com mais facilidade.
Siga essa abordagem para capturar um rastreamento para ajudar a diagnosticar um possível problema de desempenho:
Abra uma sessão individual do Power BI Desktop, para evitar a confusão de ter várias pastas de workspace.
Execute o conjunto de ações desejadas no Power BI Desktop. Inclua mais algumas ações para garantir que os eventos de interesse sejam liberados no arquivo de rastreamento.
Abra o SQL Server Profiler e examine o rastreamento. Lembre-se de que o fechamento do Power BI Desktop exclui o arquivo de rastreamento. Além disso, as ações adicionais no Power BI Desktop não são exibidas imediatamente. Você precisa fechar e reabrir o arquivo de rastreamento para ver novos eventos.
Mantenha as sessões individuais razoavelmente pequenas, talvez 10 segundos de ações, não centenas. Essa abordagem facilita a interpretação do arquivo de rastreamento. Também há um limite no tamanho do arquivo de rastreamento. Portanto, para sessões longas, há uma chance de que os eventos iniciais sejam encerrados.
Formato de consulta e subconsulta
O formato geral das consultas do Power BI Desktop consiste no uso de subconsultas para cada tabela de modelo à qual as consultas fazem referência. A consulta do Editor do Power Query define as consultas de subseleção. Por exemplo, suponha as seguintes tabelas TPC-DS em um banco de dados relacional do SQL Server:
No visual do Power BI, a expressão a seguir define a medida de SalesAmount
:
SalesAmount = SUMX(Web_Sales, [ws_sales_price] * [ws_quantity])
A atualização do visual produz a consulta T-SQL na imagem a seguir. Há três subconsultas para as tabelas de modelo Web_Sales
, Item
e Date_dim
. Cada consulta retorna todas as colunas da tabela de modelo, embora o visual referencie apenas quatro colunas.
Essas subconsultas sombreadas são a definição exata das consultas do Power Query. Esse uso de subconsultas não afeta o desempenho das fontes de dados com suporte do DirectQuery. Fontes de dados como o SQL Server simplesmente otimizam as referências para as outras colunas.
Um motivo pelo qual o Power BI usa esse padrão é para que você possa definir uma consulta do Power Query para usar uma instrução de consulta específica. O Power BI usa a consulta conforme fornecida, sem nenhuma tentativa de reescrevê-la. Esse padrão restringe o uso de instruções de consulta que usam CTEs (Expressões de Tabela Comuns) e procedimentos armazenados. Não é possível usar essas instruções em subconsultas.
Desempenho do gateway
Para obter informações sobre como solucionar problemas de desempenho do gateway, confira Solucionar problemas de gateways – Power BI.
Conteúdo relacionado
Para obter mais informações sobre o DirectQuery, confira os seguintes recursos: