AMP Engine下で同じExcelファイルに書き込む方法をご紹介します
一つのExcelファイルに一度に複数のシートを書き込む際、Alteryxの新しいAMP Engineを利用すると、旧エンジンで行っていた「完了までブロック」ツールを単純に挿入するだけではうまく動きません。今回はこれをうまく動作させる方法について解説します。
一つのExcelファイルへの書き込みについて
Alteryxで分析した結果を一つのExcelファイルに集約して社内展開、といった事例はよくあるかと思いますが、何もせずに単純にデータ出力ツールで同じExcelファイルに追加書き込みするとエラーが発生すると思います(経験的には3シート目からエラーが出ることが多いですが・・・)。
このような際は、完了までブロック(Block Until Done)ツールを利用することでエラーを回避できます。
利用する際は、とにかくデータ出力ツールの手前に配置すれば動作します(あまりにも大量になると動かないケースがあるので、そのような際はCrewMacro fa-share-square-oのParallel Block Until Doneの利用も検討してみてください)。
※赤枠のツールを追加
ただ、Alteryxの新しいエンジン「AMP Engine」を利用しようとすると、この方法ではうまく動きません。
AMP Engine利用下での一つのExcelファイルへの書き込みについて
AMP Engineとは?
さて、AMP Engine(Alteryx Multi-threaded Processing Engine)はマルチスレッドを利用して高速動作させる機能で、Alteryx 2020.2で実装された機能です。最近はコア数が多いCPUも増えてきましたので、モダンなハードウェアを有効活用できる機能です。
バージョン2020.4の時点では、ワークフロー設定のところでオン・オフが可能で、デフォルトでは「オフ」に設定されています。高速動作するこの新しいAMP Engineですが、仕様が変わっているツールがあるため、今までのワークフローのままでは動かないケースがあります。
先程動いていたワークフローも以下の通り「失敗」します。
なお、AMP Engineは、ワークフロー設定のランタイムタブにて設定可能です。
AMP Engine下で一つのExcelに書き込む
いよいよ本題の「AMP Engineを有効にした状態で一つのExcelファイル複数シートを書き込む方法」ですが、2つ方法を紹介します。
1.完了までブロックツールの位置を変える
Alteryxのヘルプによると「完了までブロック」ツールはAMP Engineでは以下のように使うように記載されています。
複数の分岐 (主に入力から出力までのストリームを分離) でワークフローを操作する場合は、入力ツール ID が最も小さいワークフローブランチに BUD ツールを配置します。これにより、後続のすべてのブランチは、前のブランチが完了し、ツールが期待どおりに動作するまで実行を待機します。
これに従ってやってみようとすると、、、サンプルがないので、実際何が正しいやり方なのかよくわからないのですが、とりあえず動くパターンをご紹介します。
①で分岐させて、②のフィルタツールを追加しています。②のフィルタツールは、すぐ上にあるフィルタツールをコピーして使っています。
正直なところ、フィルタツールをコピーするというのがあまりスマートではないですね・・・。
2.ブロッキングツールを利用したフロー制御
データの分岐に使うフィルターツールをコピーしないようにすると、以下のようなワークフローで実現可能です(AMP Engineを利用しないケースでもワークフローの実行順序制御によく使われる方法に近いです)。
まず、①は「Sheet1」(上段のデータ出力ツール)とそれ以外のところ(中断、下段)の分岐でエラーが起きないようにするために必要です。
ここで特徴的なのは、②の「完了までブロック」ツールの出力3にレコードカウントツールを接続し、その結果をSheet3のデータストリームに「フィールド付加」しているところです。これを行うことで、Sheet2の保存が終わってからSheet3側の処理に移るようになります。
これはワークフローの動作の順序をブロッキングツールの性質を用いて制御している、ということになります。
なお、一つのワークフロー内で一度保存してから再度読み込むといった動作を行う際もこのテクニックは流用可能です。
「ブロッキングツール」とは何か?ということについては、Alteryx周期表(The Periodic Table of Alteryx tools fa-share-square-o)のCommunityの記事に書かれていますが、一旦ツール内に全てのデータを溜め込んでから処理を行うツールのことです(例:レコードカウント、集計、クロスタブ、ソート等)。
ちなみに、複雑なワークフローになってくると、また工夫が必要になるケースも出てくるかと思いますのでご了承ください(コミュニティやお問い合わせでご質問ください)。
サンプルワークフローダウンロード
AMP_Enabled_BUD fa-download
※Alteryx Designer 2020.4.5.12471時点の情報です