CASE (Searched)
CASE ステートメントでは、1 つ以上の条件が評価され、最初の条件が満たされた場合に結果が返されます。いずれの条件も満たされなかった場合は、デフォルトの結果が返されます。
関連情報: IF
使用例
CASE は一般的に、データの新しいカテゴリやグループを作成する場合に使用されます。たとえば、指定の国の値を [営業地域] ディメンションにまとめるには、次のような CASE 文を作成します。
CASE
WHEN Country IN ("USA","Canada","Mexico") THEN "North America"
WHEN Country IN ("England","France") THEN "Europe"
ELSE "Other"
END
構文
CASE
WHEN condition THEN result
[WHEN condition THEN result]
[...]
[ELSE else_result]
END
パラメータ
condition- 論理フィールドまたは式。WHEN句はconditionを評価し、指定された条件が満たされていれば true、満たされていなければ false を返します。result- 任意の型のフィールドまたは式。各WHEN句には、対応するTHEN句が必要です。THEN 句では、WHEN conditionが true である場合に返す結果を指定します。WHEN句が複数ある場合、CASE文では最初に true になったconditionのresultが返されます。else_result(省略可)- 任意の型のフィールドまたは式。ELSEelse_result句は、CASEステートメントのデフォルトの結果を指定します。WHEN句の条件がどれも満たされなかった場合、この句が返されます。CASE文にELSE句が含まれておらず、WHEN句のどの条件も満たされなかった場合、CASE文ではNULLが返されます。
1 つの CASE ステートメントに指定できる ELSE 句は 1 つだけです。
検索 CASE 式の仕組み
検索された CASE ステートメントは CASE キーワードで始まり、END キーワードで終わります。その間に、以下のようなセクションまたは句を指定します。
WHEN: 評価する条件。1 つのCASEステートメントに複数のWHEN句を含めることができます。THEN:WHEN句の条件が true の場合に返される結果。CASE文内のWHEN句ごとに 1 つのTHEN句を指定する必要があります。ELSE: 省略可。WHEN句のどの条件も true にならなかった場合、CASEはELSE句の値を返します。ELSE句が指定されていない場合は、NULLを返します。
CASE は、後に続く各 WHEN 句を評価し、条件が true になる最初の結果を返します。残りの WHEN 句と ELSE 結果は評価されません。すべての WHEN 条件が false または NULL である場合、CASE は ELSE 結果を返します。ELSE 句が存在しない場合は NULL を返します。
例
大小関係を確認する
CASE WHEN Medium != "cpc" THEN "free" ELSE "paid" END
数値ディメンションの値を複数のバケットに分類する
たとえば、注文金額に基づいて注文を「Small」、「Medium」、「Large」に分類することができます。
CASE
WHEN Amount < 20 THEN "Small"
WHEN Amount >= 20 and Amount < 100 THEN "Medium"
WHEN Amount >= 100 THEN "Large"
END
日付ディメンションの値を複数のバケットに分類する
たとえば、特定の日に基づいて 1 年を学期に分割できます。
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
AND 論理条件を評価する
CASE
WHEN Country ISO Code = "US" AND Medium = "cpc"
THEN "US - Paid"
ELSE "other"
END
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
パラメータ値に応じて、異なるフィールドまたは値を返す
例 1: 選択されたパラメータ値に基づいてディメンションが返されます。この手法を使用すると、グラフで使用されている内訳ディメンションをユーザーが切り替えられるようにすることができます。
CASE
WHEN Breakdown = "Product Category" THEN Product Category
WHEN Breakdown = "Store" THEN Store
END
同じことを単純 CASE 式の構文で記述すると、次のようになります。
CASE Breakdown
WHEN "Product Category" THEN Product Category
WHEN "Store" THEN Store
END
例 2: パラメータ値に基づいて異なる指標が返されます。
CASE WHEN Show Adjusted Cost = TRUE THEN Cost + Adjustments ELSE Cost END
ネストされた CASE ステートメント
CASE ステートメントをネストして、複雑な分岐ロジックを作成できます。
CASE WHEN REGEXP_CONTAINS(SKU, "Hats") THEN
CASE WHEN Color = "blue"
THEN "BLUE HAT" ELSE "JUST A HAT"
END
ELSE "NOT A HAT"
END