Tableau Prep Tips集22 ーCASE関数ー
Japan Preppin Data FamメンバーのPrep Tips集をご紹介します。
今回は、CASE関数です。
以前、Tableau PrepのTips集 18 ー論理関数、条件式ー でも条件処理、分岐処理の概要をご紹介しましています。
今回は、SQLでも利用価値が高いとされているCASE関数を取り上げます。
Preppin' Data勉強会でmitamuuさんが利用した事例紹介で、具体的なCASE関数の利用方法やメリットをお伝えします。
Prep Tips (42) : CASE関数
(1)フィールドの値を利用
1) 指定するフィールドの文字列に従い、表示値を変える 2024W28
CASE関数の典型的な利用方法です。
CASEのあとに指定したフィールドの内容を、WHENの後で確認し、仕分けした結果に即してTHENで表示値を指定するものです。
2) 条件により、データを抽出するフィールドを変える 2024W48
複数のテーブルやデータフィールドに分かれているデータから、条件に見合ったデータを取り出し新たなフィールドを作成する例になります。
Preppin' Data 2024W48を取り上げたブログ記事もご参照ください。
2024W49の課題では、4つのデータテーブルでそれぞれの条件で新たなデータフィールドを作成し、ユニオンで作成したフィールドを繋げて利用する方法が一般的です。
ユニオンの前に、新たなデータフィールドをそれぞれ作成する計算式を記述します。
これに対し、先にデータ接続で4つのデータテーブルをユニオンし、CASE関数を利用して必要な新たなフィールドを作成することが出来ます。
新たに作成する3つのデータフィールドは、下記のCASE関数を利用して作成をしています。フローがスッキリして、処理の経緯も分かりやすくなります。
3)計算式から、入力する値を計算で変える 2024W44
WHENで条件式で判定させ、THENで判定に応じた値や計算結果を表示させます。
Preppin' Data2024W44では、前段で [Avg Days to Return] フィールドを作成し、CASE関数を用いて[Avg Days to Return] の大小関係を比較させ、出力させる [Price] から値を計算させます。
<補足>
この事例は、CASEの後にフィールド名を書かない手法になります。
WHEN 以下の条件式の判定をさせて、THEN 以下の処理をさせることで新たなフィールドを作る時などに利用出来ます。
Prepの仕様上、CASEの後に何も記載しないとエラーになってしまいます。
CASE TRUE と CASE の後に TRUE と記載しておくことで、計算が有効になります。
なお、上記の計算式については、次のIF関数を用いた計算式と同じ結果が得られます。
4) 文字の内容で仕分け、CASE関数の入れ子利用 2024W28
複数ある [Table Names] の値から、それぞれの値に応じて、更に他のフィールド(下記例では [Gender] )の値に応じて最終的に表示する値を仕分ける設定をCASE関数の入れ子設定で実現しています。
同様な入れ子の条件分岐はIF関数でも対応可能ですが、CASE関数の方が記載内容の識別性が良い感じです。
(2)条件式を利用 : CASEの後に条件式
CASEの後に、フィールドの指定だけでなく条件式を入れ、WHENで条件分岐の結果を確認してTHENで結果に従う値を表示させることが出来ます。
同様な条件式での分岐はIF関数でも作成可能ですが、IF関数では条件式の内容を重複して記載する必要があります。CASE関数は、条件式の記載が1回で済むので、認識性の向上を含めシンプルな式の記載となります。
5)文字列に含まれる値に対し、結果を仕分けて表示させる 2024W42
フィールド内に含まれる文字の内容に応じ、最終的に表示させる値を指定する方法です。
IF関数を用いた [Week] に含まれる3種の文字列に対する、条件分岐での仕分け例は次の通りです。
これをCASE関数を用いた例が下記になります。
IF関数で重複して記載していた CONTAINS([Week],'Semi') の部分が、CASEの後の式1回のみの記載で記載が完了しています。
6)計算式の途中で利用、条件により利用する数値を変える 2024W39
日付の処理で曜日に関する応用例です。
CASEの後の条件式で日付に関わるフィールドの値で曜日を示す数値を表示させています。
下記の例では、週末(土日)に対し日付の付与日数を調整する計算式内でCASE関数を有効に利用しています。
7)条件により利用する数値を変える 2024W36
サッカー試合の得失点差がプラス(1)かマイナス(−1)か、または同点(0)かで試合の勝ち点を表示させるCASE関数の応用例です。
8)文字列の数値を抜き取り、その結果で利用する値を仕分ける 2024W33
ブール値を判別する関数をCASEの後に記載し、真偽値に従い表示させる値を決める利用例です。
例では、[Term] フィールドに1〜9の数値データが含まれていれば TRUE と判断し 'term' を返す、そうでなければ 'holiday' を返す関数式です。
9)指定文字の位置から、出力を変える 2024W25
日付の年月日 並び順を調整する利用例です。
日付は国によって年月日の並び順が異なるケースが多く、データ接続時の読み込み方で並び順がおかしくなるケースが散見されます。
この例は、データソースで / で年月日が区切られている値から、利用しているPrep(日本語版)で認識出来る並び順に揃える計算式の例になります。
まとめ
今回は、条件式で利用価値の高いCASE関数を取り上げました。
IF関数、IIF関数(YesとNoの2択)も条件式での利用機会が多い関数ですが、CASE関数の方が共通データ(フィールドや関数式など)を1回の記載で利用出来ることなど、作業性や認識性の向上が図りやすくなります。
また、CASE関数はSQLでの利用機会は多く、データベースの操作という観点でも各操作の理解度が深まり、スキルアップが図れるメリットがあります。
Prepの利用で、是非使いこなしたい関数の1つです。