Help us understand the problem. What is going on with this article?

Power Automateでの"LookUp"

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つ用意します。

image.png
この中から、customerIdが124のデータのcustomerNameを取り出してみます。

まずは手で配列を用意します。※この部分はSharePointリストを使ったほうが簡単かもです。
image.png

方法1 : Filter + first

Power Appsでも慣れ親しんだ、FilterしてFirstをとるのと同等の操作です。
まずはFilterのアクションで、customerId = 124のデータを取り出します。
この操作では、特にcustomerIdの一意性は保証されていないので、複数のデータが返ってくる想定で、結果は配列になります。
image.png

結果の配列の一つ目のデータ(行)を取り出し、その中のcustomerName列の値をとるには

first(body('Filter_array'))?['customerName']

という数式が使えます。
image.png

ここでやっていることは以下のようなデータ操作です。
image.png

このように、Power Appsと似たような順序で、LookUpができました。

方法2 : xpathの利用

方法の2番目はxpath関数を利用する方法です。xpathとは、xml形式のデータに対して、パスを指定してデータ取得するものです。

xpathを利用する際には、/root を定義する必要があるので、対応する配列も以下のようにしてxml化できるデータにします。
image.png

続くステップで、xml化します。これにはxml関数を使って、関数の引数に、ComposeアクションのOutputsを挿入します。
image.png
得られたxmlは以下のような構造になっています。

result.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()'))

image.png

特にxpathの後半、'/root~以降が難解なので、以下日本語訳です:
image.png
ちゃんとインデントすると少しわかりやすいかもです。または、xmlが事前にわかっていればVS CodeのExtensionで、xpathを評価できたりします。

まとめ

今回はPower Appsでよく使うLookUpのPower Automate版を2つご紹介しました。
このほかにも方法はありますが、単純な値取り出しでは効果が見えづらいので、割愛しています。

  1. Filterアクションの出力結果をfirstで一個だけ取り出し、列(プロパティ)にアクセスする
  2. xmlを作って、xpathを利用してデータを検索する

値の取り出しでは、いずれも一瞬のうちに完了します。2つの操作で差が出てくるのは、特に配列間をくっつける操作(JOIN)した場合のパフォーマンスです。
これについては次の投稿でご紹介します。

h-nagao
PowerApps中毒者です。 毎日PowerAppsのこと考えています。 嘘です。今はPowerAutomateに浮気してます #MoreBeerMorePower
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした