Alteryxの反復マクロは、4つあるマクロタイプのうち、難易度的には上から二番目と考えて差し支えないと思います。ただ、使う必要があるケースというのは非常に限られてきます。普通にデータ加工をしていても必要なケースはほとんどないと思います。
反復マクロを使うケースというのは、何か処理をした結果を使ってさらに同じような処理を行う時に使います。ただし、参照するフィールドが1つくらいであれば、複数行フォーミュラや行生成ツールなどで対応可能ですし、そちらのほうが速度的にも早く、デバッグも行いやすいです。
しかしながら、ルート探索など反復マクロが必要とされるようなユースケースも存在します。ここでは、シンプルな反復マクロの作り方をご紹介します。
反復マクロの作り方
反復マクロのコツとしては、まず一回分の処理をするワークフローを作ります。そこからがスタートです。
まず1回分の処理を作ってみる
少し例をベースに作ってみたいと思います。行き先リストがあり、ある地点から別の地点に行きたいとしましょう。このとき、どのようなルートを通って行くか出力しなさい、という問題を考えてみましょう。
入力として、出発地点、ゴールをインプットとして使いましょう。経路も保存しておく必要があるのでまず最初の経路として出発地点を入れておきます。以下のようなデータになるかと思います。
経路リストとして以下のようなものを考えてみます(たまたまアルファベット順になっていますが、実際は空港の行き先リストのようなものを想像してください)。
スタートからゴールを目指すためには、経路リストをどんどん結合していくことでルートを見つけることができます。
例えば、最初の行き先は以下のように求められます。
出発点の「Start」フィールドと「From」フィールドを結合ツールで結合します。これにより「To」フィールドに示す場所にたどり着きます。このケースだと、最初が「AA」なので、結合すると「BB」に到着します。
ルートを保存したいので、フォーミュラツールで、Routeフィールドに対して「[Route]+”-“+[To]」といった計算式でアップデートをかけます。これにより、Routeフィールドは「AA-BB」といった形になります。つまり、ここまでで以下のようになります。
これで一回分の処理が終わりましたが、ゴールの「FF」にたどり着くためには何回結合すれば良いかわかりません。そのため、反復マクロ化し、「Goal」フィールドと「To」フィールドが一致するまで繰り返します。
繰り返すためのデータを作る
先程の結果に対して「To」の「BB」を「From」フィールドと結合することで次のルートが決まります。つまり、前にやった処理と同じ処理をするわけです。となると、スタートとゴールを含むデータ入力に上の結果が戻ってくればよいわけです。つまり、「To」フィールドを「Start」フィールドにリネームし、使い終わった「From」は捨てます。
つまり以下のようにセレクトツールで加工します。
これにより以下のようなデータになります(フィールドの位置は変わってますが、あまり影響はありません)。
ワークフローは以下のようになります。
繰り返しマクロに仕上げていく
さて、これを実際にマクロとしてみましょう。
まず、入力はすべてマクロ入力に変換します。右クリックメニューから「マクロ入力」に変換することができます。さらに、セレクトツールの後ろにマクロ出力ツールを付加します。
さて、ここからがポイントですが、出力からデータを再度入力する必要がありますが、どの入出力が繰り返されるのかを指定する必要があります。これは、インターフェースデザイナーで行う必要がありますが、まずマクロのタイプを標準マクロから反復マクロに変更する必要があります。
その上で、インターフェースデザイナーを開いていくのですが、その前にもう一つ準備しましょう。反復したい入力、出力の名前を変更します。入力名もしくは出力名にRなどとつけておきます。また、アンカー省略形のところもRなどと入れておきましょう。
これによりインターフェースデザイナーで目当ての入力・出力を見つけやすくなります。
ところで、反復マクロは何回繰り返すのでしょうか?これは2つ条件があります。
- 最大反復回数で指定された回数
- 繰り返し出力にデータがなくなったとき
1はインターフェースデザイナーで指定します。2は、自分で条件を組み込みます。つまり、フィルターツールなどを使います。今回のようなケースでは何回繰り返すかわからないため、フィルターツールを使って終了条件を組み込む必要があります。
「Goal」と「To」が同じになるまで繰り返せば欲しいデータが得られます。つまり、フォーミュラツールの後段にフィルターツールを追加します。
設定としては、以下のような式となります。
[Goal]!=[To]
GoalとToが異なっていれば、セレクトツールがある側の繰り返し出力側にデータを流します。GoalとToが同じであれば、下側の出力に流します。つまり下側の出力が欲しいデータとなります。
さて、いよいよインターフェースデザイナーです。プロパティを設定していきますが、ポイントは以下の通りです。
反復入力、反復出力は、同じフォーマットのデータをぐるぐるまわす入出力をセットで選びます。つまり、ワークフローの繰り返し用の入力、出力の置き方を少し変えてみると、以下のようなイメージとなります。
最大反復回数は適当な数値にしましょう。場合によっては反復回数が決まっているようなこともあるかと思います。
また、残りの「最大反復回数に達したとき」「出力モード」は基本的に上の図の通りで問題ありません。
これをワークフローに組み込むと、以下のようになります。
得られる出力は以下のようになります。
まとめ
基本を抑えておけば、反復マクロもそれほど難しくはありませんが、ロジックの組み立て、デバッグなどは実は結構難航することがあります。そのあたりはまた別途紹介していきたいと思います。
反復マクロを作る流れはだいたい以下のように進めることをおすすめします。
- 1回分の処理を作ってみる
- 反復入力・出力の名前をわかりやすくつける
- ワークフロータイプを反復マクロに変更する
- インターフェースデザイナーで反復入力・出力、繰り返し回数、最大反復回数に達したとき、出力モードを設定する
- 終了条件を組み込む
- ワークフローに作った反復マクロを組み込む
どうしても反復マクロが使いたい、といったケースは限られてきますが、そのようなケースにあたった際はなかなかレアケースで悩むと思いますので、基本を抑えて作ってみてください。
コメント