CASE 文では、条件ロジックを使って計算フィールドの値が決定されます。
CASE は一般的に、データの新しいカテゴリやグループを作成する場合に使用されます。たとえば、指定の国の値を [営業地域] ディメンションにまとめるには、次のような CASE 文を作成します。
CASE
WHEN 国 IN ("アメリカ","カナダ","メキシコ") THEN "北アメリカ"
WHEN 国 IN ("イギリス","フランス") THEN "ヨーロッパ"
ELSE "その他"
END
CASE 文を作成する
データソース:
- データソースを編集します。
- 右上の [+ フィールドを追加] をクリックします。
レポートまたは原因分析:
- レポートまたは原因分析を編集します。
- グラフを選択します。
- 右側のプロパティ パネルで、[+ ディメンションを追加] または [+ 指標を追加] をクリックします。
- [+ フィールドを作成] をクリックします。
次の手順:
- 新しいフィールドの名前を入力します。
- [計算式] ボックスに CASE 文を入力します。
データソースで [式の書式を設定] をクリックすると、読みやすいように数式が自動的にレイアウトされます。
- [保存] または [適用] をクリックします。
CASE の構文
CASE
WHEN 条件 THEN 結果
[WHEN 条件 THEN 結果]
[...]
[ELSE 結果]
END
CASE 文は CASE キーワードで始まり、END キーワードで終わります。その間には、さまざまなセクションや「節」があります。
- WHEN: 判定の対象となる論理条件。1 つの CASE 文に複数の WHEN 節を含めることができます。
- THEN: WHEN 節の条件が true の場合に返される結果。CASE 文内の WHEN 節ごとに 1 つの THEN 節を指定する必要があります。
- ELSE: 省略可。WHEN 節のどの条件も true にならなかった場合、CASE は ELSE 節の値を返します。ELSE 節が指定されていない場合は、
NULL
を返します。
WHEN 条件
WHEN 条件は与えられたデータを評価し、指定された条件が満たされていれば true、満たされていなければ false を返します。有効な WHEN 条件では次のようなことが可能です。
- サポートされている演算子を使って、ディメンションまたは指標をリテラル値と比較する
- ディメンションまたは指標について、正規表現との一致判定を行う
- ディメンションまたは指標が IS NULL(null である)かどうか判定する
- ディメンションまたは指標の値が、指定された値のリストに含まれるかどうか判定する
- ディメンションまたは指標の値が、指定された値のリストに含まれないかどうか判定する
WHEN 条件の制約
WHEN は、リテラル値またはサポートされている関数と比較する必要があります。
ディメンション同士、または指標同士を比較することはできません。以下の例では、最初の 2 つの文は有効な WHEN 条件ですが、最後の 2 つの文は有効ではありません。
CASE WHEN 国 = "イギリス" ...
// 有効な数式CASE WHEN コンバージョン数 > 100 ...
// 有効な数式CASE WHEN ディメンション1 = ディメンション2 ...
// 無効な数式CASE WHEN 指標1 > 指標2 ...
// 無効な数式
サポートされる関数
WHEN 条件には、サポートされている比較関数を 1 つ以上含めることができます。詳しくは、下記をご覧ください。
WHEN 条件にディメンションと指標を混在させることはできません。
たとえば次のような文は認められません。
CASE WHEN 国 = "イギリス" AND コンバージョン数 > 100 THEN ...
// 無効な数式
WHEN 条件にはディメンションと指標のいずれかが含まれている必要があります。
WHEN 条件にリテラルのみの条件を指定することはできません。たとえば次のような文は認められません。
CASE WHEN 1 THEN ...
// 無効な数式
WHEN 条件では計算を実行することはできません。
WHEN 条件の中で数学的な計算を行ったり、計算フィールドの関数を使ったりすることはできません。たとえば次のような文は認められません。
CASE WHEN 指標1 + 指標2 > 4 THEN ...
// 無効な数式
この制限を避けるには、まず必要な数式を含む計算フィールドを作成し、そのフィールドを CASE 文で使用します。たとえば次のようにします。
1)計算フィールド「マイフィールド」を作成し、次の数式を指定します。
指標1 + 指標2
2)「マイフィールド」を CASE で使用します。
CASE WHEN マイフィールド > 4 THEN ...
THEN 結果
各 WHEN 条件には、対応する THEN 節が必要です。THEN 節では、条件が満たされた場合に返す結果を指定します。WHEN 条件が複数ある場合、CASE 文では最初に true になった条件の結果が返されます。
THEN 節では次の値が返されます。
- ディメンション
- 指標
- 計算フィールド
- リテラル値
NULL
THEN 結果の制約
THEN 節では式や数式を返すことはできません。
たとえば次のような文は認められません。
CASE WHEN 国 = "イギリス" THEN 指標1 + 指標2 END
// 無効な数式
1 つの THEN 節が返し得る結果は、すべて同じタイプの値でなければなりません。
たとえば 1 つ目の THEN 節で返す値がテキストであれば、その後の他の THEN 節も、末尾に追加できる ELSE 節も、テキストを返すようになっていなければなりません。
ELSE 結果
オプションの ELSE 節では、デフォルトの結果が指定されます。WHEN 節の条件がどれも満たされなかった場合、この値が返されます。CASE 文に ELSE 節が含まれず、WHEN 節のどの条件も満たされなかった場合、文では NULL
が返されます。1 つの CASE 文に指定できる ELSE 節は 1 つだけです。
ELSE 節では次の値が返されます。
- ディメンション
- 指標
- 計算フィールド
- リテラル値
NULL
NULL の詳細
NULL
は空の文字列("")とは異なります。演算で空の文字列を使用しようとすると通常はエラーが発生しますが、NULL を使うと null 値が返されます。例:
1+NULL = NULL
1*NULL = NULL
1/NULL = NULL
etc.
一方、値を空の文字列と連結することはできますが、値を NULL と連結した結果は null 値になります。
CONCAT("A", "", "B") = "AB"
CONCAT("A", NULL, "B") = null
比較演算子
WHEN 節内では次の演算子を使用できます。
- =
- !=
- >
- >=
- <
- <=
比較演算子によって比較するオペランド同士は、データ型(テキスト、数値、ブール値)が同じでなければなりません。少なくとも一方のオペランドはフィールドにします。もう一方には、テキスト値、数値、ブール値を指定できます。
例
CASE WHEN メディア != "cpc" THEN "無料" ELSE "有料" END
CASE WHEN ページ滞在時間 <= 90 THEN 1 ELSE 0 END
論理演算子
WHEN 条件には AND 条件や OR 条件を追加できます。条件のグループ化や優先順位付けには丸かっこを使用します。
例
CASE WHEN 国 ISO コード = "US" AND メディア = "cpc" THEN "US - 有料" ELSE "その他" END
CASE WHEN REGEXP_MATCH(動画タイトル, ".*Google アナリティクス*") AND is_livestream = 正 OR 動画の長さ > 120 THEN "GA LIVE または LONG" END
サポートされる関数
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)
パラメータ
フィールド
- 判定の対象となるディメンションまたは指標です。
値1,値2,...値N
- 照合する値のリストです。
例
フィールドの内容 | フィールド タイプ | 数式 | 結果 |
---|---|---|---|
Bob | テキスト | フィールド IN ('Bob', 'Alice') | true |
Alice | テキスト | フィールド IN ('Bob', 'Alice') | true |
Jorge | テキスト | フィールド IN ('Bob', 'Alice') | false |
20 | 数値 | フィールド IN (10, 20) | false |
10 | 数値 | フィールド IN (10, 20) | false |
100 | 数値 | フィールド 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 文専用ではなく、他の種類の計算フィールドでも使用できます。