Criar medidas eficientes em DAX é essencial para garantir que os relatórios tenham sua performance otimizada. Duas boas práticas ajudam muito nisso: o uso de VAR e o uso do SWITCH, cada um com um papel diferente.
O SWITCH é usado para simplificar expressões condicionais que precisam retornar diferentes valores com base em várias condições.
Considere a seguinte medida DAX, que avalia o desempenho de uma medida chamada [Variance]:
Variance KPI = IF([Variance] > 0.80, "Amazing!", IF([Variance] > 0.60, "Good", "Bad"))
Embora funcione corretamente, é possível notar que há alguns IFs encadeados e a medida [Variance] é chamada mais de uma vez nesta expressão.
Isso aumenta o processamento desnecessário, principalmente em modelos com grandes volumes de dados. Esta fórmula pode ser mais eficiente — e também mais legível.
A solução com SWITCH e VAR
Reestruturando a medida com SWITCH(TRUE()) e uma variável intermediária, temos a versão otimizada:
VAR Calc = [Variance]
RETURN
SWITCH
(
TRUE(),
Calc > 0.80, "Amazing!",
Calc > 0.60, "Good",
"Bad"
)
A variável Calc armazena o valor de [Variance] uma única vez, e isso elimina a necessidade de novas chamadas a esta medida.
Cada recurso tem o seu papel:
- VAR → desempenho: o valor é calculado uma única vez e reaproveitado. É daqui que vem o ganho de performance.
- SWITCH(TRUE()) → legibilidade: sozinho, o SWITCH não é mais rápido que IFs encadeados. O que ele traz é um código mais limpo: as condições ficam alinhadas, na ordem em que são avaliadas, e fáceis de ler, entender e manter no futuro.
Mais um exemplo: classificando o atingimento de meta
Veja uma medida que classifica o resultado de vendas em relação a uma meta. Na versão com IFs encadeados, tanto [Total Vendas] quanto [Meta] são chamadas várias vezes, e a lógica fica escondida entre parênteses:
Status da Meta =
IF([Total Vendas] >= [Meta] * 1.2, "Superou",
IF([Total Vendas] >= [Meta], "Atingiu",
IF([Total Vendas] >= [Meta] * 0.8, "Quase lá", "Abaixo")))
Reescrevendo com VAR e SWITCH(TRUE()):
Status da Meta =
VAR VendasAtuais = [Total Vendas]
VAR MetaAtual = [Meta]
RETURN
SWITCH(
TRUE(),
VendasAtuais >= MetaAtual * 1.2, "Superou",
VendasAtuais >= MetaAtual, "Atingiu",
VendasAtuais >= MetaAtual * 0.8, "Quase lá",
"Abaixo"
)
O que mudou:
- Desempenho (VAR): cada medida é calculada uma única vez, em vez de três chamadas de
[Total Vendas]e três de[Meta]na versão anterior. - Legibilidade (SWITCH): as quatro faixas aparecem uma embaixo da outra, e para mudar uma regra basta editar uma linha.
- A ordem importa: o SWITCH(TRUE()) devolve o resultado da primeira condição verdadeira, então as faixas devem ir da mais restrita para a mais ampla (de
>= MetaAtual * 1.2até>= MetaAtual * 0.8).
Boas práticas com SWITCH e variáveis no DAX
- Priorize o uso de variáveis: Sempre que possível, armazene os valores em variáveis para evitar cálculos repetitivos. É daqui que vem o ganho de desempenho.
- Troque múltiplos IFs por SWITCH(TRUE()): Isso deixa o código mais legível, organizado e fácil de manter.
- Teste suas medidas: Em modelos grandes, simples mudanças podem gerar significativos ganhos em eficiência. Compare antes e depois com o Performance Analyzer do Power BI Desktop.
📚 Este artigo teve como base uma questão do simulado da Microsoft da prova DP-600.