AlteryxのIterativeマクロ

こんにちは、小澤です。

Alteryxには通常のワークフローの中で繰り返しの処理を行うような機能はありません。 そういった処理を行うには、Batch MacroやIterative Macroを利用する必要があります。

Batch MacroとIterative Macro

Batch Macroに関しては、以前別な記事でユースケースを紹介しています。

こちらの情報を見ていただければ、わかるかと思いますますが、Batch Macroでは対象となる複数のデータに対して同じ処理を行い、 その結果をUnion結合します。

それに対して、Iterative Macroは一定回数繰り返すか、条件を満たすまで同じデータを更新ていきます。

この図を一見すると、Batch Macroの処理はFormulaツールでできるんじゃないか?と思われるかもしれません。 上記のBatch Macroのユースケースでは、データ1, 2, 3がS3上のファイル名でデータ1', 2', 3'がファイルの中身となります。 このように入力側のコネクションが存在せず設定値で対象が決まるようなツールに対してワークフロー上で得られた複数のデータを利用したりといった状況においてBatch Macroが有効です。

一方で計算自体はFormulaで行えたり、ワークフロー上でいくつかのツールを配置することで実現できる内容ではあるが、 同じデータに対してそれを何回も繰り返す必要があるなどの状況で有効です。 Iterativeマクロを利用することで、同じ操作を何回も行うためにツールをコピペして非常に長いワークフローを作成するといった状況を避けられます。

簡単な例でIterative Macroの動きを見てみる

では、簡単な例でIterative Macroの動きを見てみましょう。 今回はまず、1から10まで合計値を、入力値に足すような計算するようなマクロを作成します。

マクロの内容は以下のようになります。

非常に簡単なマクロですね。

Iterative Macro固有の設定

内容の解説に入る前に、Iterative Macro固有の設定を見ていきます。

ワークフローの設定

まずは、ワークフローの設定です。

ワークフローの種類は、MacroのIterative Macroに設定します。

ここで、注意が必要な点があります。 ワークフローの種類は

  • インターフェースツールを配置すれば自動的にAnalytic Appに設定される
  • Macro Input/Macro Outputを配置すれば自動的にStandard Macroに設定される
  • Control Parameterを配置すれば自動的にBatch Macroに設定される

といったように、手動で設定しなくても切り替わるトリガーがありましたが、 Iterative Macroに関してはそれが無いので、必ず手動で設定する必要があります。

Iterative Macroに設定すると、Constantsの項目にEngine.IterationNumberという項目が追加されたのが確認できるかと思います。 これは、今何回目のループかを示す値になっています。 初回は0が入っており、1, 2, 3,...とループするたびに1ずつ増えていきます。

動作に関する設定

続いて、View > Interface Designerを選択して、Interface Designerを開きます。 左側のメニュー項目で一番下にあるスパナのような形のアイコンを選択します。

Iteration Input移行がIterative Macro固有の設定になっています。

Iteration Input, Iteration Outputはループをする際の設定になります。 ここで設定した値の動きは以下のようになります。

  • 初回はMacro Inputツールに接続した際の値が渡される
  • 初回の処理が終わった段階で、Iteration Outputの結果が2回めのループのIteration Inputの入力として与えられる
  • 3回目以降も同様の動きをする
  • 最後のループでは通常のマクロの出力となる

となります。 少々わかりづらいかもしれませんが、実際の動きとしては、以下の図のようにループの回数ワークフローを展開して一番左のMacro Inputと一番右のMacro Outputが通常のマクロと同様だと思ってください。

その次のMaximum Number of Iterationsでは、ループ回数の最大値を指定します。 ここで指定した回数分ループが発生します。

When Maximum Number of Iterations is Hitでは、最大回数までループした場合の挙動を設定します。

Errorを設定した場合、エラーとなります。 ループは一定回数行うという設定のほか、特定の条件を満たした時に終了させるというやり方も可能です。 そういった場合、万が一条件を満たさずに最後までループしてしまった際には何かしら問題があるとしたい場合はこの設定をします。

Warn(and left over records)では、エラーにはしないが警告を出します。

Output left over recordsでは、正常に終了したものとして処理を続けます。 ループ回数が固定の場合、この設定にしておくといいでしょう。

最後のOutput Modeでは、ループ中の初回の入力と2回目の入力などで差異があった場合の動作になります。

ワークフローの内容を見ていく

ここで改めて、今回解説するワークフローを掲載します。

利用しているツールは、Macro Input/OutputのほかはFormulaツールが1つになります。 Formulaツールの設定は以下のようになっています。

Macro Inputから受け取った値に、Engine.IterationNumberの値を足しています。

この処理で例えば入力値が0だった場合、

  • 1回目 : 0(入力値) + 0(Engine.IterationNumberの値) = 0
  • 2回目 : 0(1回目の結果) + 1(Engine.IterationNumberの値) = 1
  • 3回目 : 1(2回目の結果) + 2(Engine.IterationNumberの値) = 3
  • ...
  • 10回目 : 36(9回目の結果) + 9(Engine.IterationNumberの値) = 45

のように計算されていきます。 1回目のEngine.IterationNumberが0から始まってるので、n回目ではn-1が足されることにご注意ください。

これに対して、Interface Designerの設定は以下のようになっています。

Iteration Input/Outputは今回Macro Input/Outputが1つずつなので、それを指定すれば問題ありません。

Maximum Number of Iterationsには11を指定しています。 これによってEngine.IterationNumberが0から10までの11回ループ実行されるため、10までの合計値が計算されます。 最初に入力の初期値が加わりますので、1から10までの合計値(0は足しても足さなくても結果は同じ)にその値を足した結果がこのマクロの出力となります。

特定の条件で終了するIteration Macro

さて、先ほどのマクロでは、Maximum Number of Iterationsに到達するまでループさせるマクロでした。 次に、特定の条件を満たした時にループを終了させるマクロを見ていきましょう。

先ほどと比較して増えたものは、FilterツールとNumeric Up Downツールの2つになります。

Filterツールでは、以下の条件式を記述しています。

[Engine.IterationNumber] != [#1]

マクロ利用時に設定した値と現在のEngine.IterationNumberが異なればTrue側を通ります。 このマクロでは、Interface DesignerのIteration Outputには上側(Trueになる側)のMacro Outputを設定しています。

そのため、以下のような動きをします。

  • Engine.IterationNumberが設定された値の時以外は上側にデータが出力される
  • 設定された値の時は下側にデータが出力される

さて、Iteration Macroで"特定の条件"というのはある結果によって判断されます。 それは、「Iteration Outputで設定したMacro Outputに何も出力されなかった時はIterationの上限に達していなくても終了する」というものです。

今回の場合ですと、Filterの条件的にEngine.IterationNumberがNumeric Up Downで指定した値の時にすべてのデータがFalseとなり、下側に流れるのでこの条件を満たしてそこでマクロが終了します。

例えば、マクロを利用する際の設定に「5」を指定した場合、Engine.IterationNumberが0, 1, 2, 3, 4の時はそのまま計算され、 5の時に計算したのち、FilterでFalse側に流れるため、そこでマクロの処理が終了します。 そのため、結果は

1+2+3+4+5=15

が出力されます。

マクロを利用する際は2つ以上の出力があってそのうち1つは何も結果を返さないという状態になるため、気持ち悪く感じる方もいるかもしれませんが、「そちらに何かが出力されている場合はなんらかの理由で条件が満たされておらずエラーの可能性がある」などで利用するという手もあります。

おわりに

今回は、AlteryxのIterative Macroの動きを解説しました。

Iterative MacroはAlteryxの中でも比較的高度な機能となっており、ドキュメントなんかを見てもそれだけ理解するのは難しいものとなっています。 難しく感じた方も多い方と思いますが、いきなり理解しようとせず、Alteryxを利用していく中で「こんなことしたいんだけど、雰囲気的にIterative Macroでできることっぽい?」みたいな切り口からはじめてみるのがいいかと思います。

Alteryxの導入なら、クラスメソッドにおまかせください

日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。

alteryx_960x400