CASE (Searched)
Las instrucciones CASE evalúan una o más condiciones y devuelven un resultado cuando se cumple la primera condición o un resultado predeterminado si no se cumple ninguna de las condiciones.
Consulta también IF.
Ejemplo de uso
Un uso común de CASE es crear categorías o agrupaciones de datos nuevos. Por ejemplo, para agrupar los valores de países seleccionados en una dimensión Región de ventas, puedes crear una instrucción CASE como esta:
CASE
WHEN Country IN ("USA","Canada","Mexico") THEN "North America"
WHEN Country IN ("England","France") THEN "Europe"
ELSE "Other"
END
Sintaxis
CASE
WHEN condition THEN result
[WHEN condition THEN result]
[...]
[ELSE else_result]
END
Parámetros
condition: Es un campo o una expresión lógica. Las cláusulasWHENevalúanconditiony muestran verdadero si se cumple la condición especificada o falso si no se cumple.result: Es un campo o una expresión de cualquier tipo. Cada cláusulaWHENdebe tener una cláusulaTHENcoincidente, que especifica los resultados si eseWHEN conditiones verdadero. Si hay varias cláusulasWHEN, la instrucciónCASEdevuelve elresultpara el primerconditionverdadero.else_result(opcional): Es un campo o una expresión de cualquier tipo. La cláusulaELSEelse_resultespecifica un resultado predeterminado para la instrucciónCASE. Esta cláusula se devuelve si ninguna de las cláusulasWHENes verdadera. Si una instrucciónCASEno tiene una cláusulaELSEy ninguna de las cláusulasWHENes verdadera, la instrucciónCASEdevuelveNULL.
Una instrucción CASE solo puede tener una cláusula ELSE.
Cómo funciona la búsqueda de CASE
Una sentencia CASE buscada comienza con la palabra clave CASE y termina con la palabra clave END. Entre ellas, tendrás varias secciones o cláusulas:
WHEN: Es una condición que deseas evaluar. Puedes tener varias cláusulasWHENen una sola instrucciónCASE.THEN: Es el resultado que se devolverá si la condición de la cláusulaWHENes verdadera. Debes tener una cláusulaTHENpara cada cláusulaWHENen tu instrucciónCASE.ELSE: Opcional Si ninguna de las condiciones de la cláusulaWHENes verdadera,CASEdevuelve el valor de la cláusulaELSEoNULLsi no se especifica ninguna cláusulaELSE.
CASE evalúa cada cláusula WHEN sucesiva y muestra el primer resultado en el que la condición sea verdadera. Las cláusulas WHEN restantes y el resultado de ELSE no se evalúan. Si todas las condiciones WHEN son falsas o NULL, CASE devuelve el resultado ELSE o, si no hay ninguna cláusula ELSE, devuelve NULL.
Ejemplos
Verifica la desigualdad
CASE WHEN Medium != "cpc" THEN "free" ELSE "paid" END
Clasifica los valores de la dimensión numérica en discretizaciones
Por ejemplo, puedes separar los pedidos en "Pequeños", "Medianos" o "Grandes" según el importe del pedido:
CASE
WHEN Amount < 20 THEN "Small"
WHEN Amount >= 20 and Amount < 100 THEN "Medium"
WHEN Amount >= 100 THEN "Large"
END
Clasifica los valores de la dimensión de fecha en buckets discretos
Por ejemplo, puedes separar un año en semestres según fechas 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
Evalúa una condición AND lógica
CASE
WHEN Country ISO Code = "US" AND Medium = "cpc"
THEN "US - Paid"
ELSE "other"
END
Evalúa una condición 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
Devuelve un campo o valor diferente según el valor de un parámetro
Ejemplo 1: Devuelve una dimensión según el valor del parámetro seleccionado. Puedes usar esta técnica para permitir que los usuarios cambien la dimensión de desglose que usa un gráfico.
CASE
WHEN Breakdown = "Product Category" THEN Product Category
WHEN Breakdown = "Store" THEN Store
END
También podrías escribirlo con la sintaxis CASE simple:
CASE Breakdown
WHEN "Product Category" THEN Product Category
WHEN "Store" THEN Store
END
Ejemplo 2: Devolver una métrica diferente según el valor de un parámetro
CASE WHEN Show Adjusted Cost = TRUE THEN Cost + Adjustments ELSE Cost END
Sentencias CASE anidadas
Puedes anidar instrucciones CASE para crear una lógica de ramificación más compleja:
CASE WHEN REGEXP_CONTAINS(SKU, "Hats") THEN
CASE WHEN Color = "blue"
THEN "BLUE HAT" ELSE "JUST A HAT"
END
ELSE "NOT A HAT"
END