CASE (élaboré)

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: SI.

Exemple d'utilisation

CASE est généralement utilisé pour 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 clauses WHEN évaluent condition et 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 clause WHEN doit contenir une clause THEN correspondante, qui indique les résultats si la WHEN condition est "true". S'il existe plusieurs clauses WHEN, l'instruction CASE renvoie la result pour la première condition "true".

  • else_result (facultatif) : champ ou expression de n'importe quel type. La clause else_result ELSE spécifie un résultat par défaut pour l'instruction CASE. Cette clause est renvoyée si aucune des clauses WHEN n'est "true". Si une instruction CASE ne comporte aucune clause ELSE et qu'aucune des clauses WHEN n'est vraie, l'instruction CASE renvoie NULL.

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 instruction CASE peut avoir plusieurs clauses WHEN.
  • THEN: résultat à renvoyer si la condition de la clause WHEN est "true". Une instruction CASE doit contenir une clause THEN pour chaque clause WHEN.
  • ELSE : facultatif. Si aucune des conditions de la clause WHEN n'est "true", CASE renvoie la valeur de la clause ELSE ou NULL si aucune clause ELSE n'est spécifiée.

CASE évalue successivement chaque clause WHEN et renvoie le premier résultat pour lequel la condition est vraie. Les clauses WHEN restantes et le résultat ELSE ne sont alors pas évalués. Si toutes les conditions WHEN sont "false" ou NULL, CASE renvoie le résultat ELSE. Si aucune clause ELSE n'est présente, NULL est renvoyé.

Examples

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

Évaluer une condition AND logique

    CASE
        WHEN Country ISO Code = "US" AND Medium = "cpc"
        THEN "US - Paid"
        ELSE "other"
    END

Évaluer une condition AND/OU 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 suivante:

    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