Colunas calculadas com base em condições

Ao calcular colunas, você pode querer resultados diferentes de uma expressão, dependendo de determinadas condições serem atendidas ou não. Condições podem ser configuradas em expressões usando as funções lógicas If() ouCase().

If()

Ao usar a função If(), você especifica uma condição True ou False, seguida pelo conteúdo a ser retornado dependendo dessa condição.

Exemplos

A expressão

If(([Amount]<10),"low","high")

significa que, se um valor de linha na coluna 'Amount' for inferior a 10, o valor 'low' será retornado como resultado, mas, se o valor for 10 ou superior, o valor 'high' será retornado.

Isso é ilustrado abaixo:



Em outras palavras, a função If() divide as linhas em dois grupos: um formado pelas linhas para as quais a condição especificada é True (retornando 'low' como resultado) e o outro formato pelas linhas para as quais a condição especificada é False (retornando 'high' como resultado).

Nota:

Se os valores a serem retornados forem valores agregados, os dois grupos serão tratados separadamente. Isso é exemplificado na tabela abaixo pela expressão adicionada

If(([Amount]<10),Avg([Amount]),Avg([Amount]))

que contém as agregações médias. Nesse caso, a mesma agregação é especificada para ambos os grupos, mas diferentes agregações podem ser usadas.



Para os valores de linha inferiores a 10, que é o grupo 'true', a média de 6 é retornada ((5+7)/2) e, para o grupo 'false', a média de 13 ((14+10+15)/3).

A função if() também pode ser usada em combinação com and ou or. Para ilustrar, a expressão

If(([Customer age]<20) and ([Gender]="Female"),"girl","other")

resulta na coluna calculada adicionada abaixo:



Case()

Se quiser escrever uma expressão cujos resultados de condição não estejam restritos a True e False, você poderá usar a função case(). Case() pode ser usada em dois formatos diferentes, ambos descritos a seguir com o uso de exemplos.

Exemplo 1

Suponha que os preços dos livros e vídeos abaixo tenham sido reduzidos em 10% e 50%, respectivamente, e a lista de preços precise de uma atualização.



Como a redução é diferente dependendo do tipo de produto, uma expressão case() é usada para calcular os novos preços:

case [Type]
when "Book" then [Price]*0.9
when "Video" then [Price]*0.5
else [Price]
end



Aqui case() simplesmente verifica 'Type' contra cada uma das opções de when na expressão.

Exemplo 2

No segundo exemplo, case() é usado para avaliar os resultados de teste para um número de alunos. Existem três níveis de avaliação; Failed (total menos de 100), Passed e Excellent (total de 160 ou mais).



Neste exemplo, Case() avalia as condições de forma independente para cada uma das opções de when:

case  
when ([Test A] + [Test B])<100 then "Failed" 
when ([Test A] + [Test B])>=160 then "Excellent"
else "Passed"
end

Dessa forma, é possível implementar condições mais complexas do que as do exemplo 1.

A coluna calculada resultante é mostrada abaixo:



Nota: Em ambos os formulários case(), várias condições when/then podem ser incluídas na expressão.

Ordem de execução das condições

A execução das diferentes partes das expressões case() é feita na ordem de cima para baixo. Veja a expressão abaixo e a coluna resultante:

case
when [Number]<40 then "yes"
when [Number]<70 then "no"
else "x"
end



Ou seja, os números abaixo de 40 são definidos como 'yes' e não serão alterados. A próxima parte da expressão, definir números abaixo de 70 como 'no', afeta apenas as linhas restantes.