Power Appsでアプリを作っているとLookUp関数(指定した条件に合うデータの一番目をとる)をよく使いますよね。
でもPower Automateだと、完全に一致するような関数がないことに気づきます。。
数式のレファレンス→https://docs.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference
配列系の関数見ても、なさそうなんですよ。。(あったら教えてください)
ということで今回は、Power AppsでいうところのLookUpをPower Automateでどう実現するかをご紹介します。
用意する配列
簡単のために、あまり列の多くない配列を1つ用意します。
この中から、customerIdが124のデータのcustomerNameを取り出してみます。
まずは手で配列を用意します。※この部分はSharePointリストを使ったほうが簡単かもです。
方法1 : Filter + first
Power Appsでも慣れ親しんだ、FilterしてFirstをとるのと同等の操作です。
まずはFilterのアクションで、customerId = 124のデータを取り出します。
この操作では、特にcustomerIdの一意性は保証されていないので、複数のデータが返ってくる想定で、結果は配列になります。
結果の配列の一つ目のデータ(行)を取り出し、その中のcustomerName列の値をとるには
first(body('Filter_array'))?['customerName']
このように、Power Appsと似たような順序で、LookUpができました。
方法2 : xpathの利用
方法の2番目はxpath関数を利用する方法です。xpathとは、xml形式のデータに対して、パスを指定してデータ取得するものです。
xpathを利用する際には、/root を定義する必要があるので、対応する配列も以下のようにしてxml化できるデータにします。
続くステップで、xml化します。これにはxml関数を使って、関数の引数に、ComposeアクションのOutputsを挿入します。
得られたxmlは以下のような構造になっています。
<root>
<items>
<customerId>123</customerId>
<customerName>Kei Tsukishima</customerName>
</items>
<items>
<customerId>124</customerId>
<customerName>Shoyo Hinata</customerName>
</items>
<items>
<customerId>125</customerId>
<customerName>Tobio Kageyama</customerName>
</items>
<items>
<customerId>126</customerId>
<customerName>Tadashi Yamaguchi</customerName>
</items>
</root>
ここから、xpath関数でcustomerId=124のデータのcustomerNameを取得します。
結果を先に書くと、以下の数式になります。
first(xpath(outputs('Compose_2'),'/root/items[customerId=124]/customerName/text()'))
特にxpathの後半、'/root~以降が難解なので、以下日本語訳です:
ちゃんとインデントすると少しわかりやすいかもです。または、xmlが事前にわかっていればVS CodeのExtensionで、xpathを評価できたりします。
まとめ
今回はPower Appsでよく使うLookUpのPower Automate版を2つご紹介しました。
このほかにも方法はありますが、単純な値取り出しでは効果が見えづらいので、割愛しています。
- Filterアクションの出力結果をfirstで一個だけ取り出し、列(プロパティ)にアクセスする
- xmlを作って、xpathを利用してデータを検索する
値の取り出しでは、いずれも一瞬のうちに完了します。2つの操作で差が出てくるのは、特に配列間をくっつける操作(JOIN)した場合のパフォーマンスです。
これについては次の投稿でご紹介します。