Free Trial

ブログ

アナリティクスに関する聡明な考えに触れ、インサイトとアイデアが得られます。
ozawa
ACE Emeritus
ACE Emeritus

Alteryxではワークフロー内でループを行うような処理を作成できません。
データ分析のためのツールであるという性質上、処理内容はVectorizeされたもので実現できるため困る場面はあまり多くはありません。

 

しかし、中には同じデータに対して繰り返し処理を実行した結果を求めたい場合があります。
これは、データ分析の中では

 

  • ある値が収束するまで計算を繰り返す
  • 直前の行の計算結果を利用する必要がある

といった場面が考えられます。
後者の場合Multi-Row Formulaツールを活用するなどで実現できますが、前者の場合通常のワークフローのみでは難しくなります。

 

バッチマクロとIterativeマクロ

バッチマクロについては以前解説しました。
同じループをするマクロでもバッチマクロとIterativeマクロは以下のような違いがあります。

 

batch_vs_iterative.png

 

バッチマクロは"複数のツールの組み合わせ実現すること"を"複数のデータに対して同じように適用したい"場合に有効です。
一方で計算自体はFormulaで行えたり、ワークフロー上でいくつかのツールを配置することで実現できる内容ではあるが、 同じデータに対してそれを何回も繰り返す必要があるなどの状況ではIterativeマクロが有効です。

 

実は、Iterativeマクロで実現できることはIterativeマクロを使わなくても実現可能です。
しかし、その場合同じ処理を何度も繰り返す非常に長いワークフローとなるでしょう。
そういった処理をIterativeマクロ化することでワークフローの実装は一度で済みます。また、同じ処理を何度もコピペなどを使って実装している途中で一部設定を変更し忘れるなどのミスも防げます。

 

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

簡単な例でIterative Macroの動きを見てみましょう。
1から10まで合計値を求めるマクロを作成します。
マクロの内容は以下のようになります。

 

iter.png

 

Iterativeマクロにするための設定

内容の解説に入る前に、Iterative Macro固有の設定を見ていきます。
ワークフローの種類は、MacroのIterative Macroに設定します。

 

iter_conf.png

 

Iterativeマクロの場合、この設定を必ず手動で行う必要があります。
他のTypeであれば

 

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

という、「このツールが配置された場合はこれになる」というトリガーがありますが、Iterativeマクロの場合はそれがありません。

 

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

 

Iterativeマクロのループに関する設定

Iterativeマクロがどのように動作するかの設定はインターフェースデザイナーで行います。
インターフェースデザイナー左メニューからスパナのようなアイコンを選択すると以下のような画面が表示されます。

 

interface.png

 

設定項目と内容は以下のようになります。

 

  • Iteration Input/Output
    • ループに利用するMacro Input/Outputツール
    • Iteration Outputに指定したMacro Outputの出力が次のループのIteration Inputで指定したMacro Inputの入力として扱われる
  • Maximum Nuber of Iterations
    • 最大ループ回数
    • ここで指定された回数ループするか、Iteration Outputに何も出力されなかった場合Iterativeマクロが終了する
  • When Maximum Nuber of Iterations is Hit
    • 最大回数までループしきった場合の動作
    • エラーにして処理中断する, 警告を出して継続, 正常終了とみなすの3が選べる
  • Output Mode
    • n回目のループとn+1回目のループで入力データの形式が異なる場合の挙動

 

Iterativeマクロのループは実際には以下のように展開されたような動きをします。

 

iteration_image.png

 

この際の赤線の部分に相当するコネクションをIteration Input/Outputで指定するイメージとなります。

 

Iterativeマクロで実装した内容を確認する

準備は整ったので、冒頭のマクロの内容を確認していきましょう。

 

iter.png

 

Macro Input/Outputは1つずつしかないのでそれぞれItration Input/Outputに対応しています。
また、最大イテレーション回数は10、最大に達した時の設定は「Output left over records」としているため、10回ループして終了となるマクロです。

 

Formulaツールの設定は以下のようになります。

 

formula.png

 

入力として受け取った値(Field1)に対して現在のループ回数(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が足されることにご注意ください。

Yuya Ozawa

My hobby is to create workflows that prohibit the use of maniac techniques and specific tools. I can use both R and Python, but for the time being, I'll do it with Alteryx. Working in data analysis and machine learning.

My hobby is to create workflows that prohibit the use of maniac techniques and specific tools. I can use both R and Python, but for the time being, I'll do it with Alteryx. Working in data analysis and machine learning.