WeeklyAlteryxTips#29 IF文の結果を結合してわかりやすく書く

Alteryx

前回から関数に関してのTipsを紹介していますが、今回も関数のTipsです。そして、今回は複雑なIF文をわかりやすくするための使い方です。

はじめに

今回も簡略化して考えます。以下のようなデータを考えます。

今回、value1、value2(value2は1か2しかありません)を考えた時、それぞれが偶数か奇数かを一つにまとめたフラグを作りたいとします。このためには、以下のような計算式で実現できます。

IF Mod([value1], 2)=1 AND [value2]=1 THEN "奇数_奇数"
ELSEIF Mod([value1], 2)=1 AND [value2]=2 THEN "奇数_偶数"
ELSEIF Mod([value1], 2)=0 AND [value2]=1 THEN "偶数_奇数"
ELSEIF Mod([value1], 2)=0 AND [value2]=2 THEN "偶数_偶数"
ELSE Null() ENDIF

※MOD関数は、余りを計算する関数で、2つ目の引数に2と入れているので、2で割って余りがあれば結果は1となります。余りがなければ0となります。つまり、偶数なら0、奇数なら1が帰ってきます。

これによって以下のような結果が得られます。

この書き方では、value1とvalue2両方のパターンを考えながら書く必要があり、もっと複雑になってくると間違えやすいです。

IF文を簡略化して書く

このような場合、もっとシンプルに書くことができます。

IF Mod([value1], 2)=1 THEN "奇数"
ELSE "偶数" ENDIF
+"_"+
IF [value2]=1 THEN "奇数"
ELSE "偶数" ENDIF

これつまり、IF文の結果を繋げて書いているわけです。value1に対するIF文とValue2に対するIF文に分けて書き、「+」演算子で結合しているだけですが、value1とvalue2それぞれ別に考えることができるので、非常にシンプルなIF文になっています。

今回、文字列として結合していますが、同様にIF文の結果が数値であれば、足し算や引き算などの計算を行うこともできます。

IIF文でもう少し簡略化する

今回は条件がシンプルなため、さらにIIF関数を使うともう少し簡単に書くことが出来ます。

IIF(Mod([value1], 2)=1, "奇数", "偶数")
+"_"+
IIF([value2]=1, "奇数", "偶数")

かなりシンプルになりましたね。ただ、IIF関数は条件が多い場合は適さないので、条件がシンプルな場合に使うことをおすすめします。

例えば、value1に対して3の倍数、偶数、奇数という条件にする場合は、以下のようになります。

IIF(Mod([value1], 2)=0, "偶数", IIF(Mod([value1], 3)=0, "3の倍数","奇数" ))

これは入れ子構造で条件が読みにくくなっています。

一方、IF文の場合は以下のようになります。

IF Mod([value1], 2)=0 THEN "偶数"
ELSEIF Mod([value1], 3)=0 THEN "3の倍数"
ELSE "奇数" ENDIF

こちらの方は、上から普通に読めるので条件が読みやすいですよね。

まとめ

  • IF文の結果はTHENで出力した型の値として単純に扱うことができ、計算に使ったりすることができることをご紹介しました
  • 複雑な条件の場合はIIF文よりIF文の方がわかりやすくかけることを紹介しました

サンプルワークフローダウンロード

次回

次回は未定です。

コメント

タイトルとURLをコピーしました