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(省略可)- 任意の型のフィールドまたは式。ELSE else_result 句は、CASE ステートメントのデフォルトの結果を指定します。この句は、WHEN 句のいずれも true でない場合に返されます。CASE ステートメントに ELSE 句がなく、WHEN 句のいずれも true でない場合、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