As instruções CASE
avaliam uma ou mais condições e retornam um resultado quando a primeira condição é atendida, ou um resultado padrão se nenhuma das condições for atendida.
Observação: existem duas formas da instrução CASE
: CASE
pesquisada e CASE
simples. As instruções CASE
pesquisadas permitem que você use uma lógica mais sofisticada, enquanto as instruções CASE
simples são mais fáceis de criar.
Consulte também: IF.
Exemplo de uso
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 instrução CASE
como esta:
CASE WHEN Country IN ("USA","Canada","Mexico") THEN "North America" WHEN Country IN ("England","France") THEN "Europe" ELSE "Other" END
Sintaxe
CASE WHEN condition THEN result [WHEN condition THEN result] [...] [ELSE else_result] END
Parâmetros
-
condition
: um campo ou uma expressão lógica. As cláusulasWHEN
avaliam acondição
e retornam "true" se a condição especificada for atendida ou "false" se não for atendida. -
result
: um campo ou uma expressão de qualquer tipo. Cada cláusulaWHEN
precisa ter uma cláusulaTHEN
correspondente que especifica os resultados se acondição WHEN
for verdadeira. Se houver várias cláusulasWHEN
, a instruçãoCASE
retornará oresultado
da primeiracondição
verdadeira. else_result
(opcional): um campo ou uma expressão de qualquer tipo. A cláusulaelse_result
ELSE
especifica um resultado padrão para a instruçãoCASE
. Essa cláusula será retornada se nenhuma das cláusulasWHEN
for verdadeira. Caso uma expressãoCASE
não tenha uma cláusulaELSE
e nenhuma das cláusulasWHEN
seja verdadeira, a instruçãoCASE
retornaráNULL
.
Uma instrução CASE
pode ter apenas uma cláusula ELSE
.
Observação: todas as cláusulas THEN
em uma instrução CASE
precisam retornar o mesmo tipo de dados. Por exemplo, se a primeira cláusula THEN
retornar o tipo de dados Texto, as outras cláusulas THEN
também precisarão retornar esse tipo de dados.
Como a expressão CASE
pesquisada funciona
Uma instruçã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 instruçãoCASE
.THEN
: o resultado que será retornado se a condição da cláusulaWHEN
for verdadeira. É preciso ter uma cláusulaTHEN
para cadaWHEN
na sua instruçãoCASE
.ELSE
: opcional. Se nenhuma das condições da cláusulaWHEN
for verdadeira,CASE
retornará o valor na cláusulaELSE
. Mas se nenhuma cláusulaELSE
for especificada, o resultado seráNULL
.
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
.
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
Retornar um campo ou valor diferente dependendo de um valor de parâmetro
Exemplo 1: retorne 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.
CASE WHEN Breakdown = "Product Category" THEN Product Category WHEN Breakdown = "Store" THEN Store END
Você também pode escrever isso usando a sintaxe CASE simples:
CASE Breakdown WHEN "Product Category" THEN Product Category WHEN "Store" THEN Store END
Exemplo 2: retorne uma métrica diferente com base em um valor de parâmetro.
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 REGEXP_CONTAINS(SKU, "Hats") THEN CASE WHEN Color = "blue" THEN "BLUE HAT" ELSE "JUST A HAT" END ELSE "NOT A HAT" END