(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa
Otimização de DAX: as técnicas que tornam as medidas rápidas
Power BI

Otimização de DAX: as técnicas que tornam as medidas rápidas

Equipa bConcepts 16/06/2026 5 min

Chega o momento em que o teu relatório de Power BI está bonito, o modelo está limpo, e mesmo assim uma medida específica demora uma eternidade a calcular. Culpar a ferramenta é fácil, mas quase sempre injusto: o DAX é uma linguagem extraordinariamente rápida quando escrita com consciência de como funciona por dentro. Otimizar medidas não é magia negra reservada a especialistas — é conhecer meia dúzia de princípios e aplicá-los com disciplina. Vamos a eles.

Os dois motores por trás de cada medida

Para otimizar DAX, primeiro há que perceber que cada medida é resolvida por dois motores. O Storage Engine é rápido, comprimido, trabalha sobre colunas inteiras de uma vez e pode usar vários núcleos do processador em paralelo. O Formula Engine é mais lento, trabalha linha a linha e usa um só núcleo. A regra de ouro da performance é simples: fazer o máximo de trabalho no Storage Engine e o mínimo no Formula Engine. Quase todas as técnicas que se seguem são variações deste princípio.

Otimização de DAX: as técnicas que tornam as medidas rápidas

Técnica 1: usar variáveis para não repetir cálculos

Uma das melhorias mais fáceis e mais ignoradas é guardar resultados intermédios em variáveis com VAR. Se uma medida calcula a mesma expressão três vezes, está a fazer o triplo do trabalho. Ao guardá-la numa variável e reutilizá-la, o cálculo acontece uma só vez. Além da velocidade, as variáveis tornam a medida legível e mais fácil de depurar — um raro caso em que o que é mais rápido é também o mais limpo.

Técnica 2: filtrar colunas, não tabelas inteiras

Um erro muito comum é usar FILTER sobre uma tabela grande inteira quando bastava uma condição sobre uma coluna. Escrever CALCULATE( [Vendas], FILTER( Tabela, Tabela[Ano] = 2026 ) ) obriga o motor a percorrer a tabela toda linha a linha; escrever CALCULATE( [Vendas], Tabela[Ano] = 2026 ) deixa o Storage Engine tratar do assunto de forma muito mais eficiente. Sempre que possível, aplica o filtro diretamente à coluna e deixa o FILTER explícito só para condições que realmente o exijam.

Técnica 3: cuidado com os iteradores sobre tabelas enormes

As funções da família X — SUMX, AVERAGEX e companhia — são poderosas mas percorrem a tabela linha a linha, território do Formula Engine. Sobre uma dimensão pequena, não há problema. Sobre uma tabela de factos com milhões de linhas, um iterador mal pensado pode ser a causa de toda a lentidão. Muitas vezes, é possível reformular o cálculo para que o trabalho pesado seja uma simples agregação de coluna, que o Storage Engine faz num piscar de olhos.

Técnica 4: reduzir a cardinalidade sempre que possível

A velocidade do DAX depende diretamente do número de valores distintos que os motores têm de processar. Colunas de altíssima cardinalidade — carimbos temporais ao segundo, identificadores únicos longos — são o pior inimigo da performance. Guardar a data separada da hora, ou arredondar o que não precisa de precisão extrema, reduz a cardinalidade e acelera tudo o que assenta sobre essas colunas. É uma otimização no modelo que se reflete em todas as medidas.

Técnica 5: medir, não adivinhar

A regra mais importante de todas: nunca otimizes às cegas. O Power BI tem o Performance Analyzer, que mostra exatamente quanto tempo cada visual e cada medida demoram. Para ir mais fundo, ferramentas gratuitas como o DAX Studio revelam quanto tempo foi passado no Storage Engine e quanto no Formula Engine — a informação que aponta diretamente ao problema. Otimizar sem medir é como operar sem diagnóstico: perde-se tempo a arranjar o que não estava partido.

Um caso concreto: de trinta segundos a menos de um

Uma equipa tinha um relatório onde uma medida de "clientes distintos com compra no período" demorava cerca de trinta segundos a abrir. A medida usava um FILTER sobre a tabela de vendas inteira, com milhões de linhas, dentro de um iterador. Ao correr o Performance Analyzer, viram que quase todo o tempo era passado no Formula Engine. Reescreveram a medida para aplicar o filtro diretamente à coluna e substituir o iterador por uma agregação nativa. O trabalho pesado passou para o Storage Engine. O tempo de cálculo caiu de trinta segundos para menos de um. O modelo não mudou, os dados não mudaram — mudou a forma como a medida pedia o trabalho.

O padrão mental que resolve a maioria dos casos

Se houvesse uma única ideia a levar, seria esta: pergunta sempre "este cálculo está a ser feito coluna a coluna pelo motor rápido, ou linha a linha pelo motor lento?". Quando notas uma medida lenta, procura os iteradores e os filtros sobre tabelas inteiras — são os suspeitos habituais. Reformula para que o Storage Engine faça o grosso, e a velocidade aparece quase sempre. É menos sobre truques e mais sobre respeitar como a ferramenta pensa.

Na prática

Da próxima vez que um relatório arrastar, não culpes o Power BI antes de olhar para as tuas medidas com estes olhos. Corre o Performance Analyzer, encontra a medida mais lenta, e pergunta onde é que ela está a fazer trabalho a mais. Muitas vezes, uma reescrita de duas linhas transforma a experiência de todos os que usam o relatório. Qual é a medida mais lenta do teu relatório principal — e já mediste onde ela perde tempo?

← Voltar aos insights
Vamos conversar?

Pronto para transformar os seus dados?

Marque uma reunião gratuita de 30 minutos e descubra como podemos ajudar a sua equipa a tomar melhores decisões.

Agendar Reunião Gratuita
bConcepts