CASE (Searched)
CASE
statements evaluate one or more conditions and return a result when the first condition is met, or a default result if none of the conditions are met.
See also: IF .
Sample usage
A common use for CASE
is to create new categories or groupings of data. For example, to group selected country values into a Sales Region dimension, you might create a CASE
statement like this:
CASE
WHEN Country IN ("USA","Canada","Mexico") THEN "North America"
WHEN Country IN ("England","France") THEN "Europe"
ELSE "Other"
END
Syntax
CASE WHEN condition THEN result [WHEN condition THEN result ] [...] [ELSE else_result ] END
Parameters
-
condition- A logical field or expression.WHENclauses evaluateconditionand return true if the specified condition is met, or false if the condition isn't met. -
result- A field or expression of any type. EachWHENclause must have a matchingTHENclause, which specifies the results if thatWHEN conditionis true. If there are multipleWHENclauses, theCASEstatement returns theresultfor the first truecondition. -
else_result(optional) - A field or expression of any type. TheELSEelse_resultclause specifies a default result for theCASEstatement. This clause is returned if none of theWHENclauses are true. If aCASEstatement has noELSEclause, and none of theWHENclauses are true, theCASEstatement returnsNULL.
A CASE
statement can have only one ELSE
clause.
How searched CASE
works
A searched CASE
statement begins with the CASE
keyword and ends with the END
keyword. In between, you'll have a number of sections or clauses:
-
WHEN: A condition that you want to evaluate. You can have multipleWHENclauses in a singleCASEstatement. -
THEN: The result to return if theWHENclause's condition is true. You must have oneTHENclause for eachWHENclause in yourCASEstatement. -
ELSE: Optional. If none of theWHENclause conditions are true,CASEreturns the value in theELSEclause, orNULLif noELSEclause is specified.
CASE
evaluates each successive WHEN
clause and returns the first result where the condition is true. Any remaining WHEN
clauses and the ELSE
result are not evaluated. If all WHEN
conditions are false or NULL
, CASE
returns the ELSE
result, or if no ELSE
clause is present, returns NULL
.
Examples
Check for inequality
CASE WHEN Medium != "cpc" THEN "free" ELSE "paid" END
Classify numeric dimension values into discrete buckets
For example, you can separate orders into "Small", "Medium", or "Large" based on order amount:
CASE
WHEN Amount < 20 THEN "Small"
WHEN Amount >= 20 and Amount < 100 THEN "Medium"
WHEN Amount >= 100 THEN "Large"
END
Classify date dimension values into discrete buckets
For example, you can separate a year into semesters based on specific dates:
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
Evaluate a logical AND condition
CASE
WHEN Country ISO Code = "US" AND Medium = "cpc"
THEN "US - Paid"
ELSE "other"
END
Evaluate a logical AND/OR condition
CASE
WHEN REGEXP_MATCH(Video Title, ".*Google Analytics*")
AND is_livestream = TRUE
OR Video Length > 600
THEN "GA Livestream or long video"
END
Return a different field or value depending on a parameter value
Example 1: Return a dimension based on the parameter value selected. You can use this technique to let users switch the breakdown dimension used by a chart.
CASE
WHEN Breakdown = "Product Category" THEN Product Category
WHEN Breakdown = "Store" THEN Store
END
You could also write this using simple CASE syntax :
CASE Breakdown
WHEN "Product Category" THEN Product Category
WHEN "Store" THEN Store
END
Example 2: Return a different metric based on a parameter value.
CASE WHEN Show Adjusted Cost = TRUE THEN Cost + Adjustments ELSE Cost END
Nested CASE
statements
You can nest CASE
statements to create more complex branching logic:
CASE WHEN REGEXP_CONTAINS(SKU, "Hats") THEN
CASE WHEN Color = "blue"
THEN "BLUE HAT" ELSE "JUST A HAT"
END
ELSE "NOT A HAT"
END

