O Power BI é uma ferramenta poderosa, mas conforme os relatórios e modelos crescem, manter uma boa performance se torna crucial. Este guia reúne boas práticas e técnicas avançadas que vão desde modelagem até elementos visuais como SVG, HTML e emojis, tudo voltado para quem quer criar dashboards rápidos e eficientes.
Sumário
- Diagnóstico de Performance
- Modelagem: O Primeiro Passo
- Otimização de DAX
- Query Folding e Power Query
- Visuais e Layout
- Atualização de Dados
- Técnicas Avançadas
- Elementos Visuais Avançados
- Referências Essenciais
- Conclusão
🔍 Diagnóstico de Performance
Antes de otimizar, é essencial identificar gargalos.
- Performance Analyzer (no Power BI Desktop): mede o tempo de carregamento de cada visual. 👉 Saiba mais
- Log de Diagnóstico e Premium Gen2 Metrics App (no Power BI Service): úteis para avaliar desempenho em ambiente produtivo. 👉 Monitorar desempenho no serviço
- DAX Studio, Server Timings e VertiPaq Analyzer: fundamentais para detectar medidas lentas e alto consumo de memória.
- View Native Query no Power Query: valide se o query folding está ativo (clique com o botão direito em uma etapa e selecione "Exibir consulta nativa").
- Histórico de Atualização: analise tempos de refresh para identificar gargalos no agendamento.
Passos sugeridos para diagnóstico:
- Use o Performance Analyzer para identificar visuais lentos.
- No Power Query, verifique se as etapas mantêm o query folding.
- No DAX Studio, utilize o Server Timings para identificar medidas ou consultas pesadas.
- Analise o histórico de atualização no serviço para detectar lentidão em refresh.
🧱 Modelagem: O Primeiro Passo
Reduza a Complexidade
- Remova colunas e tabelas desnecessárias.
- Simplifique relacionamentos e evite cálculos desnecessários.
Use o Modelo Estrela
- Estruture seus dados em tabelas fato e dimensão.
- Reduz a complexidade das consultas e melhora a performance.
Controle a Cardinalidade
- Colunas com muitos valores distintos impactam negativamente a performance.
- Sempre que possível, converta colunas de texto para IDs inteiros.
- Agrupe ou categorize valores detalhados.
Evite Relacionamentos Bidirecionais e Muitos-para-Muitos
- Use relacionamentos bidirecionais apenas quando realmente necessário.
- Prefira relacionamentos um-para-muitos (1:*).
- Relacionamentos muitos-para-muitos (M:M) devem ser evitados, pois aumentam a complexidade dos cálculos.
⚙️ Otimização de DAX
Prefira Medidas a Colunas Calculadas
As medidas são processadas sob demanda, consumindo menos memória:
Total Vendas = SUM(FatoVendas[Valor])
Use Variáveis com VAR
+ CALCULATE
Evita recalcular expressões complexas:
Lucro Margem (%) =
VAR TotalLucro = SUM(FatoVendas[Lucro])
VAR TotalReceita = SUM(FatoVendas[Receita])
RETURN DIVIDE(TotalLucro, TotalReceita, 0)
Domine FILTER, ALL, ALLSELECTED, SELECTEDVALUE e HASONEVALUE
-
FILTER
é poderoso, mas pesado em grandes volumes. Prefira filtros diretos sempre que possível. -
ALL
remove todo o contexto de filtro. -
ALLSELECTED
mantém os filtros aplicados pelo usuário, mas ignora os dos visuais. -
SELECTEDVALUE
eHASONEVALUE
otimizam cálculos condicionais.
% Participação =
DIVIDE(
SUM(FatoVendas[Valor]),
CALCULATE(SUM(FatoVendas[Valor]), ALL(DimProduto))
)
Evite Iteradores em Grandes Tabelas
Funções como SUMX
, FILTER
e outras iterativas podem ser lentas em grandes volumes. Sempre que possível, utilize funções agregadas simples.
📉 Query Folding e Power Query
- Sempre que possível, deixe que o Power BI “empurre” os filtros e transformações para a fonte de dados (query folding).
- Transformações como "adicionar coluna personalizada" ou "merge" entre fontes diferentes podem quebrar o folding. Prefira etapas simples e nativas.
- Use “Exibir consulta nativa” para validar se o folding está ativo.
📊 Visuais e Layout
- Evite páginas com muitos visuais — cada um gera uma consulta ao modelo.
- Use drill-through para detalhamento, em vez de sobrecarregar a página principal.
- Prefira visuais nativos aos customizados. Visuais customizados podem impactar a performance.
- Limite o uso de imagens grandes e SVGs complexos.
- Utilize bookmarks e navegação para dividir informações sem sobrecarregar páginas.
- Desative auto-refresh em visuais como Play Axis.
🔁 Atualização de Dados
- Use refresh incremental para evitar recarregar toda a base.
- Escolha entre Import ou DirectQuery conforme o caso:
- Import para performance.
- DirectQuery para dados em tempo real (com custo de performance).
- Analise o histórico de refresh para identificar gargalos.
- Considere segmentar a atualização por partições usando RangeStart e RangeEnd.
🧠 Técnicas Avançadas
Agregações em DirectQuery
Permite que o Power BI use uma tabela agregada e recorra à tabela detalhada apenas quando necessário.
Passos:
- Crie uma tabela com agregações.
- Marque como "tabela de agregação".
- Estabeleça relacionamentos com a tabela detalhada.
- Verifique o uso com o DAX Studio (Server Timings).
Modelos Compostos (Composite Models)
Combine dados importados com DirectQuery. Ideal para manter históricos em Import e dados recentes em DirectQuery. Atenção: nem todos os recursos estão disponíveis em modelos compostos.
Partition Pruning com RangeStart e RangeEnd
Segmenta dados por data no Power Query, essencial para refresh incremental eficiente.
🎨 Elementos Visuais Avançados
SVG
Ideal para gráficos vetoriais dinâmicos como barras de progresso. Cuidado com SVGs complexos em grandes volumes de dados.
BarraProgresso =
VAR Perc = DIVIDE([ValorAtual], [Meta], 0)
VAR QtdePreenchido = INT(Perc * 10)
VAR BlocosSVG = CONCATENATEX(
GENERATESERIES(1,10),
IF([Value] <= QtdePreenchido,
"<rect width='10' height='20' x='" & ([Value]-1)*12 & "' fill='green' />",
"<rect width='10' height='20' x='" & ([Value]-1)*12 & "' fill='lightgray' />"
),
""
)
RETURN "<svg width='120' height='20' xmlns='http://www.w3.org/2000/svg'>" & BlocosSVG & "</svg>"
Imagens Dinâmicas
- URLs baseadas nos dados exibidas em tabelas e matrizes.
- Comprima ou otimize imagens para evitar lentidão.
HTML
- Via visuais customizados como HTML Content.
- Ideal para tooltips avançados e visualizações customizadas.
Emojis
- Usados diretamente em DAX, com impacto de performance irrelevante:
IndicadorFarol =
SWITCH(
TRUE(),
[Valor] > 80, "🟢",
[Valor] > 50, "🟡",
"🔴"
)
📚 Referências Essenciais
- Guia Oficial de Otimização - Microsoft
- Treinamentos Oficiais Microsoft
- DAX Studio
- VertiPaq Analyzer
- Monitorar o desempenho de relatórios no Power BI
✅ Conclusão
Performance no Power BI vai muito além de "fazer funcionar". Trata-se de construir experiências fluídas, escaláveis e bem arquitetadas. Investir em boas práticas, entender o modelo tabular e usar ferramentas de análise vai elevar o nível dos seus dashboards. Elementos visuais avançados enriquecem — desde que usados com responsabilidade.
Comparativo Rápido de Boas Práticas
Tema | Boas Práticas | Pontos de Atenção |
---|---|---|
Modelagem | Modelo estrela, evitar bi-direcional | Cardinalidade alta, M:M |
DAX | Medidas, VAR, funções agregadas | FILTER/iteradores em grandes tabelas |
Power Query | Query folding, etapas nativas | Custom columns, merges complexos |
Visuais | Nativos, poucos por página | Custom visuals, imagens grandes |
Atualização | Incremental, agendado | Gateway, refresh total |
Métricas de referência:
- Busque páginas carregando em menos de 5 segundos.
- Visuais individuais devem responder em até 2 segundos.
- Relatórios com refresh incremental devem atualizar em minutos, não horas.