ふらりのメモ書き

Microsoft 365 , Power Platform らへん

【Power Automate】集合で配列を操作する

Power Automate のクラウドフローでは、和集合(union )や積集合( intersection )のワークフロー関数は用意されていますが、よく使うだろう差集合 (differrence) や 対称差集合(symmetric difference) などの関数は用意されていません。
関数とアレイのフィルター処理アクションを組み合わせることで取得できたのでメモ書きです。

集合とは?

集合については、wikiopadia にてご確認ください。
Power Automate のクラウドフローの場合、重複を1つにまとめてすべての要素を取得したり(union)、共通部分の要素を取得したり(intersection)するような使い方をします。

wikipadia から引用
集合(しゅうごう、英: set, 仏: ensemble, 独: Menge)とは数学における概念の1つで、大雑把に言えばいくつかの「もの」からなる「集まり」である。集合を構成する個々の「もの」のことを元 (げん、英: element; 要素) という。

ja.wikipedia.org

配列Aと配列B

配列A

Name

配列A  

Type

Array  

Value

[
  "111",
  "222",
  "333",
  "000"
]  

配列B

Name

配列B  

Type

Array  

Value

[
  "444",
  "555",
  "666",
  "000"
]

和集合

和集合は 配列Aと配列Bのすべての要素を取得します。
union 関数 があるので、関数を利用して簡単に取得できます。

※ union 関数は重複を排除し1つの要素として取り出しますので、重複を排除したくない場合には注意が必要です。(2024/02/23 追記)

作成アクションを追加し、union 関数で式を作成します。

Action: 作成
入力

union(variables('配列A'),variables('配列B'))  

実行結果
配列Aと配列Bのすべての要素が取得できます。

積集合

積集合は 配列Aと配列Bの共通部分を取得します。
intersection 関数があるので、こちらも簡単に取得できます。

作成アクションを追加し、intersection 関数で式を作成します。

Action: 作成
入力

intersection(variables('配列A'),variables('配列B'))  

実行結果
配列A と 配列B の共通の要素を取得できます。

差集合

差集合は 配列Aと配列Bのうち、配列Aにのみ含まれる要素を取得します。

こちらは関数がないので、アレイのフィルター処理 アクションを利用します。

Action: アレイのフィルター処理
From

variables('配列A')

Filter Query
※詳細設定モードに変更して入力ください。

@not(equals(@{contains(variables('配列B'),item())},true))

実行結果
配列Aにのみ含まれる要素が取得できています。(Output の項)

対称差集合

差集合は 配列Aと配列Bのうち、配列Aと配列Bのうち共通要素を含まず、その他のすべての要素を取得できます。

こちらも関数がないので、関数とアレイのフィルター処理 アクションを組み合わせて利用します。
アレイのフィルター処理アクションを追加します。

Action: アレイのフィルター処理
From

union(variables('配列A'),variables('配列B'))

Filter Query
※詳細設定モードに変更して入力ください。

@not(equals(@{contains(intersection(variables('配列A'),variables('配列B')),item())},true))

実行結果
差集合は 配列Aと配列Bのうち、配列Aと配列Bのうち共通要素を含まず、その他のすべての要素を取得しています。 (Output の項)

さいごに

対称差集合は、union 関数、intersection関数とアレイのフィルター処理アクションを使うので少し難しくなりますが、集合をうまく活用すると目的のデータを取得し操作しやすくなります。

また、フローをシンプルに仕上げることもできますので、数学的な考え方大事ですね!