Alteryxといえばツール、というふうに皆さん思うかと思いますが、いくつかの数式を書くツールでは関数が非常に重要な役割を果たします。この数式を書くツールといえば、フォーミュラ、複数行フォーミュラ、複数フィールドフォーミュラ、フィルター、行生成、アクション、条件など数多く存在します。
そして、その関数ですが非常に多くの関数が用意されています。実は、13カテゴリで210個もの関数が用意されています。実際、データ加工を行うにはこれらの関数を駆使することで様々なケースに対応できるようになっています。
さて、前置きはここまでにして、この数式内で条件分岐するには一般的にはIF文を使います。これは条件式カテゴリに含まれています。この条件分岐のために用意された関数として三種類あり、IF~THEN~ELSEIF~ELSE~ENDIFと、IIF、SWITCHの3つがあります。今回は、最初の基本的なIF分について言及したいと思います。
IF文の構文について
IF文の構文は以下のとおりです。
IF c THEN t ELSEIF c2 THEN t2 ELSE f ENDIF
ここで、「c」はconditionということで、条件判定式を記載します。例えば、[Field1]=”a”などです。これはフィールド「Field1」の値が「a」であればTrue、そうでなければFalseとなり、直後のTHENで指定された値「t」を返します。
複数条件がある場合は、ELSEIFに記載します。
どれにも当てはまらない場合は、ELSEのあとに書かれた「f」の値を返します。ELSEは省略できません。
複雑な条件を記載する場合
さて、条件が複雑になる場合、「c」の部分に複雑な条件式を書くようになると思います。例えば、以下のようなインプットを考えてみましょう(それほど複雑ではないですが、本当に複雑にすると例として理解しにくくなるので、単純な例としています)。
ここで、Flagというフィールドの値を見て、True/Falseに応じてValueフィールドの値に対する判断を変えるとします。つまり、以下のような条件とします。
- Flag:Trueの場合
- Valueが0.5以上の場合:1にする
- Valueが0.5未満の場合:2にする
- Flag:Falseの場合
- Valueが0.6未満の場合:1にする
- Valueが0.6以上の場合:2にする
この場合、以下のような条件式となります。
IF [Flag] AND [value]>=0.5 THEN 1
ELSEIF [Flag] AND [value]<0.5 THEN 2
ELSEIF ![Flag] AND [value]<0.6 THEN 1
ELSEIF ![Flag] AND [value]>=0.6 THEN 2
ELSE Null()
ENDIF
なんだかんだで複雑な条件式になってしまっています。
しかし、IF文の中にIF分を書くことができるので、以下のように書くことも可能です。
IF [Flag] THEN
IF [value]>=0.5 THEN 1
ELSE 2 ENDIF
ELSE
IF [value]<0.6 THEN 1
ELSE 2 ENDIF
ENDIF
この場合、条件の構造として、まずFlagフィールドで場合分けし、そのあとvalueフィールドの値でシンプルに条件分けできており、理解しやすいと思います。また、「>=0.5」を書けば逆の条件「<0.5」をいちいち書かずにすむので、記述量が減り間違いも少なくなるという効果もあります。
ちなみに、若干ながらパフォーマンス的にも後者の書き方の方が良いようです(相当量のデータでわずかな差が出る程度です)。
まとめ
Alteryxは見通しの良いノーコードツールということで、なるべく理解しやすくワークフローを作成することが望ましいです。IF文内にIF文を書くことでわかりやすく条件分が記載できるので活用してください。
サンプルワークフローダウンロード
次回
次回も条件文のTipsにしようと思います。
コメント