目次
Looker StudioのCASE文とは
Looker Studio(旧Google データポータル)講座の第4回では、第3回で説明した独自のディメンション・指標の作成方法の後編として、「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)を返す式を記載しなければいけません。Looker Studioでは、以下を使用して論理値を返すことができます。
- 比較演算子、論理演算子
- 正規表現
- IS NULL / IS NOT NULL
- IN / NOT IN
比較演算子、論理演算子を使って論理値を返す
Looker Studioでは、以下の比較演算子とAND条件やOR条件を使用した論理演算子で論理値を返す式を作成できます。また、丸かっこを使用して条件のグループ化や優先順位をつけることもできます。
比較演算子
- =
- !=
- >
- >=
- <
- <=
例:
WHEN (REGEXP_MATCH(name1, ‘[a-zA-Z].*’) AND name2 = “Alex”)
OR name3 IN (“yuki”,”mai”) THEN “true”
ELSE “false”
END
正規表現を使って論理値を返す
Looker Studioの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はそもそも値ではないので、比較演算子で判定することはできません。
1度に複数の値の判定をする場合は「IN / NOT IN」
IN句はディメンションまたは指標の値がカッコ内に列挙した複数の値に含まれるかどうか判定することができます。似ている演算子として「=」がありますが、「=」演算子は1つの値との比較しかできないのに対して、IN句は一度に多数の値と比較することができます。
構文:
※フィールドとは、評価するディメンションまたは指標を指します。
また、IN句で作成した式は「=」演算子とOR条件を組み合わせることによって表現することも可能です。
IN句を使用した例:
WHEN name IN(“A”,”B”,”C”) THEN “YES”
ELSE “NO”
END
「=」演算子とOR条件を組み合わせて使用した例:
WHEN name = “A” OR name = “B” OR name = “C” THEN “YES”
ELSE “NO”
END
※上記の式は「フィールド:name」の値がAまたはBまたはCの場合は「値:YES」を返し、それ以外の場合は「値:NO」を返します。
IN句と「=」演算子ではどちらが読みやすいですか?IN句を使用した方が短くてシンプルにまとまっていて読みやすいですよね。「=」演算子を使用したほうが読みやすいという方は、比較する値が10個とかになったらどうでしょうか?
多数の値を比較する場合はIN句を利用したほうが可読性も上がり、ミスも少なるかと思います。
次にNOT IN句についてですが、ディメンションまたは指標の値がカッコ内に列挙した複数の値に含まれないかどうか判定する演算子です。つまりIN句とは逆の判定をする演算子です。
こちらは「!=」演算子とOR条件を組み合わせることで表現することができます。
NOT IN演算子を使用した例:
WHEN name NOT IN(“A”,”B”,”C”) THEN “true”
ELSE “false”
END
「!=」演算子とOR条件を組み合わせて使用した例:
WHEN name != “A” OR name != “B” OR name != “C” THEN “true”
ELSE “false”
END
※上記の式は「フィールド:name」の値がAまたはBまたはCでない場合は「値:YES」を返し、それ以外の場合は「値:NO」を返します。
最後に、IN / NOT INを使用する際には下記の2点を注意してください。
・フィールドと比較する値は大文字と小文字も区別されます。
・フィールドの内容とリストの値は、データ型が共通でなければなりません。
フィールド | 型 | 数式 | 結果 |
---|---|---|---|
Alex | テキスト | フィールド IN (“Alex”, “yuki”) | true |
Alex | テキスト | フィールド IN (“alex”, “yuki”) | false |
20 | 数値 | フィールド IN (“alex”, 20) | エラー |
Yuki | テキスト | フィールド NOT IN (“Alex”, “yuki”) | true |
Yuki | テキスト | フィールド NOT IN (“alex”, “Yuki”) | false |
20 | 数値 | フィールド NOT IN (“alex”, 20) | エラー |
THEN 結果には真(true)の値を指定
THEN節では、条件式に記載されている式が真(true)の場合に返す値を指定します。条件式が複数ある場合は、最初に真(true)になった条件の結果が返されます。
また、CASE文が返す値はすべて同じタイプでなければなりません。そのため、1つ目のTHEN節の返す値がテキストであれば、そのあとに続くTHEN節、ELSE節の返す値はすべてテキストでなければなりません。
ELSE 結果には偽(false)の値を指定
ELSE節では、条件式に記載されている式の条件がどれも満たされなかった場合、ELSE節に設定されている値が返されます。1つのCASE文に指定できるELSE節は1つだけです。
CASE文の記述順番
CASE文を作成する前には条件式の順番に気を付けてください。なぜなら、CASE文は条件に合致した結果を返すとその処理が終了してしまうからです。
条件式の順番を間違えると予期しない値が返ってくるため、CASE文を作成する際には、下記のフローチャートを頭に入れて条件式の順番に気を付けてください。
例:
WHEN 条件式① THEN 結果①
WHEN 条件式② THEN 結果②
ELSE 結果①
END
CASE文のフローチャート:
CASE文の禁止事項
CASE文では、以下のことは禁止されているのでご注意ください。
①:条件式内にディメンションと指標を混在させることはできません。
例:
②:条件式内で数学的な計算を行うことはできません。
例:
③:条件式内では必ずディメンションまたは指標を使わなければなりません。
例:
④:1つ目のTHEN節の返す値の型とそのあとに続くTHEN節、END節の返す値の型は同一でなければなりません。
例:
WHEN name = “yuki” THEN “woman” ← テキスト
WHEN name = “yuki” THEN “man” ← テキスト
ELSE 30 ← 数値
END … / エラー!
⑤:IN / NOT IN演算子では、フィールドとリストの値の型は共通でなければなりません。
例:
以上でCASE文の説明は終わりです。非エンジニアの方にとっては難しかったかもしれないですが、CASE文は非常に便利な機能なので是非活用してみてください。
第5回はGoogle スプレッドシートを利用した内容に触れていく予定なので、是非次回も読んで頂ければ幸いです!