Um relatório que demora 10 segundos para carregar já perdeu a atenção do usuário. Performance no Power BI não é luxo — é parte do produto. A boa notícia: na maioria dos casos, os problemas têm causas bem conhecidas e soluções diretas.
Diagnosticando com o Performance Analyzer
Antes de otimizar, meça. No Power BI Desktop, vá em Exibir → Performance Analyzer e clique em "Iniciar registro". Interaja com o relatório e observe os tempos de cada visual. Cada visual mostra:
- Consulta DAX: tempo que o motor DAX levou para calcular a medida
- Consulta direta: tempo de consulta ao banco (para modelos DirectQuery)
- Outros: tempo de renderização do visual
Se o tempo de "Consulta DAX" for alto, o problema é o modelo ou as medidas. Se for "Outros", é a renderização (visual muito complexo).
O modelo de dados é a causa #1 de lentidão
Um modelo mal estruturado compromete toda a performance. As principais causas:
- Modelo flocos de neve em vez de modelo estrela: muitas junções encadeadas = mais tempo para cruzar dados.
- Relacionamentos muitos-para-muitos desnecessários: o Power BI precisa usar tabelas de ponte que aumentam a complexidade.
- Colunas desnecessárias: cada coluna extra consome memória. Remova no Power Query tudo que não vai para nenhum visual ou medida.
- Tipos de dados errados: texto no lugar de inteiro ou data aumenta o consumo de memória significativamente.
Colunas calculadas vs. medidas
Essa é uma das decisões que mais impacta performance. Use a regra:
- Coluna calculada: quando você precisa filtrar, agrupar ou segmentar pelo resultado. São materializadas em memória.
- Medida: quando você precisa de um valor calculado dinamicamente (soma, média, %). São calculadas no momento da consulta, não ocupam memória em repouso.
Criar colunas calculadas para fazer "SUM(Tabela[Coluna Calculada])" em vez de uma medida direta é o erro mais comum e um dos mais custosos.
Escrevendo medidas DAX mais eficientes
- Use
DIVIDE(numerador; denominador)em vez denumerador / denominador. DIVIDE trata divisão por zero nativamente e é mais rápido. - Evite
FILTER(ALL(Tabela); ...)quandoCALCULATETABLEresolve — FILTER itera linha a linha. - Não use
IF(HASONEVALUE(...); ...)desnecessariamente em medidas de visível simples.
Reduzindo o número de visuais por página
Cada visual dispara sua própria consulta DAX. Uma página com 20 visuais faz 20 consultas simultaneamente. Consolide informações, use tooltip pages e considere dividir um relatório denso em duas páginas mais simples.
Perguntas frequentes
DirectQuery é sempre mais lento que Import?
Geralmente sim, porque DirectQuery consulta o banco a cada interação. Import carrega os dados em memória (VertiPaq), que é muito mais rápido. Use DirectQuery apenas quando os dados mudam em tempo real ou o volume é proibitivo para caber em memória.
Como saber quanto de memória meu modelo está usando?
Use o DAX Studio (gratuito) para ver o tamanho de cada tabela e coluna. Frequentemente uma ou duas colunas de texto respondem por 60%+ do tamanho do modelo.