CASE (Searched)
Les instructions CASE évaluent une ou plusieurs conditions et renvoient un résultat lorsque la première condition est remplie, ou un résultat par défaut si aucune des conditions n'est remplie.
Voir aussi : IF.
Exemple d'utilisation
L'expression CASE sert généralement à créer des catégories ou des regroupements de données. Par exemple, pour regrouper certaines valeurs de pays dans une dimension Région de vente, vous pourriez créer une instruction CASE de ce type :
CASE
WHEN Country IN ("USA","Canada","Mexico") THEN "North America"
WHEN Country IN ("England","France") THEN "Europe"
ELSE "Other"
END
Syntaxe
CASE
WHEN condition THEN result
[WHEN condition THEN result]
[...]
[ELSE else_result]
END
Paramètres
condition: champ ou expression logique. Les clausesWHENévaluentconditionet renvoient la valeur "true" si la condition spécifiée est remplie, ou "false" si elle ne l'est pas.result: champ ou expression de n'importe quel type. Chaque clauseWHENdoit contenir une clauseTHENcorrespondante, qui indique les résultats si laWHEN conditionest "true". En présence de plusieurs clausesWHEN, l'instructionCASErenvoieresultpour la premièrecondition"true".else_result(facultatif) : champ ou expression de n'importe quel type. La clauseelse_resultdeELSEspécifie un résultat par défaut pour l'instructionCASE. Cette clause est renvoyée si aucune des clausesWHENn'est "true". Si une instructionCASEne comporte aucune clauseELSEet qu'aucune des clausesWHENn'est "true", l'instructionCASErenvoie la valeurNULL.
Une instruction CASE ne peut contenir qu'une seule clause ELSE.
Fonctionnement de CASE élaboré
Une instruction CASE élaborée commence par le mot clé CASE et se termine par le mot clé END. Entre les deux se trouvent un certain nombre de sections ou clauses :
WHEN: condition que vous souhaitez évaluer. Une même instructionCASEpeut avoir plusieurs clausesWHEN.THEN: résultat à renvoyer si la condition de la clauseWHENest "true". Une instructionCASEdoit contenir une clauseTHENpour chaque clauseWHEN.ELSE: facultatif. Si aucune des conditions de la clauseWHENn'est "true",CASErenvoie la valeur de la clauseELSEouNULLsi aucune clauseELSEn'est spécifiée.
CASE évalue successivement chaque clause WHEN et renvoie le premier résultat pour lequel la condition est "true". Les clauses WHEN restantes et le résultat ELSE ne sont alors pas évalués. Si toutes les conditions WHEN sont fausses ou NULL, CASE renvoie le résultat ELSE. Si aucune clause ELSE n'est présente, NULL est renvoyé.
Exemples
Vérifier une inégalité
CASE WHEN Medium != "cpc" THEN "free" ELSE "paid" END
Classifier des valeurs de dimension numérique au sein de buckets distincts
Par exemple, vous pouvez séparer des commandes selon trois tailles ("Petite", "Moyenne" et "Grande") basées sur le montant des commandes :
CASE
WHEN Amount < 20 THEN "Small"
WHEN Amount >= 20 and Amount < 100 THEN "Medium"
WHEN Amount >= 100 THEN "Large"
END
Classifier des valeurs de dimension de date au sein de buckets distincts
Par exemple, vous pouvez diviser une année en semestres en fonction de dates spécifiques :
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
Évaluer une condition AND logique
CASE
WHEN Country ISO Code = "US" AND Medium = "cpc"
THEN "US - Paid"
ELSE "other"
END
Évaluer une condition AND/OR logique
CASE
WHEN REGEXP_MATCH(Video Title, ".*Google Analytics*")
AND is_livestream = TRUE
OR Video Length > 600
THEN "GA Livestream or long video"
END
Renvoyer un autre champ ou une autre valeur en fonction d'une valeur de paramètre
Exemple 1 : renvoyer une dimension basée sur la valeur de paramètre sélectionnée. Avec cette approche, les utilisateurs peuvent passer d'une dimension de répartition à un graphique.
CASE
WHEN Breakdown = "Product Category" THEN Product Category
WHEN Breakdown = "Store" THEN Store
END
Vous pouvez également utiliser la syntaxe CASE simple :
CASE Breakdown
WHEN "Product Category" THEN Product Category
WHEN "Store" THEN Store
END
Exemple 2 : renvoyer une autre métrique basée sur une valeur de paramètre.
CASE WHEN Show Adjusted Cost = TRUE THEN Cost + Adjustments ELSE Cost END
Instructions CASE imbriquées
Vous pouvez imbriquer des instructions CASE pour créer une logique d'embranchement plus complexe :
CASE WHEN REGEXP_CONTAINS(SKU, "Hats") THEN
CASE WHEN Color = "blue"
THEN "BLUE HAT" ELSE "JUST A HAT"
END
ELSE "NOT A HAT"
END