WeeklyAlteryxTips#61 異なるスキーマのデータを同じExcelブックの異なるシートに保存する1

Alteryx

一つのExcelシートに異なるフォーマットのデータを異なるシートに書き込む際、2023.1で実装されたコントロールコンテナを使えば簡単に制御できますが、それ以前のバージョンをお使いの場合、もしくはコントロールコンテナが何かしらの理由で使えない場合に備えて別の方法も紹介したいと思います。

同じスキーマの場合

同じスキーマのデータを一つのExcelブックの異なるシートに保存する場合は、簡単です。チェックボックス一つオンにするだけです。これは過去のWeekly Tipsで紹介しました。

データ出力ツールで以下のように「フィールドからファイル/テーブル名を取得する」オプションを使うだけです。

これで、以下のようなExcelブックができあがります。

異なるスキーマの場合

スキーマが異なる場合、この方法は使えません。「フィールドからファイル/テーブル名を取得する」オプションを使うためには、一つのデータストリームにまとめる必要があります。しかし、これを行ってしまうと、あるデータでは存在する項目が他のデータでは存在しないため、そのようなデータはNullになってしまい、さらにフィールド名も不要なものが作成されてしまいます。

例えば、Itemマスタがあります。

他にレシートデータもあります。

これをユニオンツールでまとめると以下のようになってしまいます。

これは望むものではありませんが、Excelに保存された結果としては、以下のようになります。

我々がほしいのは以下のようなExcelブックです。

コントロールコンテナを使って書き込む

2023.1以降であれば、コントロールコンテナを使って別々に書き込むことができます。ワークフローとしては以下のように構築するだけです。

コントロールコンテナの使用には、AMP Engineが必須となるのでご注意下さい。何らかの理由でコントロールコンテナやAMP Engineが使えないケースもあるため、このテクニックが使えない場合は、以下のようにBUD(完了までブロックツール)を使うことができます。

これにより、以下のようにきれいに保存できます。

完了までブロックツール(BUD)を使って書き込む

BUDですが、AMP EngineとE1エンジン(AMPを使わない場合)で動きが異なります。E1の場合はデータ出力ツールの直前にBUDを置けばたいてい動きます(ワークフローの組み方によってはうまく動かないケースがあります)。AMPの場合は、なるべく上流でBUDでデータストリームを分ける必要があります。

AMP Engineを使う場合

異なるデータストリームに対して同じExcelブックに書き込む場合、BUDがうまく機能しません。何かしら2つのデータストリームを連携させる必要があります。基本的には、CReW MacroのParallel Block Until Doneの内部構成がそのようなことを行っています。しかしながらやってみるとわかりますが、Parallel Block Until Doneは機能しません。

これの改良型として、以下のようにParallel Block Until Doneの一部を変更することで実現可能です。

ただ、これでもうまくいかないケースもあると思いますので、基本的にAMP Engine利用時はコントロールコンテナを使うのがベストです(理論的にはこれを超えるものはありません・・・そうバグがなければ・・・)。

AMP Engineを使わない場合(E1エンジンの場合)

AMP Engineを使わない場合は基本的に以下のようなワークフローで動作します。

しかし、ワークフローの組み方によってはこれで動かないことがあります。その場合はCReW MacroのParallel Block Until Doneを使ってみましょう。

Parallel Block Until Doneは、1側が書き込み終わってから2側が動くようになっています。複数のデータストリームを扱う場合に有効です。

Parallel Block Until DoneでダメなときはAMP Engineの場合と同様の以下のようなワークフローでいけるケースがあります。

もう一つバッチマクロを用いた方法もありますが、別の記事にしたいと思います(次回!)。

まとめ

  • 一つのExcelブックに複数の異なるスキーマのシートを保存する方法をご紹介しました
  • AMP Engine利用時はコントロールコンテナを利用します
  • AMP Engineを利用しない場合は、完了までブロックツール(BUD)を使います。
  • 上の方法でダメだった場合は、CReW MacroのParallel Block Until Doneを使いましょう
  • その他の方法として、バッチマクロを使う手法があります(次回ご紹介します)

サンプルワークフローダウンロード

次回

バッチマクロを使って今回の方法を行う方法をご紹介します。

コメント

タイトルとURLをコピーしました