Pular para o conteúdo
Fynx
Power BI11 min de leitura

SWITCH em DAX: o que faz e quando usar (com exemplos)

Aprenda SWITCH DAX para substituir vários IF aninhados no Power BI: sintaxe, exemplos conceituais, armadilhas comuns e boas práticas de modelagem.

F
Fynx

O IF aninhado que ninguém mais consegue ler

Toda equipe de Power BI já herdou aquela medida com seis, sete, oito IF empilhados um dentro do outro, cada um fechando parênteses lá no final, e ninguém tem coragem de mexer. É exatamente esse cenário que o SWITCH DAX resolve. A função SWITCH avalia uma expressão contra uma lista de valores e devolve o resultado correspondente ao primeiro que der positivo, sem obrigar você a aninhar condição dentro de condição. O resultado é um código mais legível, mais fácil de manter e, quando bem escrito, mais rápido de raciocinar.

Neste artigo vou mostrar a sintaxe real, exemplos conceituais que aparecem no dia a dia, as armadilhas que fazem gente perder tarde inteira depurando e as boas práticas que separam uma medida profissional de uma gambiarra que funciona por acaso. Sem enrolação e com opinião de quem já refatorou muito modelo antigo.

SWITCH DAX serve para escolher entre múltiplos caminhos

A ideia central do SWITCH é simples: você tem uma expressão e quer devolver valores diferentes dependendo do que ela retorna. Em vez de escrever uma escada de decisões, você lista pares de valor e resultado.

A sintaxe básica é:

SWITCH(expressão, valor1, resultado1, valor2, resultado2, ..., [resultado_padrão])

O motor avalia a expressão uma vez, compara com valor1. Se bater, devolve resultado1 e para. Se não, testa valor2, e assim por diante. O último argumento, opcional, é o resultado padrão, aquele que vale quando nada casou. Recomendo sempre declarar esse padrão, porque sem ele o retorno de um caso não previsto vira BLANK(), e blank silencioso é fonte clássica de bug que passa despercebido em produção.

Um exemplo conceitual de classificação de faixa de nota:

Conceito = SWITCH([Nota], 1, "Ruim", 2, "Regular", 3, "Bom", 4, "Ótimo", "Não avaliado")

Aqui a comparação é de igualdade exata. [Nota] vale 1, retorna "Ruim". Vale 5, cai no padrão "Não avaliado". É limpo e o leitor entende a intenção na primeira passada.

SWITCH TRUE substitui vários IF aninhados

O SWITCH na forma de igualdade só compara valor exato. Mas a maioria dos IF aninhados que você quer aposentar não é igualdade, é faixa: maior que, menor que, entre. Para isso existe o padrão mais poderoso da função, o SWITCH(TRUE(), ...).

O truque é passar TRUE() como expressão. Cada "valor" da lista deixa de ser um número e passa a ser uma condição lógica completa. O motor procura a primeira condição que resulta em verdadeiro e devolve o resultado dela.

Compare os dois estilos. Primeiro, o IF aninhado que todo mundo conhece:

Faixa = IF([Receita] >= 1000000, "Alta", IF([Receita] >= 500000, "Média", IF([Receita] >= 100000, "Baixa", "Marginal")))

Agora o mesmo com SWITCH TRUE:

Faixa = SWITCH(TRUE(), [Receita] >= 1000000, "Alta", [Receita] >= 500000, "Média", [Receita] >= 100000, "Baixa", "Marginal")

A diferença não é performance, é legibilidade e manutenção. No IF aninhado, adicionar uma faixa nova no meio significa contar parênteses e rezar. No SWITCH, você insere um par condição/resultado na posição certa e pronto. A ordem importa muito, e já volto nesse ponto porque é onde mora a armadilha número um.

Quando usar SWITCH e quando o IF ainda é melhor

SWITCH não é para tudo. Ele brilha quando há três ou mais caminhos, ou quando a lógica cresce com o tempo. Para uma decisão binária simples, o IF continua sendo a escolha certa e mais direta.

A tabela abaixo resume onde cada abordagem faz sentido:

SituaçãoMelhor escolhaPor quê
Uma condição, dois resultadosIFMais curto e claro para caso binário
Igualdade contra lista de valores fixosSWITCH clássicoUma expressão, vários casos exatos
Faixas, intervalos ou condições compostasSWITCH(TRUE())Substitui IF aninhado sem escada de parênteses
Lógica que muda com frequênciaSWITCH(TRUE())Fácil de inserir e reordenar casos
Uma condição binária dentro de cálculo maiorIFMenos verboso no contexto

Na prática, quando percebo que um IF está prestes a ganhar o terceiro nível de aninhamento, já paro e converto para SWITCH TRUE. É o ponto em que a legibilidade começa a se degradar rápido.

As armadilhas que fazem gente perder a tarde

SWITCH é honesto, mas tem comportamentos que pegam quem não conhece. Vale conhecer cada um antes de colocar em produção.

A ordem das condições é sequencial, não a mais específica. No SWITCH TRUE, o motor devolve o primeiro caso verdadeiro, não o mais restritivo. Se você escrever [Idade] >= 18 antes de [Idade] >= 65, todo maior de 65 anos cai na primeira faixa e nunca chega na segunda. Sempre ordene do mais restritivo para o mais amplo, ou do maior valor para o menor em faixas numéricas. Essa é de longe a causa mais comum de resultado errado com SWITCH.

BLANK sem padrão declarado. Se nenhum caso casar e você não passou o resultado padrão, o retorno é BLANK(). Em um cartão ou tabela isso aparece como célula vazia, e vazio muitas vezes é confundido com zero ou com dado faltante. Declare o padrão explicitamente, nem que seja para retornar um texto como "Sem classificação".

SWITCH não é curto-circuito de verdade em todos os cenários. Diferente do que muita gente imagina, o mecanismo de avaliação do DAX pode calcular expressões dos ramos durante o planejamento da consulta. Na prática, para a maioria dos casos o comportamento é sequencial e para no primeiro acerto, mas não confie no SWITCH para "proteger" uma divisão por zero achando que o ramo problemático nunca será tocado. Para divisão segura, use DIVIDE, que trata o denominador zero nativamente.

Comparar valores de tipos diferentes. SWITCH compara a expressão com cada valor usando as regras de tipo do DAX. Misturar texto e número, ou comparar contra BLANK() sem cuidado, gera resultado silencioso e difícil de rastrear. Mantenha os tipos coerentes.

Repetir a mesma expressão em cada condição. No SWITCH TRUE, se você repete SUM(Vendas[Valor]) em cinco condições, está pedindo ao motor para reavaliar a mesma coisa. Calcule uma vez em uma variável com VAR e reutilize. Além de mais rápido, fica muito mais legível.

Boas práticas para SWITCH em produção

Escrever SWITCH que funciona é fácil. Escrever SWITCH que outra pessoa vai manter daqui a um ano é o que importa. Algumas práticas que aplicamos nos projetos:

  • Use VAR para as expressões repetidas. Calcule a métrica base uma vez e compare a variável nas condições. Isso vale principalmente no padrão TRUE com faixas.
  • Sempre declare o resultado padrão. Torna a intenção explícita e evita blank fantasma.
  • Ordene do mais restritivo ao mais amplo. Documente essa ordem com um comentário se as faixas não forem óbvias.
  • Formate o código. Um par condição/resultado por linha, indentação consistente. O DAX Formatter e o editor do próprio Power BI ajudam.
  • Não empurre regra de negócio complexa para dentro da medida. Se a classificação é estável, considere uma coluna calculada ou até uma tabela de faixas relacionada ao modelo. Medida é para o que muda com o contexto do filtro.

Esse último ponto merece destaque. Muita gente coloca no SWITCH uma lógica que deveria estar na modelagem. Se você tem faixas de faturamento fixas, uma tabela dimensão com os limites e um relacionamento costuma render um modelo mais performático e mais fácil de auditar do que uma medida gigante. Tratamos bastante desse equilíbrio no artigo de modelagem e DAX com boas práticas no Power BI, que complementa bem o que está aqui.

SWITCH, VertiPaq e o custo real de uma medida

Vale entender o que acontece por baixo. O Power BI usa o motor VertiPaq, que comprime cada coluna em memória de acordo com a cardinalidade, colunas com poucos valores distintos ocupam pouquíssimo espaço. Uma medida com SWITCH não muda a compressão dos dados, ela é avaliada em tempo de consulta pelo motor de fórmulas.

O que pesa não é a função SWITCH em si, é o que você coloca dentro de cada ramo. Cinco CALCULATE diferentes dentro de um SWITCH TRUE geram cinco varreduras potenciais. A função é barata, os cálculos internos é que custam. Por isso a variável importa tanto: consolidar a avaliação reduz trabalho do motor.

A tabela a seguir mostra padrões e o cuidado de performance associado:

PadrãoCusto típicoRecomendação
SWITCH clássico com valores fixosBaixoUso livre, é praticamente uma tabela de lookup
SWITCH TRUE com VAR reutilizadoBaixo a médioPadrão recomendado para faixas
SWITCH TRUE repetindo agregaçõesMédio a altoExtraia agregações para variáveis
SWITCH com muitos CALCULATE distintosAltoRevise se cabe modelagem em vez de medida

Em capacidades do Microsoft Fabric, onde o consumo é medido em Capacity Units, medida ineficiente não é só lentidão, é consumo de recurso que você paga. Vale a pena escrever DAX enxuto desde o começo. Se o assunto de capacidade e Fabric interessa, escrevemos sobre o que é o Microsoft Fabric e se vale a pena, anunciado pela Microsoft em 2023.

Um caso completo de seletor de métrica

Um uso elegante do SWITCH que aparece muito é o seletor de métrica dinâmica. Você cria uma tabela desconectada com nomes de indicadores, o usuário escolhe um em um segmentador, e uma única medida devolve o valor correspondente ao que foi selecionado.

Conceitualmente:

Métrica Selecionada = SWITCH(SELECTEDVALUE(Seletor[Métrica]), "Receita", [Total Receita], "Custo", [Total Custo], "Margem", [Margem], BLANK())

Aqui o SWITCH clássico compara o valor escolhido no segmentador contra cada nome e devolve a medida certa. Um único visual passa a exibir a métrica que o usuário quiser, sem multiplicar gráficos. É um padrão que reduz o número de objetos no relatório e melhora a experiência. Repare que voltei a usar BLANK() como padrão de propósito, porque neste caso "nenhuma seleção válida" realmente deve exibir vazio, e não um texto. A regra de sempre declarar o padrão continua valendo, o que muda é a escolha consciente do que ele deve ser.

Esse tipo de refinamento de experiência e performance é parte do que fazemos em projetos de Power BI e de analytics avançado, onde a diferença entre um relatório que trava e um que voa costuma estar exatamente nesse nível de detalhe do DAX.

Perguntas frequentes

Qual a diferença entre SWITCH e IF em DAX?

O IF avalia uma condição e retorna um entre dois resultados. O SWITCH compara uma expressão contra uma lista de casos e retorna o primeiro que casar. Para decisão binária, use IF. Para três ou mais caminhos, ou para substituir IF aninhados, use SWITCH. Funcionalmente o SWITCH TRUE cobre tudo que o IF aninhado faz, com muito mais legibilidade.

O que é SWITCH TRUE e por que ele é tão usado?

É o padrão SWITCH(TRUE(), condição1, resultado1, ...). Ao passar TRUE() como expressão, cada caso vira uma condição lógica completa em vez de um valor exato. Isso permite testar faixas, intervalos e condições compostas, exatamente o que o IF aninhado fazia, mas de forma linear e fácil de manter.

SWITCH melhora a performance da medida?

A função em si é barata. O ganho principal é de legibilidade e manutenção, não de velocidade bruta. A performance depende do que está dentro de cada ramo. Se você repete agregações pesadas em várias condições, consolide com VAR. O SWITCH bem escrito não é mais lento que o IF aninhado equivalente.

Preciso sempre declarar o resultado padrão?

Sim, como boa prática. Sem o padrão, um caso não previsto retorna BLANK() silenciosamente, o que causa células vazias confundidas com zero ou dado faltante. Declare o padrão explicitamente, mesmo que seja para retornar um texto como "Não classificado". A única exceção é quando o vazio é o comportamento desejado de forma consciente.

Por que meu SWITCH TRUE está retornando o valor errado?

Quase sempre é ordem de condições. O SWITCH devolve o primeiro caso verdadeiro, não o mais específico. Se uma condição ampla vem antes de uma restritiva, ela captura casos que deveriam cair na seguinte. Ordene do mais restritivo ao mais amplo, ou do maior para o menor em faixas numéricas.

Vale a pena trocar todos os IF aninhados por SWITCH?

Os aninhados com três níveis ou mais, sim, quase sempre compensa pela clareza. IF simples de um nível não precisa mudar. O critério prático: se você precisa contar parênteses para entender a lógica, é hora de migrar para SWITCH TRUE.

Fechamento

SWITCH não é açúcar sintático, é a diferença entre um modelo que a equipe entende e um que só o autor original consegue mexer. Domine o padrão TRUE, cuide da ordem das condições, declare o padrão e use variáveis, e você elimina de vez aquelas escadas de IF que ninguém quer manter.

Se a sua operação de BI convive com medidas difíceis de manter, relatórios lentos ou DAX herdado sem documentação, podemos ajudar a colocar ordem na casa. Fale com a gente e vamos conversar sobre o seu cenário.

Quer aplicar isso na sua empresa?

A Fynx implementa BI, Power BI e Power Platform de ponta a ponta. Conte seu cenário e devolvemos um diagnóstico direto ao ponto.

Falar com um especialista

Vamos transformar seus dados em decisão?

Conte seu cenário. Devolvemos um diagnóstico e uma proposta com faixa de investimento em poucos dias úteis, sem folheto, direto ao ponto.