Power Automate Desktop|データテーブルを結合する方法

2つのデータテーブルを結合して、1つのデータテーブルを作成したいんだけど、どうすればいい?

という疑問に答えて、Power Automate for desktopを使って明細データテーブルとマスタデータテーブルを結合する方法を解説します。

こんにちは。完全自動化研究所のこさいです。Power Automate for desktopにはデータテーブルを結合するアクションは存在しません、今のところ。でも、図1のフローのように簡単に2つのデータテーブルを結合できたらいいですよね。「Excelを利用すること」「独自にフローを作成すること」で実現してみたいと思います。

図1:データテーブルを結合するフロー

図1のフローを含めて、すべてのフローはダウンロードできます(会員様限定)。フローのダウンロードページからダウンロードしてください。

この記事を書いた人
この記事を書いた人
こさい
こさい

(株)完全自動化研究所代表のこさいです。

1) エンジニア歴25年超。RPA開発および支援8年超
2) RPA関連の書籍を5冊出版。現在はGPT×PADの書籍を執筆中!
3)当サイトのプレミアム会員募集中!無限回答、動画見放題。詳しくはこちら

データテーブルを結合する方法

図1のフローでは、「dtDetail」と「dtMaster」という2つのデータテーブルを作成し❶❷、3ステップ目で「Master結合」という外部フローを呼び出しています。実際のデータのイメージは図2で説明します。

dtDetailは売上明細データをイメージしています。dtMasterは顧客CDを主キーとしたマスタのイメージです。dtDetailの[顧客CD]列とdtMasterの[顧客CD]列を結合(Join)して、dtMasterにある「顧客名」「営業担当者」の情報をdtDetailに引っ張ってきます。

結果は「dtResult」という新しいデータテーブルに格納する仕様です。dtDetailに上書きすれば、dtDetailにdtMasterの列がマージされたようにすることも可能です。

図2:2つのデータテーブルを結合

[Desktopフローを実行]アクションの設定項目

図1❸の[Desktopフローを実行]アクションの設定項目は図3のようになっています。

呼び出す外部フローの名前は「Master結合」です図3❶図1❶❷で作成したdtDetailとdtMasterを図3❷❸に設定します。[外部キー番号(図3❹)」にはdtMasterと連結するdtDetailの列番号を設定します。dtDetailの4列目[顧客CD]で連結するので(図2の左上のデータテーブル参照)、「4」と設定します。[抽出列リスト(図3❺)]はdtMasterから抽出する列番号をリスト形式で設定します。[顧客名]と[営業担当者]を抽出したいので、「%[2,3]%」というリストを設定しています。[モード(図3❻)]はテスト実行なのか本番実行なのかを分けるためのフラグです。フロー[Master結合]を単独で実行したときはテストモードと捉え、このフローのように[Desktopフローを実行]アクションを使って、外部から呼び出した場合は本番モードと捉えるようにします。フロー[Master結合]を単独でデバッグしやすくするための仕組みです。

図3:フロー[Master結合]を実行する際の設定項目

フロー[Master結合]の概要

図3で呼び出されるフロー[Master結合]の概要を図4に載せます。詳細の解説は行っていません。

図4❶はフロー[Master結合]を単独でデバッグしやすくするための仕組みです。入力変数[itxMode]が「Test」以外の時はテストモードと判断し、デバッグできるようになっています。

2つのデータテーブルの結合はExcelを利用して行っています。dtDetail(明細データ)の項目およびデータをExcelに貼り付け(図4❷)、次にdtMaster(マスタデータ)の項目およびデータを2つ目のシートに貼り付けています(図4❸)。

次に明細データにVlookup関数を書き込んで、2つ目のシートに書き込んだマスタデータの値を紐づけます(図4❹)。最後にデータ結合が完了した明細データのすべてを新しいデータテーブルに格納して、Excelを閉じます(図4❺)。

図4:フロー[Master結合]の概要

実行時の動作

図1のフローを実行すると、僕の環境では10秒ほどでフローが完了します。メモリやCPUの性能が高くないパソコンだともっと時間がかかるかもしれません。と、なると「もっと効率的なフローがあるんじゃない?」という疑問も出てきますね。それについて、次のセクションで考えます。

他のデータに適用できる

このように2つのデータをマージするときは「明細データとマスタを互いに全件回しながら突合させればいい」という考えもありますね。明細データを全件ループさせながら、1件ずつマスタデータから該当する顧客CDを探すという方法です。

他にも考えられる方法

データテーブルを結合する方法として、他にも「Excelマクロを使う」「裏でデータベースを使う」「スクリプトを駆使する」など考えられますが、Power Automate for desktopの中であまり難しくない機能を使って実現し、エンジニアレベルじゃなくても理解可能な方法を考えています(マクロは現実的で良い選択肢ですが、今回はテーマが違うので採用していません)。高度なテクニックを使えば何でも実現できますが、もう「Power Automate for desktopじゃなくていい」ということになりますし、会社で使う時、メンテナンスが難しく共有財産となりにくいため、候補から除外しています。

このロジックは図2のデータ件数のように数件なら早いですが、データ件数が多くなるとどんどん遅くなります。図5のように明細データが675件、マスタデータが20件となると、単純計算で675×20=13500回ループすることになります。

明細データの[CustomerCD]とマスタデータの[顧客CD]が昇順にソートされていれば、もっとループ回数を減らすロジックが組めますが、今度は「データテーブルをソートする」というロジックを組まないといけなくなります。このアクションもPower Automate for desktopにはないので、方法は自分で考えないといけません……。

図5:2つのデータテーブルを結合

これらを考えると、フロー[Master結合]のExcelを利用するロジックがシンプルかつ速いわけです。しかも件数が増えても、ほとんど処理時間は変わりません。図5のように件数が多くても、図2のときと違いはありません。5000件まで増やしてテストしてみましたが、10秒以内に処理が返ってきました。

どこまで耐えられるか?

テストはしていませんが、数万件程度なら動くと思います(メモリ容量が十分にあり、CPUもそれなりだったら)。10万件くらいになると、さすがにデータベースを使った方がいいでしょう。Power Automate for desktop+Excelで処理するわけですから、ある程度「簡易的」な処理だという認識でいてください。本格的システムではない微妙なところを自動化できるのが、Power Automate for desktopです。

ちなみにこのロジックは最初に2つのCSVファイルを読み込んでから、フロー[Master結合]を呼び出しています。2つのCSVファイルも。フローのダウンロードページからダウンロードできるので、是非試してみてください。

まとめ

Power Automate for desktopにはデータテーブル結合のアクションがないため、Excelを利用して結合する方法を考えました。細かいロジックは本記事では解説していませんが、考え方は「フロー[Master結合]の概要」に書いていますし、実際にフローをダウンロードして動かしてみると理解できると思います。是非、ダウンロードして使ってみてください。

業務の中で明細データとマスタデータを結合して1つの表を作成したい、というニーズは確実に存在するので、なるべく汎用的に使えるようにしてみました。

「うまく動かない」「意味がわからない」「こういう場合どうすればいい?」などの疑問・質問がありましたら、コメントしていただくか、お問合せフォームからお問合せください。僕がお送りしているメールへの返信でも構いません。よろしくお願いします。直接メールでお答えするか、本記事を更新することでお伝えしたいと思います。それでは、また!

コメント ログインすると書き込めます