Skip to main content

· PYO Tecnologia · Power BI  · 3 min de leitura

DAX Lento? 5 Técnicas de Otimização que Salvam Dashboards

Seus usuários reclamam que o relatório demora para carregar? O problema provavelmente está no seu DAX. Veja como otimizar medidas complexas.

Seus usuários reclamam que o relatório demora para carregar? O problema provavelmente está no seu DAX. Veja como otimizar medidas complexas.

Você já passou por isso: o dashboard está lindo, o design está impecável, mas quando o usuário clica em um filtro… a rodinha gira. E gira. E gira.

Performance em Power BI não é sorte, é engenharia. E 90% dos problemas de performance residem em DAX mal escrito ou modelagem ineficiente.

Hoje, vamos focar no DAX. Aqui estão 5 técnicas essenciais para reduzir drasticamente o tempo de renderização de relatórios.

1. Evite FILTER em Tabelas Inteiras

Este é o erro número 1.

// RUIM: Itera sobre toda a tabela de Vendas (milhões de linhas)
Total Vendas Vermelho =
CALCULATE(
    [Total Vendas],
    FILTER(Vendas, Vendas[Cor] = "Vermelho")
)

O FILTER é um iterador. Quando você passa a tabela Vendas inteira, ele vai linha por linha.

// BOM: Itera apenas sobre a coluna de cores (algumas dezenas de linhas)
Total Vendas Vermelho =
CALCULATE(
    [Total Vendas],
    KEEPFILTERS(Vendas[Cor] = "Vermelho")
)

2. Use Variáveis (VAR)

Variáveis não são apenas para legibilidade. Elas calculam o resultado uma vez e o armazenam em cache para uso dentro da medida.

// RUIM: Calcula [Total Vendas] duas vezes
Crescimento =
IF(
    [Total Vendas] > 1000,
    [Total Vendas] * 1.1,
    [Total Vendas]
)

// BOM: Calcula uma vez
Crescimento =
VAR VendasAtuais = [Total Vendas]
RETURN
    IF(
        VendasAtuais > 1000,
        VendasAtuais * 1.1,
        VendasAtuais
    )

3. Cuidado com a Bi-Direcionalidade

Relacionamentos bi-direcionais (Both) no modelo de dados podem destruir a performance e criar ambiguidade. Sempre que possível, mantenha relacionamentos 1:* (um para muitos) e use CROSSFILTER no DAX se precisar propagar filtro no sentido oposto apenas para uma medida específica.

4. DIVIDE vs /

A função DIVIDE é “safe divide”, tratando divisão por zero automaticamente. Mas ela tem um custo. Se você tem certeza absoluta que o denominador nunca será zero (ex: contagem de dias num mês), o operador / é ligeiramente mais rápido.

Porém, na dúvida, fique com o DIVIDE pela segurança. A otimização aqui é: não use IF(Denominador = 0, 0, Numerador / Denominador). O DIVIDE já faz isso de forma otimizada.

5. Reduza a Cardinalidade

Isso é modelagem, mas afeta o DAX. Se você tem uma coluna DateTime (ex: 01/01/2025 14:32:15) e usa ela em relacionamentos ou filtros, a cardinalidade é altíssima.

Quebre em duas colunas: Data e Hora. Ou melhor, se não precisa do segundo, arredonde para a hora ou minuto. Menor cardinalidade = motor VertiPaq mais feliz = DAX mais rápido.


Seu Power BI está lento demais? Performance é crucial. Uma auditoria completa de modelos e DAX pode transformar a experiência do usuário. Conheça nossa consultoria em Power BI ou agende um diagnóstico.

Voltar ao Blog

Posts Relacionados

Ver Todos os Posts »