CASE (pesquisada)

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 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áusulas WHEN avaliam condition 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áusula WHEN precisa ter uma cláusula THEN correspondente, que especifica os resultados se WHEN condition for verdadeiro. Se houver várias cláusulas WHEN, a instrução CASE vai retornar o result para a primeira condition verdadeira.

  • else_result (opcional): um campo ou uma expressão de qualquer tipo. A cláusula else_result ELSE especifica um resultado padrão para a instrução CASE. Essa cláusula será retornada se nenhuma das cláusulas WHEN for verdadeira. Se uma instrução CASE não tiver uma cláusula ELSE e nenhuma das cláusulas WHEN for verdadeira, a instrução CASE vai retornar NULL.

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áusulas WHEN em uma única instrução CASE.
  • THEN: o resultado que será retornado se a condição da cláusula WHEN for verdadeira. É preciso ter uma cláusula THEN para cada cláusula WHEN na instrução CASE.
  • ELSE: opcional. Se nenhuma das condições da cláusula WHEN for verdadeira, CASE vai retornar o valor na cláusula ELSE ou NULL se nenhuma cláusula ELSE for especificada.

CASE avalia cada cláusula WHEN sucessiva e retorna o primeiro resultado em que 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

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