第4回では、第3回で説明した独自のディメンション・指標の作成方法の後編として、「CASE文」に特化した説明をします。
CASE文とは
CASE文とは、指定したブール式に基づいて分岐ロジックを実行することができます。イメージとしてEXCELのIF関数のようなものです。こちらはSQLのCASE文と書き方は同じなので、エンジニアの方にとっては馴染み深いですね。
CASE文の構文:
WHEN 条件式 THEN 結果
WHEN 条件式 THEN 結果
WHEN 条件式 THEN 結果
…
ELSE 結果
END
- WHEN 条件式
- THEN 結果
- ELSE 結果
論理値(trueまたはfalse)を返す式を記載します。ディメンションや指標を設定することができます。
例:「ディメンション:キャンペーン名」 = 30、「指標:CV数」 > 1
条件に合致した時(ブール式の結果がtrueの時)に返す値を記述します。ディメンションや指標、数値、文字列を設定することができます。
条件に合致しなかった値(falseの値)を返します。こちらも、ディメンションや指標、数値、文字列を設定することができます。
WHEN 条件式で使える式
上記でも説明している通り、条件式では論理値(trueまたはfalse)を返す式を記載しなければいけません。Google データスタジオでは、以下を使用して論理値を返すことができます。
- 比較演算子、論理演算子
- 正規表現
- IS NULL / IS NOT NULL
- IN / NOT IN
比較演算子、論理演算子を使って論理値を返す
Google データスタジオでは、以下の比較演算子とAND条件やOR条件を使用した論理演算子で論理値を返す式を作成できます。また、丸かっこを使用して条件のグループ化や優先順位をつけることもできます。
比較演算子
- =
- !=
- >
- >=
- <
- <=
例:
WHEN (REGEXP_MATCH(name1, ‘[a-zA-Z].*’) AND name2 = “Alex”)
OR name3 IN (“yuki”,”mai”) THEN “true”
ELSE “false”
END
正規表現を使って論理値を返す
CASE文ではREGEXP_MATCH関数を使用して論理値を返す式を作成することができます。この関数は第一引数に設定したディメンションまたは指標と設定した正規表現が一致した場合は真(true)を返し、一致しない場合は偽(false)を返します。
例:
WHEN REGEXP_MATCH(name, ‘[a-zA-Z].*’) THEN “true”
ELSE “false”
END
条件式は論理値を返す式でなければなりません。そのため、REGEXP_MATCH関数以外は非ブール値(数値、テキスト、日付、ジオコードなど)を返すため、2018年5月時点では、条件式でREGEXP_MATCH関数以外使用することができません。
空文字、NULL判定ができる「IS NULL / IS NOT NULL」
IS NULLはディメンションまたは指標が空文字、NULL(ヌル)の場合に真(true)を返します。
構文:
※フィールドとは、評価するディメンションまたは指標を指します。
NULLって何?という方にNULLについて簡単に説明すると、「値が何もなく、定義されていない状態」のことを表し、空文字や数字の0、スペースとは異なります。
- NULL:
「値が何もなく、定義されていない状態」のことを表し、空文字でもスペースでも0でもありません。 - 空文字:
値が存在しないが、NULLとは違って値は定義されている状態です。 - スペース:
空白ともいいますが、こちらはスペースという値であり、定義されています。 - 0:
数値の「0」という値であり、もちろん値が定義されています。
それでは、IS NULLを使用した例を確認してみましょう。例えば、1列目が名前、2列目が年齢、3列目が2列目のデータについて説明しているデータがあるとします。
name | age | type |
---|---|---|
Alex | 0 | 数値 |
mari | ” “ | スペース |
Harry | “” | 空文字 |
marion | NULL |
上記のデータに対して下記のCASE文を実行してみると次のような結果が返ってきます。
IS NULLを使用した例:
WHEN age IS NULL THEN “true”
ELSE “false”
END
結果:
age | 結果 |
---|---|
0 | false |
” “ | false |
“” | true |
true |
ageの値が空文字、NULLの場合はtrue、それ以外の場合はfalseが返っていますね。IS NULLなのになんで空文字もtrueが返ってくるんだ!っと思う方もいるかもしれませんが、そこはそういう仕様なんだと考えるしかありません。
データベースでもIS NULLを使用して空文字がtrueで返ってくるものもあれば、falseで返ってくるものもあるように、それぞれで仕様が違うのです。
次にNOT NULLについてですが、ディメンションまたは指標が空文字、NULL(ヌル)でない場合に真(true)を返します。つまり、こちらはIS NULLとは逆の判定をします。
NOT NULLを使用した例:
WHEN age NOT NULL THEN “true”
ELSE “false”
END
結果:
age | 結果 |
---|---|
0 | true |
” “ | true |
“” | false |
false |
最後に注意点です。NULLは「=」や「!=」などの比較演算子では判定することができず、必ずIS NULLやIS NOT NULL使用してください。なぜなら、通常比較演算子は値と値を比較するためのものですが、NULLはそもそも値ではないので、比較演算子で判定することはできません。