Alteryxの反復マクロの反復条件の設定についてご紹介します
Alteryxの反復マクロの反復条件について詳細をご紹介します。特に、マクロのインターフェースに反復条件を設定する様々な方法をご紹介します。
反復マクロとは?
Alteryxの反復マクロ(Iterative Macro)は、プログラム言語のFor構文のように繰り返し実行を行うためのマクロです。繰り返す条件としては、「指定回数まで実行する」および「条件を満たすまで実行する」ということになります(実行回数は必ず設定必要です。デフォルトでは100とされています)。
しかしながら、反復処理というのは、行生成ツールや複数行フォーミュラツール、もしくはフィールド追加ツールとフォーミュラツールの組み合わせなどでできるパターンが多いです。そのため、作成が必須ではない反復マクロというのはなかなか慣れにくいものです。
ここでは、わかりにくい反復処理の終了条件について紹介していきます。
Alteryxの反復マクロの繰り返し条件について
反復マクロの繰り返し条件は、より詳しく記載すると以下の2つのいずれかに該当するまで繰り返し実行する、というものです。
- 指定回数
- 繰り返し出力のレコードが0になるまで
ここで繰り返し出力というものが出てきていますが、反復マクロでは繰り返し用のデータが入力されるマクロ入力ツールと、繰り返し用のデータが出力されるマクロ出力ツールが必要です。このマクロ入力ツールとマクロ出力ツールは、普通に配置しますが、それぞれ配置後にインターフェースデザイナーで設定します。
このとき、マクロ入力・出力の「アンカー省略形」に「R」などと設定しておくと、マクロにした際に反復入出力と通常の入出力がわかりやすいです。
反復条件:指定回数
指定回数実行させるためには、インターフェースデザイナーにて、「最大反復回数」で回数を設定できます。
非常に簡単ですね。
なお、指定回数で実行する場合は、「最大反復回数に達したとき」のオプションを「残りレコードを出力する」がおすすめです。これであれば、反復出力に出てきた結果がそのまま利用できます(デフォルトの設定だとエラーで終わってしまいます)。
反復条件:繰り返し出力のレコードが0になるまで
次に、「繰り返し出力のレコードが0になるまで」について考えて行きたいと思います。マクロの概要では「条件を満たすまで繰り返し実行する」と書かれています。AlteryxのHelpを引用すると以下のように書かれています。
反復マクロはすべてのレコードを実行し、指定された回数だけプロセス全体を繰り返すか、条件が満たされるまで、ワークフローを通してレコードをループバックします。
ここで、「条件が満たされる」、ということと「繰り返し出力のレコードが0になるまで」というのが同じことを指していて、つまり「条件」というのは「自分で設定した条件になったら繰り返し出力のレコードを0にする」という処理にしないといけないのです。
簡単に言えば、条件を満たしたらフィルタツールを利用して、繰り返し出力に出力されるレコードを0にすれば良い、ということになります。
先程のサンプルマクロにフィルタを追加した例が以下のワークフローです。すなわち、フィルタに条件(今回はField1が10以下と設定)を設定し、True(値が10以下)なら反復出力側にデータが流れるため繰り返され、False(値が10を超える)なら通常出力側にデータを流し、反復出力側にはデータを流さないようになっています。
なお、最大反復回数はデフォルトでは100回となっているため、条件指定をしたとしても100回繰り返すとマクロが処理を止めてしまいます。条件指定をする場合は必ず十分な「最大反復回数」を設定しておきましょう。なお、最大設定可能数は「10,000,000」のようです(コミュニティより fa-external-link)。
反復回数をもう少し自由に設定したい
反復回数の設定はインターフェースデザイナーから行うため、反復回数を指定回数自由に決める必要があるマクロを共有する場合は非常に不便です。しかしながら、内部変数である「IterationNumber」という項目を使うことで簡単にマクロのインターフェースで設定可能になります。
なお、「IterationNumber」は0始まりとなります。例えば反復回数を10に設定すると、0から始まり、9で終わります。
マクロのインターフェースで反復回数を指定する
まず、マクロのインターフェースに反復回数を指定できるようにする方法をご紹介します。
ポイントとしては以下のとおりです。
- フィルタツールにIterationNumberを設定する
- 数値増減ツールを追加し、インターフェースから値を設定できるようにする
フィルタツール設定は以下のとおりで、カスタムフィルターに以下のように数式を設定します。
数式は以下の通りです。
[Engine.IterationNumber] <= 10 -1
もしくは、以下の数式でも問題ありません。
[Engine.IterationNumber] < 10
インターフェースツールの方の設定では、この仮で設定している「10」を書き換える形で設定します。
アクションツールの設定は以下のとおりです。
アクションタイプを設定 | 「値を更新」を選択 |
更新する値または属性 | 「Expression - value」を選択 |
特定の文字列を置換 | チェックを入れ、書き換えたい文字列「10」と記載 |
これにより、以下のようにインターフェースで反復回数が設定できます。
マクロ入力ツールに入力した値で反復回数を決定する
次に、ワークフロー内で動的に反復回数を指定できるようにする方法をご紹介します。基本的な方法としては「IterationNumber」を使います。
ポイントは、反復回数を入力するためのマクロ入力ツールを追加し、その値をフィールド追加ツールで反復するデータに付加し、その後フィルターツールで「IterationNumber」と比較する方法をとります。
反復用入力回数用のマクロ入力とフィールド付加ツールの間にサンプリングツールを挟んでいますが、入力されたレコードが複数あると結果がおかしくなるため、1レコードに絞っています。マクロを使用する外部のワークフローの方で、入力の際に1レコードしか生成しないようになっていれば不要ですが、念の為入れています。
なお、フィルタの設定は、反復回数を入力するマクロ入力のフィールド名が「Iterative」となっている場合は、以下のようになります。
[Engine.IterationNumber] < [Iterative]
このマクロを使用する際のワークフローは以下のようになります。
まとめ
反復マクロを使用する際、反復回数の指定方法は以下の方法を取ることができます。
- インターフェースデザイナーで直接反復回数を指定する
- 自分で設定した条件で終了条件を設定する
2の方法を応用して1の方法を様々なやり方で実装しました。
- マクロのインターフェースにて反復回数を指定する
- マクロに対して動的に反復回数を決めるデータを入力する
繰り返し処理は、複数行フォーミュラツールや行生成ツールなどでも対応可能ですが、反復マクロがどうしても必要になる場合があります。Alteryxはウィザードなどを使い手取り足取りツール側でサポートしてくれるようなものではないため、このようなパターン化できるようなものはぜひ覚えていただければと思います(手取り足取りじゃない分非常に自由に使うことができます!)。
サンプルワークフローダウンロード
IterativeMacroSample fa-download
※Alteryx Designer v2021.3.3.63061時点の情報です