Free Trial

ブログ

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

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

 

  • Amazon S3 Downloadツールを使ってS3上にある複数のファイルを読み込みたい
  • 構造を微妙に異なる似たようなデータのファイルを複数同時に読み込みたい

通常であれば複数ファイルを読み込む際はワイルドカードを利用することで実現可能ですが、上記のような例の場合それではうまくいきません。
Amazon S3 Donwloadツールはワイルドカードに対応していませんし、Input Dataツールで複数ファイルを読み込む際は形式が一致してる必要があります。
バッチマクロを利用すると読み込み対象のファイルリストさえ用意すれば個別のファイルごとに処理が実行され、その結果を1つにまとめることが可能になります。

 

バッチマクロの仕組み

まずは、バッチマクロがどのようなものでどういた動きをするかを見ていきましょう。
バッチマクロでは入力に通常のMacro Inputツールの他、Control Parameterツールを利用します。
Control Parameterツールはバッチマクロ専用のツールで、ワークフロー上に配置すると「?」を逆さまにした入力が追加されます。

 

control_parameter.png

 

Control Parameterツールは通常の入力と異なる動きをします。
この動きを確認するために、以下のようなデータを用意します。

 

data.png

 

このデータをControl Parameterの入力として設定値の「Choose Field: Control Parameter」で「四天王」列を選択します。

 

この時バッチマクロは全部で4回実行されます。

マクロの内容を以下のように変更して実行してみます。

 

batch_macro1.png

 

Text InputツールはFormulaツールが入力必須のため、1行のダミーデータを入れています。

 

dummy_data.png

 

Formulaツールでは、2つの列を生成しています。

 

formula_conf.png

 

data列はControl Parameterから受け取った値をそのまま入れています。
iter列はバッチマクロやIterativeマクロで利用可能な"今何回目のループか"の情報が入った定数を取得しています。
このマクロを保存して、先ほどの四天王のデータに対して使うと以下のような結果を得られます。

 

result1.png

 

ループ回数の値は0から始まるので、動きとしては以下のようになります。

 

  • 1回目のループでControl Parameterに指定されたデータの1件目(バイソン)が取得されて、元データ(dummyのみのもの)にdata列とiter列が追加される
  • 2回目のループで2件目のデータ(バルログ)に対して同様の処理が行われる
  • 3, 4回目も同様
  • 全てのループの結果がUnion結合されて最終的な結果となる

このような動きとなるため、Control Parameterツールに入力さえたすべての値とダミーの入力が結合され、ループカウントであるEngine.IterationNumberが出力された状態となります。

 

実際の使用例を見てみる

ここまでの内容は、バッチマクロを使わなくても実現できるものです。
バッチマクロを使わないと実現できない例を見てみましょう。
ここでは複数のExcelファイルを読み込む、ということをしてみたいと思います。

 

以下のような2つのデータがあるとします。

 

data1.png

 

data2.png

 

1つ目のデータはname列にスペース区切りでフルネームが入っています。
一方2つ目のデータはfirstname列、lastname列に分かれた状態でデータが入っています。
Alteryxで複数ファイルを読み込むときには通常、「\*」や「?」などのワイルドカードを使ってしてます。
しかし、このようにデータの内容が異なる場合は以下のような警告が出て、2つ目のデータが読み込まれません。

 

warning.png

 

警告なので、このまま後続の処理は実行されるのですが、一部のファイルが読み込まれていない状態となるため期待するものとは異なる結果になるでしょう。
また、後続の処理が実行されてしまうため最終的な出力内容によっては一部ファイルが読み込めていないことに気付きづらい場合もあります。

 

こういった場面でファイルを適切に読み込むための仕組みを実現しようと思うと、Input Dataツールを2つ使って読み込んだのち、Unionツールでつなげるという方法も考えられます。

 

union_file.png

 

このワークフローでは2つの複数ファイルを読み込んだのち、「Auto Config by Name」でUnionしています。
その後、Name列がnullの場合、firstname, lastname列から作成し、これら2列をSelectツールで削除しています。
ファイル数が少ない場合このやり方でもいいのですが、ファイル数が多い場合や時間経過とともにファイルが増えていく中で同一のワークフローを定期的に回し続ける必要がある場合には管理が煩雑になることが予想されます。
そんな時にバッチマクロを使うことで、処理を汎用化できます。
以下のようなバッチマクロを作成します。

 

batch_excel1.png

 

ファイルを読み込んで出力する、というだけの簡単なバッチマクロです。
Control Parameterで入力対象となるファイルをループ処理させているので、すべてのファイルが読み込まれたのにUnion結合されて出力されます。
このバッチマクロを利用する側のワークフローでは読み込むファイル一覧を渡します。

 

batch_input.png

 

実行すると以下のようにエラーが発生します。

 

error.png

 

これは、Unionする際に書く出力での列の数や名前が一致していないというエラーです。
このままではワイルドカードを使ったときの問題が解決できていません。
実はバッチマクロはUnionツールと同様、どのように結合するかを設定で変更可能です。
この設定はインターフェースデザイナーで行います。

 

interface.png

 

左メニューから歯車のアイコンを選択し、Output Mode > Auto configure by Name を選択します(デフォルトではスキーマが異なる場合エラーとする設定になっています)。
これで改めて、ワークフローを実行すると以下のように結合された結果が出力されます。

 

batch_output.png

 

最後にこれを整形してやれば、欲しい形での出力が得られます。

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.