以前Qiitaでも少し書いた内容ですが、2つのリストがある場合にそのリストを結合する方法を考えます。
ここでは非常に簡単な2つのテーブル、顧客リスト と 注文リスト を結合する場合を取り上げます。注文リストの中にはそれを注文した顧客のID (CustomerID) が含まれていて、これをキーとして結合するようなケースです。
以前もいくつか方法を紹介しましたが、個人的に一番使いやすい方法が JSON Dictionaryの方法だったので、今回はこちらを細かく見ていきます。
準備
データソースは何でもよいですが、簡単のためにExcelのテーブルを使います。
先ほど図で書いたように1つのExcelファイルにテーブルを2つ (顧客リスト, 注文リスト)作成しておきます。Power Automate では 「Excel Online (Business)」コネクターの「表内に存在する行を一覧表示」のアクションでテーブル内のデータを取得できます。
このアクションを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()))
「選択」アクションの前後では、以下のように配列が変換されています。
STEP2
あとは「選択」でできた要素をカンマでつなぎ合わせて、 { }
でくくって、JSON化するだけです。
これには「結合」アクション、「作成」アクション、そして json関数 を利用します。
json関数は、文字列で定義された配列、文字列として書かれたJSONオブジェクト、XMLをJSONに変換してくれる関数です。
今回も文字列として辞書を作成しておいて、最後にjson関数でJSON化します。
「結合」アクションですが、日本語でアクションを探す場合には「参加」と入力してください。アクションの最初の入力には前の「選択」の結果を、結合に使う文字にはカンマ ( , ) を指定してください。
最後に「作成」アクションを追加し、{ }
でくくって、JSON化します。
json(concat('{',body('結合'),'}'))
それほど複雑ではない式で、辞書の作成が完了しました。
結合部分
辞書が完成したら、あとは結合です。
結合には「選択」アクションを使います。注文リストと顧客リストで共通するCustomerIDを使って、顧客辞書から各種情報を取得し、新たな列として定義します。
結合で取得している部分は以下のような式を使っています。
outputs('作成_-JSON_Dictionary')?[concat('Customer_',item()?['CustomerID'])]?['Address']
このうち、 concat('Customer_',item()?['CustomerID'])
は 辞書で定義した形式 Customer_1
を作るための文字列結合です。 つづく ?['Address']
で顧客辞書の特定住所を取得しています。
実際には動作を見ていただくのがよいので、ExcelデータをPower Automateに埋め込んだ版をダウンロードできるようにしました。
ぜひこれを実行してみて、各ステップでどのようにデータが加工されているのか見てみてください。
PowerApps365/JSONDictionary.zip at master · mofumofu-dance/PowerApps365 · GitHub