IF vs SWITCH

Quem trabalha com dados e faz análises sabe que chega sempre uma altura em que queremos comparar dois ou mais valores e devolver uma expressão para verdadeiro e outra para falso.

No Excel utilizamos o IF (SE) é uma forma relativamente simples de obter o resultado que pretendemos:

IF(Dado1 = Valor1 ; Resultado1; Resultado2)

No DAX, tal como referi noutro post, a maior parte das expressões são muito similares ao Excel assim é claro que existe a mesma função.

Se formos verificar qual o objectivo do IF temos a seguinte definição:

Verifica se uma condição fornecida como primeiro argumento é cumprida. Devolve um valor se a condição for verdadeira (TRUE) e outro valor se a condição for falsa (FALSE).

É uma expressão muito simples de dominar no entanto os problema começam quando queremos fazer alternativas.

Fazendo um exemplo muito simples:

CatValorGrupo
A23Menor 25
B48De 26 a 50
C61De 51 a 75
D95Maior de 75

Se quisermos que a coluna do Grupo seja escrita de forma dinâmica utilizaríamos a seguinte forma IF:

Grupo =
IF (
    Table[Valor] <= 25;
    "Menor 25";
    IF (
        Table[Valor] <= 50;
        "De 26 a 50";
        IF ( Table[Valor] <= 75; "De 51 a 75"; "Maior de 75" )
    )
)

Como podem ver temos a utilização de IF dentro de IF até chegarmos ao resultado final. Trata-se de uma formula que não é de fácil leitura e se tivermos mais do que 3 alternativas começamos a perder-nos sobre qual o resultado correcto.

Como alternativa ao IF o DAX apresenta o SWITCH (li algures que o SWITCH era o IF em esteróides).

A definição de SWITCH é:

Avalia uma expressão em relação a uma lista de valores e devolve uma de várias expressões de resultado possíveis.

Basicamente é uma outra maneira de dizer que faz o mesmo que o IF no entanto a sua formulação tem por base que existem uma lista de valores e vários resultados possíveis, esta é a grande diferença pois o IF só permite um valor e dois resultados assim pegando no exemplo anterior a fórmula seria reescrita para:

Grupo =
SWITCH (
    TRUE ();
    Table[Valor] <= 25; "Menor 25";
    Table[Valor] <= 50; "De 26 a 50";
    Table[Valor] <= 75; "De 51 a 75";
    "Maior de 75"
)

Como podem verificar esta formula tem uma leitura muito mais simples e directa com cada linha a devolver um valor para cada resultado.

Numa nota adicional o primeiro parâmetro da função não tem de ser sempre TRUE é onde definimos qual a expressão a avaliar neste caso como queremos saber se os valores são menores ou iguais temos de definir essa mesma expressão ao nível de cada linha, no entanto se quiséssemos por exemplo só identificar os valores que eram mesmo 25, 50, 75, 100 a expressão poderia ser reescrita como:

Grupo =
SWITCH (
    Table[Valor];
    25; "Igual a 25";
    50; "Igual a 50";
    75; "Igual a 75";
    "Outros Valores"
)

Como podem ver estamos a comparar o Valor com um número exacto e o que a expressão está a calcular é Table[Valor] = 25.

Podemos “complicar” as formulações a utilizar com mais ou menos parâmetros mas a sintaxe final será sempre mais fácil de ler do que termos vários IF aninhados.

Não estou com isto a dizer que devemos utilizar sempre o SWITCH em detrimento do IF, mas é a uma alternativa quando o número de expressões e de possíveis resultados é elevado.

Se forem pesquisar encontram diversos artigos sobre estas duas funções e quando utilizar uma ou outra assim como questões de performance, deixo abaixo alguns links mas existem muitos mais.

https://powerpivotpro.com/2015/03/the-diabolical-genius-of-switch-true/

https://www.sqlbi.com/articles/optimizing-if-and-switch-expressions-using-variables/

https://www.wiseowl.co.uk/blog/s2461/if-switch-functions.htm

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Google photo

Está a comentar usando a sua conta Google Terminar Sessão /  Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s

%d bloggers like this: