CASE (Searched)
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.
Consulte também: IF.
Exemplo de uso
CASE é normalmente usado 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áusulasWHENavaliamconditione retornam "true" se a condição especificada for atendida ou "false" se não for.result: um campo ou uma expressão de qualquer tipo. Cada cláusulaWHENprecisa ter uma cláusulaTHENcorrespondente, que especifica os resultados se esseWHEN conditionfor verdadeiro. Se houver várias cláusulasWHEN, a instruçãoCASEretornará oresultda primeiraconditionverdadeira.else_result(opcional): um campo ou uma expressão de qualquer tipo. A cláusulaELSEelse_resultespecifica um resultado padrão para a instruçãoCASE. Essa cláusula será retornada se nenhuma das cláusulasWHENfor verdadeira. Se uma instruçãoCASEnão tiver uma cláusulaELSEe nenhuma das cláusulasWHENfor verdadeira, a instruçãoCASEvai retornarNULL.
Uma instrução CASE pode ter apenas uma cláusula ELSE.
Como a expressão CASE pesquisada funciona
Uma instrução CASE pesquisada começa com a palavra-chave CASE e termina com a palavra-chave 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áusulasWHENem uma única instruçãoCASE.THEN: o resultado que será retornado se a condição da cláusulaWHENfor verdadeira. É preciso ter uma cláusulaTHENpara cada cláusulaWHENna instruçãoCASE.ELSE: opcional. Se nenhuma das condições da cláusulaWHENfor verdadeira,CASEretornará o valor na cláusulaELSEouNULLse nenhuma cláusulaELSEfor especificada.
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, NULL será retornado.
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
Classificar os valores de dimensão de data em intervalos discretos
Por exemplo, é possível separar um ano em semestres com base em datas específicas:
CASE
WHEN Date >= DATE(2018, 9, 23) and Date < DATE(2018, 12, 13) THEN "Fall Semester 2018"
WHEN Date >= DATE(2018, 1, 3) and Date < DATE(2019, 3, 21) THEN "Winter Semester 2019"
WHEN Date >= DATE(2019, 3, 27) and Date < DATE(2019, 6, 12) THEN "Spring Semester 2019"
ELSE "Uncategorized"
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