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:

  1. Use o Performance Analyzer para identificar visuais lentos.
  2. No Power Query, verifique se as etapas mantêm o query folding.
  3. No DAX Studio, utilize o Server Timings para identificar medidas ou consultas pesadas.
  4. 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 e HASONEVALUE 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:

  1. Crie uma tabela com agregações.
  2. Marque como "tabela de agregação".
  3. Estabeleça relacionamentos com a tabela detalhada.
  4. 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


✅ 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.