CASE (Searched)
Le istruzioni CASE valutano una o più condizioni e restituiscono un risultato quando la prima condizione è soddisfatta o un risultato predefinito se nessuna delle condizioni è soddisfatta.
Vedi anche: IF.
Esempi di utilizzo
Un uso comune di CASE è la creazione di nuove categorie o raggruppamenti di dati. Ad esempio, per raggruppare valori dei paesi scelti in una dimensione Zona di vendita, puoi creare un'istruzione CASE di questo tipo:
CASE
WHEN Country IN ("USA","Canada","Mexico") THEN "North America"
WHEN Country IN ("England","France") THEN "Europe"
ELSE "Other"
END
Sintassi
CASE
WHEN condition THEN result
[WHEN condition THEN result]
[...]
[ELSE else_result]
END
Parametri
condition: un'espressione o un campo logico. Le clausoleWHENvalutanoconditione restituiscono true se la condizione specificata è soddisfatta o false se la condizione non è soddisfatta.result: un campo o un'espressione di qualsiasi tipo. A ciascuna clausolaWHENdeve corrispondere una clausolaTHEN, che specifica i risultati se la condizioneWHEN conditionè true. Se sono presenti più clausoleWHEN, l'istruzioneCASErestituisce ilresultper la primaconditionvera.else_result(facoltativo): un campo o un'espressione di qualsiasi tipo. La clausolaELSEelse_resultspecifica un risultato predefinito per l'istruzioneCASE. Questa clausola viene restituita nel caso in cui nessuna delle clausoleWHENsia true. Se un'istruzioneCASEnon ha clausoleELSEe nessuna delle clausoleWHENè true, l'istruzioneCASErestituisceNULL.
Un'istruzione CASE può avere una sola clausola ELSE.
Come funziona CASE con ricerca
Un'istruzione CASE inizia con la parola chiave CASE e termina con la parola chiave END. In mezzo ci saranno varie sezioni o clausole:
WHEN: una condizione da valutare. Puoi avere più clausoleWHENin una singola istruzioneCASE.THEN: il risultato da restituire se la condizione della clausolaWHENè true. Nell'istruzioneCASE, devi avere una clausolaTHENper ogni clausolaWHEN.ELSE: (Facoltativo) Se nessuna delle condizioni della clausolaWHENè true,CASErestituisce il valore nella clausolaELSEoNULLse non viene specificata alcuna clausolaELSE.
CASE valuta ogni clausola WHEN successiva e restituisce il primo risultato in cui la condizione è true. Eventuali clausole WHEN rimanenti e il risultato ELSE non vengono valutati. Se tutte le condizioni WHEN sono false o NULL, CASE restituisce il risultato ELSE. Se non è presente alcuna clausola ELSE, restituisce NULL.
Esempi
Verificare la disuguaglianza
CASE WHEN Medium != "cpc" THEN "free" ELSE "paid" END
Classificare i valori delle dimensioni numeriche in bucket discreti
Ad esempio, puoi separare gli ordini in "Piccoli", "Medi" e "Grandi" in base all'importo:
CASE
WHEN Amount < 20 THEN "Small"
WHEN Amount >= 20 and Amount < 100 THEN "Medium"
WHEN Amount >= 100 THEN "Large"
END
Classificare i valori delle dimensioni data in bucket discreti
Ad esempio, puoi dividere un anno in semestri in base a date specifiche:
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
Valutare una condizione AND logica
CASE
WHEN Country ISO Code = "US" AND Medium = "cpc"
THEN "US - Paid"
ELSE "other"
END
Valutare una condizione logica 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
Restituire un campo o un valore diverso a seconda del valore parametro
Esempio 1: restituire una dimensione in base al valore parametro selezionato. Puoi utilizzare questa tecnica per consentire agli utenti di cambiare la dimensione di suddivisione utilizzata da un grafico.
CASE
WHEN Breakdown = "Product Category" THEN Product Category
WHEN Breakdown = "Store" THEN Store
END
Puoi scrivere questo anche utilizzando la sintassi CASE semplice:
CASE Breakdown
WHEN "Product Category" THEN Product Category
WHEN "Store" THEN Store
END
Esempio 2: restituire una metrica diversa in base a un valore parametro.
CASE WHEN Show Adjusted Cost = TRUE THEN Cost + Adjustments ELSE Cost END
Istruzioni CASE nidificate
Puoi nidificare le istruzioni CASE per creare una logica di diramazione più complessa:
CASE WHEN REGEXP_CONTAINS(SKU, "Hats") THEN
CASE WHEN Color = "blue"
THEN "BLUE HAT" ELSE "JUST A HAT"
END
ELSE "NOT A HAT"
END