segunda-feira, 13 de maio de 2019

SWITCH em DAX - Condição Única e Condição Múltipla

A função SWITCH pode ser útil para tratar múltiplas condições e regras de negócios que geram novas colunas calculadas.

Muitas vezes a função IF atende bem este cenário, mas a medida que muitas condições começam a ser aninhadas, a leitura fica prejudicada, deixando a fórmula extensa e suscetível a erros.

Exemplo usando IF para criara a regra de negócio que representa o tipo de cargo:

=IF([Salario]<=3000, “Junior”,
IF([Salario]>3000, “Pleno”,
IF([Salario]>5000, “Senior I”,
IF(AND([Salario]>8000,[Salario]<=10000), “Senior II”, "Outros"))))

Veja, que devemos respeitar o encadeamento.


Trabalhando com SWITCH

Existem basicamente duas formas de usar switch



1-Condição Única:


Estabelece uma expressão e avalia os possíveis resultados.

SWITCH(expression,
   value1, result1,
   value2, result2,
    :
    :
    else
   )

expression: retorna um valor escalar que são comparados nas constantes value1 com result1.

Exemplo:
=SWITCH([MonthNum],
    1,”January”,
    2,”February”,
    3,”March”,
    4,”April”,
    5,”May”,
    6,”June”,
    7,”July”,
    8,”August”,
    9,”September”,
    10,”October”,
    11,”November”,
    12,”December”,
    “Invalid Month Number”
   )

O problema desta implementação é que ficamos restritos a avaliação de igualdade de um único valor. Já na alternativa a seguir, vamos que podemos avaliar ranges de valores.


2-Condições Múltiplas

Estabelece o resultado da expressão como TRUE() e avalia as expressões em busca daquela que possui o valor verdadeiro.

SWITCH(TRUE(),
    booleanexpression1, result1,
    booleanexpression2, result2,
    :
    :
    else
   )


Retorna um valor para cada expressão que é avaliada como TRUE()

SWITCH(TRUE(),
             AND([salario]>=0, [salario]<=3000), “Junior”,
             AND([salario]>=3001, [salario]<=5000), “Pleno”,
             AND([salario]>=5001, [salario]<=8000), “Senior I”,
             AND([salario]>=8001, [salario]<=10000), “Senior II”,         
             “Outros”
           )

Desta maneira, cada resultado pode ter uma expressão complexa, que represente adequadamente a regra de negócio estabelecida.

Apesar de ser possível chegar ao mesmo resultado usando IF, a função SWITCH é bem mais fácil de ser construída e lida, sendo assim menos suscetível a erros e mais simples de ser debugada.

Fonte: https://powerpivotpro.com/2012/06/dax-making-the-case-for-switch/

Nenhum comentário:

Postar um comentário