CASE
define uma ou mais condições e retorna um resultado quando uma condição é atendida. Defina um resultado padrão se nenhuma das condições for atendida.
Exemplo
CASE
é normalmente usada para criar novas categorias ou agrupamentos de dados. Por exemplo, para agrupar valores de países selecionados na dimensão Região de vendas, você pode criar uma expressão CASE
como esta:
CASE
WHEN Country IN ("USA","Canada","Mexico") THEN "North America"
WHEN Country IN ("England","France") THEN "Europe"
ELSE "Other"
END
Como a expressão CASE
pesquisada funciona
Uma expressão CASE
começa com a palavra-chave CASE
e termina com END
. Entre elas, há uma série de seções ou cláusulas:
WHEN
: uma condição que você quer avaliar. É possível ter várias cláusulasWHEN
em uma única expressãoCASE
.THEN
: o resultado que vai ser retornado se a condição da cláusulaWHEN
for verdadeira. É preciso ter uma cláusulaTHEN
para cadaWHEN
na sua expressãoCASE
.ELSE
: opcional. Se nenhuma das condições da cláusulaWHEN
for verdadeira,CASE
vai retornar o valor na cláusulaELSE
. Ou, então, seELSE
não for especificado,NULL
será retornado.
CASE
avalia cada cláusula WHEN
sucessiva e retorna o primeiro resultado quando a condição é verdadeira. As cláusulas WHEN
restantes e o resultado ELSE
não são avaliados. Se todas as condições WHEN
forem falsas ou NULL
, CASE
vai retornar o resultado ELSE
. Caso não haja uma cláusula ELSE
, vai ser retornado NULL
.
Sintaxe da CASE pesquisada
CASE
WHEN condition THEN result
[WHEN condition THEN result]
[...]
[ELSE else_result]
END
Parâmetros
WHEN condition
As condições WHEN
avaliam seus dados e retornam "true" se a condição especificada é atendida e "false" quando não é. Você pode usar qualquer expressão booleana válida como condição WHEN
.
Resultado THEN
Cada condição WHEN
precisa ter uma cláusula THEN
correspondente que especifica os resultados se essa condição é verdadeira. Se houver várias condições WHEN
, a expressão CASE
vai retornar o resultado para a primeira que for verdadeira.
Observações
Todos os resultados possíveis em uma cláusula THEN
precisam ser do mesmo tipo.
Por exemplo, se a primeira cláusula THEN
retornar um texto, as demais cláusulas THEN
e a cláusula ELSE
também vão precisar retornar um texto.
ELSE else_result
A cláusula opcional ELSE
especifica um resultado padrão, que será retornada se nenhuma das cláusulas WHEN
for verdadeira. Caso uma expressão CASE
não tenha uma cláusula ELSE
e nenhuma das cláusulas WHEN seja verdadeira, a instrução vai retornar NULL
.
Só pode haver uma cláusula ELSE
em uma expressão CASE
.
Mais exemplos
Verificar a desigualdade
CASE WHEN Medium != "cpc" THEN "free" ELSE "paid" END
Classificar os valores de dimensão numérica em intervalos discretos
Por exemplo, você pode separar os pedidos em "Pequeno", "Médio" ou "Grande" com base no valor:
CASE WHEN Amount < 20 THEN "Small" WHEN Amount >= 20 and Amount < 100 THEN "Medium" WHEN Amount >= 100 THEN "Large" END
Avaliar uma condição AND lógica
CASE
WHEN Country ISO Code = "US" AND Medium = "cpc"
THEN "US - Paid"
ELSE "other"
END
Avaliar uma condição lógica AND/OR
CASE WHEN REGEXP_MATCH(Video Title, ".*Google Analytics*") AND is_livestream = TRUE OR Video Length > 600 THEN "GA Livestream or long video" END
Avaliar um parâmetro
Por exemplo, você pode definir um parâmetro de "Sales target" e ajustá-lo para saber quais pedidos atenderam à meta:
CASE WHEN Qty Sold >= Sales target parameter THEN 1 ELSE 0 END
Retornar um campo ou valor diferente dependendo de um valor de parâmetro
O primeiro exemplo retorna uma dimensão com base no valor do parâmetro selecionado. Você pode usar essa técnica para permitir que os usuários mudem a dimensão de detalhamento usada por um gráfico.
O segundo exemplo mostra como retornar uma métrica diferente com base em um valor de parâmetro.
CASE WHEN Breakdown = "Product Category" THEN Product Category WHEN Breakdown = "Store" THEN Store END
## Observação: você também pode escrever isso usando a sintaxe CASE simples:
CASE Breakdown WHEN "Product Category" THEN Product Category WHEN "Store" THEN Store END
CASE WHEN Show Adjusted Cost = TRUE THEN Cost + Adjustments ELSE Cost END
Instruções CASE
aninhadas
É possível aninhar instruções CASE
para criar uma lógica de ramificação mais complexa:
CASE WHEN Color = "blue"
ELSE
"NOT A HAT"
END