MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

Power Automate で2つのテーブルを結合する

以前Qiitaでも少し書いた内容ですが、2つのリストがある場合にそのリストを結合する方法を考えます。

ここでは非常に簡単な2つのテーブル、顧客リスト注文リスト を結合する場合を取り上げます。注文リストの中にはそれを注文した顧客のID (CustomerID) が含まれていて、これをキーとして結合するようなケースです。

f:id:mofumofu_dance:20201011215547p:plain
考えるテーブルと結合後のイメージ

以前もいくつか方法を紹介しましたが、個人的に一番使いやすい方法が JSON Dictionaryの方法だったので、今回はこちらを細かく見ていきます。

準備

データソースは何でもよいですが、簡単のためにExcelのテーブルを使います。

先ほど図で書いたように1つのExcelファイルにテーブルを2つ (顧客リスト, 注文リスト)作成しておきます。Power Automate では 「Excel Online (Business)」コネクターの「表内に存在する行を一覧表示」のアクションでテーブル内のデータを取得できます。

f:id:mofumofu_dance:20201011235940p:plain
Excelのテーブルデータを取得するアクション

このアクションを2つ追加して、それぞれOneDriveに保存したExcelファイルの「顧客リスト」「注文リスト」を読み込みます。

これで準備は完了です。

そもそも

そもそもJSON Dictionaryってなにか?ということなのですが、通常データはフォーマットにかかわらず、上の顧客リストのように配列として構成されていますよね。

JSON Dictionaryは辞書の名の通り、オブジェクトとして、データ内でユニークな値をキーに構成されています。顧客リストでいえば以下のような構成です。

{
    "Customer_1":{ここに名前や住所などの属性},
    "Customer_2":{ここに名前や住所などの属性},
    "Customer_3":{ここに名前や住所などの属性}
}

このように構成しておくと、json?['Customer_1'] (このjsonのCustomer_1をかえして)と書くだけでCustomerID=1の情報が得られます。※配列の場合には、CustomerID=1を探す必要がある。

この形式にすれば、注文リスト内のCustomerID列の値を使って”顧客辞書"を引くことができます。

フローの構成 - 辞書作成

フローとして実行するのは、配列から辞書への変換です。

これには「選択」アクション、concat関数、「作成」アクションを使います。

STEP1

まず「選択」アクションでは、最終的に欲しい各要素("Customer_1":{}の部分)を文字列として作成します。

Customer_1 の "1"部分はそれぞれの行の"CustomerID"から持ってきます。"{ }"部分は各行のデータをそのままいれてあげます。これをPower Automateの式で書くと

concat('"Customer_',item()?['CustomerID'],'":',string(item()))

f:id:mofumofu_dance:20201012005411p:plain
変換アクションでは各行をまず文字列化する

「選択」アクションの前後では、以下のように配列が変換されています。

f:id:mofumofu_dance:20201012005946p:plain
「選択」アクションの前後

STEP2

あとは「選択」でできた要素をカンマでつなぎ合わせて、 { }でくくって、JSON化するだけです。

これには「結合」アクション、「作成」アクション、そして json関数 を利用します。

json関数は、文字列で定義された配列、文字列として書かれたJSONオブジェクト、XMLをJSONに変換してくれる関数です。

今回も文字列として辞書を作成しておいて、最後にjson関数でJSON化します。

「結合」アクションですが、日本語でアクションを探す場合には「参加」と入力してください。アクションの最初の入力には前の「選択」の結果を、結合に使う文字にはカンマ ( , ) を指定してください。

最後に「作成」アクションを追加し、{ }でくくって、JSON化します。

json(concat('{',body('結合'),'}'))

f:id:mofumofu_dance:20201012011013p:plain
辞書作成のステップ

それほど複雑ではない式で、辞書の作成が完了しました。

結合部分

辞書が完成したら、あとは結合です。

結合には「選択」アクションを使います。注文リストと顧客リストで共通するCustomerIDを使って、顧客辞書から各種情報を取得し、新たな列として定義します。

結合で取得している部分は以下のような式を使っています。

outputs('作成_-JSON_Dictionary')?[concat('Customer_',item()?['CustomerID'])]?['Address']

このうち、 concat('Customer_',item()?['CustomerID']) は 辞書で定義した形式 Customer_1を作るための文字列結合です。 つづく ?['Address']で顧客辞書の特定住所を取得しています。

f:id:mofumofu_dance:20201012012004p:plain
2つのリストの結合

実際には動作を見ていただくのがよいので、ExcelデータをPower Automateに埋め込んだ版をダウンロードできるようにしました。

ぜひこれを実行してみて、各ステップでどのようにデータが加工されているのか見てみてください。

PowerApps365/JSONDictionary.zip at master · mofumofu-dance/PowerApps365 · GitHub