LoginSignup
4
3

More than 3 years have passed since last update.

Power AppsでのAddColumns = Power Automateでの (Select + addProperty)

Posted at

仮想的な列の追加

データソースから得られるデータに、一時的な計算列を追加したり、あるいは2つ以上のデータをjoinするとき、Power AppsではAddColumnsという関数をよく使います。名前の通り、指定した書式で、列を追加するような関数です。

Power Automateでは、同じような関数として、addPropertyという関数がありますが、これは操作の対象がObjectです。
これにより、一時的な計算列を全レコードに適用!みたいなことができません。

今回はPower AppsでのAddColumnsと同等の操作を、Power Automateでどうやって実現するかを紹介します。

参考:
Power AppsでのAddColumns利用例

状況設定

今回はデータソースがSharePointである場合を考えます。SharePointである必要は必ずしもないのですが、今回の方法が有効なのは、特に列が多かったり、データソース側で、列の追加がわりと起こるような場合です。
列が少ない場合には、@shibatea さんのSelectアクションに関する投稿に書かれているとおり、Selectアクションで、マップのところを加工すればよいのですが、SharePointって既定のビューで指定されているよりもずっとたくさんの列を持っています。
image.png
こんな感じで3列しかないように見えても、データを取ると・・・

{
      "@odata.etag": "\"2\"",
      "ItemInternalId": "7",
      "ID": 7,
      "Title": "Xperia XZ3",
      "Manufacturer": {
        "@odata.type": "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference",
        "Id": 1,
        "Value": "Sony"
      },
      "Manufacturer#Id": 1,
      "Price": 86,
      "Modified": "2019-09-27T13:05:36Z",
      "Created": "2019-09-27T13:05:37Z",
      "Author": {
        "@odata.type": "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedUser",
        "Claims": "i:0#.f|membership|nagao@xxxx.com",
        "DisplayName": "Nagao Hiroaki",
        "Email": "nagao@mofumi.com",
        "Picture": "https://xxx.sharepoint.com/sites/PA_DEV/_layouts/15/UserPhoto.aspx?Size=L&AccountName=nagao@mxxxx.com",
        "Department": "AsuJP",
        "JobTitle": "Specialist"
      },
      "Author#Claims": "i:0#.f|membership|nagao@xxxxx.com",
      "Editor": {
        "@odata.type": "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedUser",
        "Claims": "i:0#.f|membership|nagao@xxxx.com",
        "DisplayName": "Nagao Hiroaki",
        "Email": "nagao@xxxx.com",
        "Picture": "https://xxxx.sharepoint.com/sites/PA_DEV/_layouts/15/UserPhoto.aspx?Size=L&AccountName=nagao@xxxxx.com",
        "Department": "AsuJP",
        "JobTitle": "Specialist"
      },
      "Editor#Claims": "i:0#.f|membership|nagao@xxxxx.com",
      "{Identifier}": "Lists%252fSmartPhones%252f7_.000",
      "{IsFolder}": false,
      "{Thumbnail}": {
        "Large": null,
        "Medium": null,
        "Small": null
      },
      "{Link}": "https://xxxxx.sharepoint.com/sites/PA_DEV/_layouts/15/listform.aspx?PageType=4&ListId=378aa8eb-6d77-4e42-b03a-85f17fad4c72&ID=7&ContentTypeID=0x01003F9EF321DC10F44BAD5859816747F650",
      "{Name}": "Xperia XZ3",
      "{FilenameWithExtension}": "Xperia XZ3",
      "{Path}": "Lists/SmartPhones/",
      "{FullPath}": "Lists/SmartPhones/7_.000",
      "{HasAttachments}": true,
      "{VersionNumber}": "1.0"
    }

いっぱいある・・・。
これらのうち、どれを使うかとか、どれを使わないか、または全部残して次のステップに使いたいような場合、マップに一個ずつ書くのは結構大変です。
また、列が追加されるたびに更新するのもなかなか。。。

そんな時に役立つのが

Selectアクション + addProperty

の方法です。
addPropertyは、元のデータの列構成を変えずに、列を追加、値の設定ができる関数です。ただし配列には使えません。
そこでSelectアクションが有効になってきます。

例として、上のリストに、消費税額(TaxAmount)を追加してみます。

使う数式は

addProperty(item(),'TaxAmount',mul(item()?['Price'],0.1))

これだけです。 mul(....,....)は掛け算するための関数で、ここでは元のデータソースの、Priceに0.1をかけた値をTaxAmountとしています。
操作方法は以下の動画をご覧ください。
output1.gif

たったこれだけです!

結果を見てみると、
image.png

無事列が追加され、想定した値が得られました。
もちろん、元のデータは残っていて、得られる結果は配列です。

まとめ

Power Appsで仮想敵な列を作る際に利用するAddColumnsの対応物をPower Automateで紹介しました。
方法は非常にシンプルで
『Selectアクションの中でaddPropertyを行う』だけです。
またこの方法を応用すると、Power AutomateでのLeft joinも簡単&ループ不要で作ることができます。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3