見出し画像

Tableau Prepの作業を変えるTips集18 ー論理関数、条件式ー

Tableau Prepユーザー会のNakajima2です。
Japan Preppin Data FamメンバーのPrep Tips集をご紹介します。
今回は、Tableau以外にもさまざまな言語、EXCELなどでも利用される論理関数、条件式について。
Tableau Prepにおいては、条件に応じたデータ変換や値の割り当てを行う際、IF、IIF、CASEという3つの関数が非常に有用です。それぞれに適した利用方法があります。
また、NULLに関した条件式も利用価値がある関数です。 ISNULL、IFNULL 関数についてもご紹介致します。

Prep Tips (35) : 論理関数 ーIF 関数、IIF 関数ー

IF 関数、IIF 関数は、単一条件分岐「もしも〜ならば」の条件を一つだけ評価するシンプルなケースに適しています。

1) IF 関数

この関数は3つの引数(条件式、条件が真での処理、条件が偽での処理)をとります。また、簡単なブール演算や0/1のカラムと組み合わせて使用されることも多い関数です。

IF 条件式 THEN 条件が真での処理 ELSE 条件が偽での処理 END

Preppin' Data 2024W26 の課題から例を示します。
この課題では、
 ・[Response to Consumer] フィールドに「In Progress」の文字が含まれて
  いた場合、[Date Resolved] フィールドの日付に「2024年6月26日」を返す
 ・[Response to Consumer] フィールドに「In Progress」の文字が含まれて
  いない場合は、[Date Resolved] フィールド日付をそのまま使う
とする関数式を記述しました。
作成した関数式は、次の通りです。

[Date Resolved]
IF [Response to Consumer]='In Progress' THEN #2024-06-26#
ELSE [Date Resolved] END

IF 関数での記述例

2) IIF 関数

IIF 関数は、シンプルな2択の選択肢で有益です。記述もシンプルで、慣れるととても分かりやすい式です。
Preppin' Data勉強会の参加者は、2択の条件式に対し、記述がシンプルで処理速度の向上なども期待できることから、IIF 関数を利用する方が多いです。

条件を満たしているかどうかを判定し、TRUE の場合は 1 つ目の値、FALSE の場合は 2 つ目の値、不明な場合はオプションで 3 つ目の値もしくは Null を返します。

IIF( 条件式 ,  条件が真での処理 , 条件が偽での処理 , オプション  )

上記1)項での  IF 関数の記述例をIIF 関数 で記述した例を次に示します。計算結果は、 IF 関数の例と全く同じものになります。

[Date Resolved]
IIF([Response to Consumer]='In Progress',#2024-06-26#,[Date Resolved])

3)複数条件の設定(AND、OR)、 比較演算子

条件式の部分には、ANDOR を使用することで、複数条件の設定が出来ます。それぞれ、次の通りの設定となります。

IF 条件式1 AND 条件式2
 THEN 条件1と条件2が共に真の処理 ELSE 条件が偽での処理 END

ANDを利用

IF 条件式1 OR 条件式2
 THEN 条件1または条件2が真の処理 ELSE 条件が偽での処理 END

ORを利用

条件式の中で利用する比較演算子の扱いです。設定する内容によって利用してください。

比較演算子

4)IF 関数の複数分岐 (入れ子・ネスト)

IF 関数では、次の2つの方法で条件分岐を行うことが出来ます。

IF [ 条件式1 ]  THEN
 IF [ 条件式2 ] THEN
  IF [ 条件式3 ] THEN [ 条件1、条件2、条件3の全てが真での処理 ]
  ELSE [ 条件1と条件2が真、条件3が偽での処理 ] END
 ELSE [ 条件1が真、条件2が偽での処理 ] END
ELSE [ 条件1が偽での処理 ] END

条件分岐 例1

IF [ 条件式1 ] THEN [ 条件1が真の処理 ]
 ELSEIF [ 条件式2 ] THEN [ 条件2が真での処理 ]
 ELSEIF [ 条件式3 ] THEN [ 条件3が真での処理 ]
ELSE [ 全ての条件が偽での処理 ] END

条件分岐 例2

2024W25 の日付修正でmitamuuさんがTipsとして示したCASE 関数(後述)での式を、条件分岐 例2を利用して記述した例を示します。
周りくどい表現になっていますが、条件式1、2、3での結果をそれぞれ処理結果として示す式となっています。

IF FINDNTH([Date Received],"/",1) = 2 
THEN DATE(DATEPARSE("MM/dd/yyyy",[Date Received]))
   ELSEIF FINDNTH([Date Received],"/",1) = 3
   THEN DATE(DATEPARSE("MM/dd/yyyy",[Date Received]))
   ELSEIF FINDNTH([Date Received],"/",1) = 5
   THEN DATE(DATEPARSE("yyyy/dd/MM",[Date Received]))
ELSE
END

FINDNTH 関数を利用し、データ中に "/" が出てくる位置により処理を仕分けている

Prep Tips (36) : CASE 関数、ISNULL 関数、IFNULL 関数

Preppin' Data勉強会(Japan Preppin' Data FAM)のメンバーが、非常に効率的にフローの中で利用している関数です。
分岐処理をわかり易く整理出来るCASE 関数、NULL値に関しその有無で処理方法を仕分けるISNULL 関数、IFNULL 関数の利用方法で、その処理やフローの処理速度が向上します。
是非、使いこなして頂ければと思います。

CASE 関数

CASE 関数は、1つのフィールドに対して、1対1で処理結果を割り当てたい場合に最適です。カテゴリや区分に名前を付けたり、パラメータに基づいて異なる値を仕分けたりする際に有用です。

(1)フィールドの値を利用

Preppin' Data 2024W28の課題で、Nakajima2が利用したフィールド内データのグループ分けに利用した計算式の例です。
[Gender] フィールドのデータを、'Man' と Woman' に仕分けています。

CASE [Gender]
   WHEN 'Man 1' THEN 'Man'
   WHEN 'Man 2' THEN 'Man'
   WHEN 'men - MD' THEN 'Man'
   WHEN 'Woman 1' THEN 'Woman'
   WHEN 'Woman 2' THEN 'Woman'
   WHEN 'women - MD' THEN 'Woman'
END

(2)条件式を利用

2024W25 の日付修正でmitamuuさんがTipsとして示したCASE 関数(後述)での利用例です。条件式に入れた結果で処理の方法を仕分けしています。
上記、「IF 関数の複数分岐」で示した計算式が、CASE 関数を利用することで分かり易い表現になっています。

CASE FINDNTH([Date Received],"/",1)
   WHEN 2 THEN DATE(DATEPARSE("MM/dd/yyyy",[Date Received]))
   WHEN 3 THEN DATE(DATEPARSE("MM/dd/yyyy",[Date Received]))
   WHEN 5 THEN DATE(DATEPARSE("yyyy/dd/MM",[Date Received]))
END

ISNULL 関数

NULL値を扱う関数で、論理関数内の条件式に利用出来ます。
確認するフィールドや条件式が NULL であれば TUREを、NULL でなければ FALSE を返します。

ISNULL([expression) : 結果をブール値(TURE または FALSE)で返す
例 : ISNULL([Profit])

利用例 :
IF ISNULL([Profit]) =TRUE TEHN '実績なし' 
ELSE '実績あり'
END

IFNULL 関数

NULL値を扱う関数で、論理関数として利用出来ます。
確認するフィールドや条件式が NULL であることを確認し、NULL でない場合は <expr1> を返し、NULL の場合は <expr2> を返します。

IFNULL(expr1, expr2)
例 : IFNULL([Profit], 0)

利用例 : [Category] と [Second Category] をマージしたフィールドを作る
IFNULL ([Category] , [Second Category])

おわりに

論理関数、条件式については、Tableauのオフィシャルサイトや、各種ブログでも取り上げられている基本的な関数になります。
Tableau Prepのお役立ちTipsで取り上げるべきか、必要性も考えましたが、
 ・利用頻度の高い重要な関数であり、Tipsリストには掲載しておきたい
 ・Preppin' FAMのメンバーが、CASE 関数およびNULL処理で効果的な
  処理フローを作成している
ことから、Prepの活用レベルをひとつ上げるためにも覚えておきたいものとして個別掲載と致しました。

是非とも習得して、作成するフローのレベルが少しでも上がって頂けたらと思っています。


この記事が気に入ったらサポートをしてみませんか?