0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PowerAutomateでオブジェクト配列の重複削除を行う

Last updated at Posted at 2022-07-29

今回はPowerAutomateでフローを作成中に遭遇した困難のトラブルシューティングです。

PowerAutomateのフロー内で、ExcelやSharePointリストなど様々なデータソースから取得したオブジェクトの配列に対して、特定のキー項目を条件に重複を削除したい(ユニークな要素からなる配列を得たい)ことがあります。
しかしこれが案外簡単には行きません。。

Problem

オブジェクトの配列に対して、特定のキー項目を条件に重複を削除したいが、用意されている関数でこれを実現するものがない。
文字列や数値、真偽値の配列であれば、union(<重複削除したい配列>, json('[]')) で済みます。
しかしオブジェクトの配列を特定のキー項目を条件に重複削除したいとなるとこの方法では対応できません。

Solution

アクションと関数を組み合わせて少し複雑なフローを作って対処します。

まずは元データですが、今回は説明のために「作成」アクションでデータを作りました。実際にはExcelやSharePointからデータを取ってくるアクションを使うことになるでしょう:
image.png

今回はこのオブジェクト配列に対して、projectNoreviewerをキーにして重複削除を行ってみます。

前述の通りこのままでは union(...)関数を使えないので、キー情報を連結した文字列からなる配列に変換します:

image.png

  • From: outputs('作成_records')
  • Map: concat(string(item()['projectNo']), '★', item()['reviewer'])

そして、union(...)関数を使ったテクニックを適用します:

image.png

  • Inputs: union(body('選択_keys(projectNo★reviewer)'), json('[]'))

このままではキーが連結された状態のままなので、分離(復元)します:

image.png

  • From: outputs('作成_uniqueKeys')
  • Map:
    • projectNo:int(split(item(),'★')[0])
    • reviewer: split(item(), '★')[1]

これで重複削除した配列ができあがります。

重複していた要素の件数も知りたい場合

ここで、もし「重複していた要素の件数も知りたい」ということになると、もう少し複雑になります。

まずはこのあと重複削除&重複カウントをする上で使用する変数を初期化します:

image.png

先ほど登場した「作成_uniqueKeys」アクションの出力を使ってループを行います:

image.png

  • Select an output from previous steps: outputs('作成_uniqueKeys')

ループの中で、「選択 keys(projectNo★reviewer)」アクションの出力、つまり重複削除前の配列をフィルターします。フィルター条件は「作成_uniqueKeys」アクションの出力(のループ処理中の現在の要素)です:

image.png

  • From: body('選択_keys(projectNo★reviewer)')
  • 左辺: item() ※フィルターの現在の要素
  • 右辺: items('Apply_to_each_uniqueKeys') ※ループの現在の要素

このフィルター結果を活用しながらオブジェクトを作成します:

image.png

  • Inputs:
    • projectNo: int(split(item(),'★')[0])
    • reviewer: split(item(), '★')[1] ※文字列なので「Inputs」の入力欄に記載するとき前後に"が必要
    • count: length(body('Filter_array_keys'))

作成したオブジェクトを先ほど初期化した配列に追加します:

image.png

これで件数もわかるようになりました。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?