AlteryxのFormula式における条件分岐いろいろ
こんにちは、小澤です。
みなさん、AlteryxのFormulaツールやFilterツールは使ってますか? これらは、多くのツールが存在するAlteryxの中でも比較的利用頻度の高いツールだと思われます。
これらのツールではFormula式を使って処理内容を記述します。 Formula式はワークフローの作成方法と同様、同じことを実現するにしても複数の書き方が考えられます。
今回は、その中から条件分岐の記述方法について書いていきます。
どんな書き方があるの?
最初に条件分岐に使える関数一覧をみてみましょう。
- IF-ELSE
- IIF
- Switch
さて、IF-ELSEについては使ったことのある方も多かと思われますが、IIFやSwitchについては「なにそれ?おいしいの?」って方もいるかもしれません。 それぞれがどのような動きをするのか順にみていきましょう。
もっとも基本的なIF-ELSE
まずはもっとも基本となるIF-ELSEです。 これは、以下のように記述します。
IF [Species] == "setosa" THEN 0 ELSE 1 ENDIF
これはSpecies列の値がsetosaの行は0、それ以外は1を返すようなものになっています。 元のデータとFormulaツールの出力はそれぞれ以下のようになっています。
ELSEIFを使うことで、複数条件を記述することも可能です。
IF [Species] == "setosa" THEN 0 ELSEIF [Species] == "versicolor" THEN 1 ELSE 2 ENDIF
こちらの結果は以下のようになっています。
ELSEIFは何個でも配置可能なので、
IF ... ELSEIF ... ELSEIF ...
と条件の数だけつなげていくことが可能です。
注意が必要な点として、条件の判定は先頭から順に行われていきます。 例えば以下のような条件式を書いたとします。
IF StartsWith([Species], "v") THEN 0 ELSEIF [Species] == "versicolor" THEN 1 ELSE 2 ENDIF
この条件式では、
- 先頭の文字が"v"の場合は0
- versicolorの場合は1
- それ以外は2
となっています。 結果は以下のようになります。
結果はversicolorも0になっています。 これは、versicolorも"v"で始まるという条件を満たしているためです。 この条件を以下のように変更してみます。
IF [Species] == "versicolor" THEN 1 ELSEIF StartsWith([Species], "v") THEN 0 ELSE 2 ENDIF
先ほどと順番を逆にしてみました。 結果は以下のようになります。
先ほどとは異なりversicolorの場合1になっています。
IF-ELSEでは複雑な計算を行うことも可能です。 また、任意の場所に改行もいれれます。
IF [Species] == "versicolor" THEN // ここに複雑な計算式を入れる ELSEIF StartsWith([Species], "v") THEN 0 ELSE 2 ENDIF
条件や結果として返す値が複雑な計算を行うような場合はこのように適宜改行をいれてやることで見やすくなります。
サクッと書きたいときに便利なIIF関数
IF-ELSEと同じような仕組みを実現する関数としてIIF関数があります。 使い方は以下のようになります。
IIF([Species] == "setosa", 0 ,1)
先ほどのIF-ELSEとの対応関係で表すと、
- 1つ目の引数がIFの条件式
- 2つ目の引数が条件を満たしたときに返す値
- 3つ目の引数がELSEの時に返す値
となります。
IF-ELSEの時のように複数条件をいれたい場合は、関数の中にさらにIIF関数を入れ子にします。
IIF([Species] == "setosa", 0 ,IIF([Species] == "versicolor", 1, 2))
IIF関数は簡単な内容あればIF-ELSEで記述するよりスッキリします。 一方で、条件が多かったらり、返す結果が複雑な計算を行うような場合だと見通しが悪くなってしまいます。
どちらを利用しても同じことが実現可能ですので、好きな方を使うのがいいかと思います。
ELSEIFがいっぱいある時に便利なSwitch関数
最後に同じようなことを実現する手段としてSwitch関数を紹介します。 Switch関数は以下のように利用します。
Switch([Species], 2, "setosa", 0, "versicolor", 1)
結果は以下のようになります。
これは何をしているかというと、
- Speciesが判定対象
- どの条件も満たさない時は2
- "setosa"の時は0
- "versicolor"の時は1
という判定を行なっています。 条件と値を引数として追加していくことで、判定対象を増やしていくことが可能です。
Switch関数は値が一致するか、という条件でしか判定できません。 ただし、どんな値と一致するかを増やすのは容易です。 そのため、判定する対象が多くなるような場合に利用するとIF-ELSEと比較して簡単に書くことが可能です。
おわりに
今回は、AlteryxのFormula式における条件分岐の書き方を紹介しました。
Alteryxではツールの多さもさることながら、Formula式の中でも様々な関数が利用可能です。 そのため、どんな場面でどんな関数を利用すれば目的の結果が得られるかわからないという場面も出てくるかと思いますので、こういった内容のものも今後書いていければと思います。
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。