CASE について

条件式に対してディメンションや指標を返します。

CASE 文では、条件ロジックによって値が決まる新しいフィールドを作成できます。CASE が最もよく使用されるのは、データの新しいグループやカテゴリを作する場合です。たとえば、指定の国の値を [営業地域] ディメンションにまとめるには、次のような CASE 文を作成します。

CASE 
    WHEN 国 IN ("アメリカ","カナダ","メキシコ")THEN "北アメリカ" 
    WHEN 国 IN ("イギリス","フランス")THEN "ヨーロッパ" 
    ELSE "その他" 
END

CASE 文を作成するにはデータソースを編集する権限が必要です。

この記事の内容:

CASE 文を作成する

CASE 文の作成方法:

  1. データソースを編集します。
  2. + をクリックして新しい計算フィールドを作成します。
  3. 新しいフィールドの名前を入力します。
  4. [数式] 欄に CASE 文を入力します。

CASE の構文

CASE
    WHEN 条件 THEN 結果
    WHEN 条件 THEN 結果
    WHEN 条件 THEN 結果
    ... 
    ELSE 結果 
END

パラメータ:

  1. 条件—入力値を評価してブール値(true または false)を返す式です。条件にはディメンションまたは指標を含めることができますが、両方を含めることはできません。
  2. 結果—返す値です。ディメンション、指標、またはリテラル値を指定できます。
  3. ELSE 結果—(任意)他の条件がどれも満たされなかった場合に返すデフォルト値です。

CASE 文は、論理条件(WHEN 節)とその条件が true だった場合に返す結果(THEN 節)の組み合わせを 1 つまたは複数まとめたものです。どの条件も true にならなかった場合、CASE 文は ELSE 節で指定された値を返します。

WHEN 条件

WHEN 条件は与えられたデータを評価し、指定の条件が満たされていれば true、満たされていなければ false を返します。有効な WHEN 条件では次のようなことが可能です。

  • サポートされている演算子を使って、ディメンションまたは指標をリテラル値と比較する
  • ディメンションまたは指標について、正規表現との一致判定を行う
  • ディメンションまたは指標が IS NULL(null である)かどうか判定する
  • ディメンションまたは指標の値が、指定された値のリストに含まれるかどうか判定する
  • ディメンションまたは指標の値が、指定された値のリストに含まれないかどうか判定する

留意事項

WHEN 条件内にディメンションと指標を混在させることはできません。たとえば次のような文は認められません

CASE
    WHEN 好きな色 = "赤" AND 秘密の数字 = 42 THEN ... // エラー!

ディメンションの値に応じて指標を返したい場合、条件付き計算フィールドの使用をご検討ください。 この場合の基本的なテクニックは、計算フィールドの中に CASE 文を埋め込むことです。たとえば次のようにします。

SUM (CASE WHEN 好きな色 = "赤" THEN 1 ELSE 0 END) // 赤が好きな人を数える

条件付き計算フィールドの詳細

WHEN 条件にはディメンションと指標のいずれかが含まれている必要があります。リテラルのみの条件を指定することはできません。たとえば次のような文は認められません

CASE
    WHEN 1 THEN ... // エラー!

WHEN 条件の中で数学的な計算を行ったり、計算フィールドの関数を使ったりすることはできません。たとえば次のような文は認められません

CASE
    WHEN 指標1 + 指標2 > 4 THEN ... // エラー発生!

この問題を避けるには、まず必要な数式を含む計算フィールドを作成し、そのフィールドを CASE 文で使用します。たとえば次のようにします。

1)計算フィールド「マイ フィールド」を作成し、次の数式を指定します。

指標1 + 指標2

2)「マイ フィールド」を CASE 文で使用します。

CASE
    WHEN マイ フィールド > 4 THEN ...

THEN 結果

各 WHEN 条件には、対応する THEN 節が必要です。THEN 節では、条件が満たされた場合に返す値を指定します。WHEN 条件が複数ある場合、最初に true になった条件の結果が返されます。

1 つの CASE 文が返し得る結果は、すべて同じタイプの値でなければなりません。たとえば 1 つ目の THEN 節で返す値がテキストであれば、その後の他の THEN 節も、末尾に追加できる ELSE 節も、テキストを返すようになっていなければなりません。

ELSE 結果

ELSE 節ではデフォルト値を指定できます。WHEN 節の条件がどれも満たされなかった場合、この値が返されます。1 つの CASE 文に指定できる ELSE 節は 1 つだけです。

比較演算子

WHEN 節内では次の演算子を使用できます。

  • =
  • !=
  • >
  • >=
  • <
  • <=

比較演算子によって比較するオペランド同士は、データ型(テキスト、数値、ブール値)が同じでなければなりません。少なくとも一方のオペランドはフィールドにします。もう一方には、テキスト値、数値、ブール値を指定できます。

CASE WHEN 名前 = 'トニー' THEN '家族' ELSE '友人' END

CASE WHEN 年齢 > 20 THEN "成人" ELSE "未成年" END

SUM (CASE WHEN 持続時間<=90 THEN 1 ELSE 0 END)

論理演算子

WHEN 条件には AND 条件や OR 条件を追加できます。条件のグループ化や優先順位付けには丸かっこを使用します。

CASE WHEN (ビールの種類 = "IPA" OR IBU > 40) THEN "苦すぎ" ELSE "おいしい!" END

CASE 
   WHEN (REGEXP_MATCH(ディメンション1, ".*foo") 
        AND ディメンション2 = "bar" ) 
        OR ディメンション3 IS NULL 
   THEN "Yes!" 
   ELSE "Huh?" 
END

CASE 文で使用できる関数

WHEN 条件では次の関数を使用できます。

CASE で他の関数を使用できない理由

WHEN 条件はブール式にする必要があります。REGEXP_MATCH を除き、計算フィールドの関数が返す結果は非ブール値(数値、テキスト、日付、ジオコードなど)です。

IS NULL

入力フィールドが空または null の場合に true を返します。

この関数は CASE 文でのみ使用できます。単体の計算フィールドで IS NULL を使用することはできません。

構文

フィールド IS NULL

パラメータ:

フィールド—評価するディメンションまたは指標です。

フィールドの内容 数式 結果
a フィールド IS NULL false
  フィールド IS NULL true

IN

入力フィールドの内容が指定された値のリストに含まれる場合に true を返します。フィールドの内容とリストの値は、データ型が共通でなければなりません。IN は完全一致で、大文字と小文字も区別されます。部分一致を使用したい場合や大文字と小文字を区別したくない場合は、REGEXP_MATCH を使用します。

この関数は CASE 文でのみ使用できます。単体の計算フィールドで IN を使用することはできません。

構文

フィールド IN (値1, 値2, ... 値N)

パラメータ:

フィールド—評価するディメンションまたは指標です。

フィールドの内容 フィールド タイプ 数式 結果
Bob テキスト フィールド IN ('Bob', 'Alice') true
Alice テキスト フィールド IN ('Bob', 'Alice') true
Jorge テキスト フィールド NOT IN ('Bob', 'Alice') false
20 数値 フィールド NOT IN (10, 20) false
10 数値 フィールド NOT IN (10, 20) false
100 数値 フィールド NOT IN (10, 20) true
Bob テキスト フィールド IN ('Bob', 20) エラー(フィールドがテキスト型なのに対して「20」は数値のため。エラーを避けるには、引用符で囲んで「"20"」にします)

NOT IN

入力フィールドの内容が指定された値のリストに含まれない場合に true を返します。フィールドの内容とリストの値は、データ型が共通でなければなりません。IN は完全一致で、大文字と小文字も区別されます。部分一致を使用したい場合や大文字と小文字を区別したくない場合は、REGEXP_MATCH を使用します。

この関数は CASE 文でのみ使用できます。単体の計算フィールドで NOT IN を使用することはできません。

構文

フィールド NOT IN (値1, 値2, ...値N)

パラメータ:

フィールド—評価するディメンションまたは指標です。
値1,値2,...値N—照合する値のリストです。

フィールドの内容 フィールド タイプ 数式 結果
Jorge テキスト フィールド NOT IN ('Bob', 'Alice') true
Alice テキスト フィールド NOT IN ('Bob', 'Alicia','Hiroshi') true
Bob テキスト フィールド NOT IN ('Bob', 'Alice') false
20 数値 フィールド NOT IN (10, 20) false
10 数値 フィールド NOT IN (10, 20) false
100 数値 フィールド NOT IN (10, 20) true
Bob テキスト フィールド NOT IN ('Bob', 20) エラー*

* フィールドがテキスト型なのに対して「20」は数値のため。引用符で囲んで「"20"」にすればエラーになりません。

REGEXP_MATCH

入力フィールドが正規表現と一致する場合に true を返します。この関数は CASE 文専用ではなく、他の種類の計算フィールドでも使用できます。

REGEXP_MATCH の詳細

この記事は役に立ちましたか?
改善できる点がありましたらお聞かせください。