Alteryxではワークフロー内でループを行うような処理を作成できません。
データ分析のためのツールであるという性質上、処理内容はVectorizeされたもので実現できるため困る場面はあまり多くはありません。
多くはありませんが、例として以下のような場面を考えてみましょう。
通常であれば複数ファイルを読み込む際はワイルドカードを利用することで実現可能ですが、上記のような例の場合それではうまくいきません。
Amazon S3 Donwloadツールはワイルドカードに対応していませんし、Input Dataツールで複数ファイルを読み込む際は形式が一致してる必要があります。
バッチマクロを利用すると読み込み対象のファイルリストさえ用意すれば個別のファイルごとに処理が実行され、その結果を1つにまとめることが可能になります。
まずは、バッチマクロがどのようなものでどういた動きをするかを見ていきましょう。
バッチマクロでは入力に通常のMacro Inputツールの他、Control Parameterツールを利用します。
Control Parameterツールはバッチマクロ専用のツールで、ワークフロー上に配置すると「?」を逆さまにした入力が追加されます。
Control Parameterツールは通常の入力と異なる動きをします。
この動きを確認するために、以下のようなデータを用意します。
このデータをControl Parameterの入力として設定値の「Choose Field: Control Parameter」で「四天王」列を選択します。
この時バッチマクロは全部で4回実行されます。
マクロの内容を以下のように変更して実行してみます。
Text InputツールはFormulaツールが入力必須のため、1行のダミーデータを入れています。
Formulaツールでは、2つの列を生成しています。
data列はControl Parameterから受け取った値をそのまま入れています。
iter列はバッチマクロやIterativeマクロで利用可能な"今何回目のループか"の情報が入った定数を取得しています。
このマクロを保存して、先ほどの四天王のデータに対して使うと以下のような結果を得られます。
ループ回数の値は0から始まるので、動きとしては以下のようになります。
このような動きとなるため、Control Parameterツールに入力さえたすべての値とダミーの入力が結合され、ループカウントであるEngine.IterationNumberが出力された状態となります。
ここまでの内容は、バッチマクロを使わなくても実現できるものです。
バッチマクロを使わないと実現できない例を見てみましょう。
ここでは複数のExcelファイルを読み込む、ということをしてみたいと思います。
以下のような2つのデータがあるとします。
1つ目のデータはname列にスペース区切りでフルネームが入っています。
一方2つ目のデータはfirstname列、lastname列に分かれた状態でデータが入っています。
Alteryxで複数ファイルを読み込むときには通常、「\*」や「?」などのワイルドカードを使ってしてます。
しかし、このようにデータの内容が異なる場合は以下のような警告が出て、2つ目のデータが読み込まれません。
警告なので、このまま後続の処理は実行されるのですが、一部のファイルが読み込まれていない状態となるため期待するものとは異なる結果になるでしょう。
また、後続の処理が実行されてしまうため最終的な出力内容によっては一部ファイルが読み込めていないことに気付きづらい場合もあります。
こういった場面でファイルを適切に読み込むための仕組みを実現しようと思うと、Input Dataツールを2つ使って読み込んだのち、Unionツールでつなげるという方法も考えられます。
このワークフローでは2つの複数ファイルを読み込んだのち、「Auto Config by Name」でUnionしています。
その後、Name列がnullの場合、firstname, lastname列から作成し、これら2列をSelectツールで削除しています。
ファイル数が少ない場合このやり方でもいいのですが、ファイル数が多い場合や時間経過とともにファイルが増えていく中で同一のワークフローを定期的に回し続ける必要がある場合には管理が煩雑になることが予想されます。
そんな時にバッチマクロを使うことで、処理を汎用化できます。
以下のようなバッチマクロを作成します。
ファイルを読み込んで出力する、というだけの簡単なバッチマクロです。
Control Parameterで入力対象となるファイルをループ処理させているので、すべてのファイルが読み込まれたのにUnion結合されて出力されます。
このバッチマクロを利用する側のワークフローでは読み込むファイル一覧を渡します。
実行すると以下のようにエラーが発生します。
これは、Unionする際に書く出力での列の数や名前が一致していないというエラーです。
このままではワイルドカードを使ったときの問題が解決できていません。
実はバッチマクロはUnionツールと同様、どのように結合するかを設定で変更可能です。
この設定はインターフェースデザイナーで行います。
左メニューから歯車のアイコンを選択し、Output Mode > Auto configure by Name を選択します(デフォルトではスキーマが異なる場合エラーとする設定になっています)。
これで改めて、ワークフローを実行すると以下のように結合された結果が出力されます。
最後にこれを整形してやれば、欲しい形での出力が得られます。
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.
ここにコメントを追加するには、ご登録いただく必要があります。 ご登録済みの場合は、ログインしてください。 ご登録がまだの場合は、ご登録後にログインしてください。