はじめに
Power Apps ではよく使う GroupBy (特定の列でのグループ化) と Ungroup (グループ化の解除) ですが、Power Automateにはありません。
GroupByのほうはあまり使わないかもしれませんが、Ungroup (グループの解除) のほうは、Power Automateでも必要になるケースが結構あるのではと思います。
例えばPlannerのAssignmentsは1つのタスクに対して入れ子になったユーザー情報の配列を持っています。それらの人ごとにタスクをまとめてリマインドするようなケースでは、Assignmentsでのグループ化解除が必要です。
というわけで、Power Automate で GroupByとUngroupに対応する操作を作るときの考え方を紹介します。最後にサンプルのダウンロードリンクを置いてありますので、アクションの中身の詳細はそちらを参照してください。
やりたいのはこういうことです。
Power AutomateでのGroupBy
まず最初にやることは、グループ化する対象の列で重複のない一覧を作成することです。上の例でいえば重複のないdepartmentの一覧を作成します。
これを行うためにはSelectアクションでまず対象の列だけにして、union()関数で重複の排除を行います。
あとは重複が取り除かれた一覧でApply to eachループを実行して、順次配列変数に格納するだけです。
Apply to eachの中では、それぞれのdepartmentのユーザー一覧を配列にして、それをdepartmentとくっつけています。
もっと手軽にはxpathを使う方法もありますが(これはループがない)、テクニカルなので割愛します。
Power Automate での Ungroup
グループ化解除では、元になる配列をそのままApply to eachでループ処理します。
入れ子になっている配列部分に必要な列 (この場合はdepartment列)を追加して、配列変数とunion()で合体させるだけです。
比較的簡単なフローで完了します。
おわり
Power Appsでよく使うGroupByとUngroupをPower Automateで実現するとどうするかという内容でした。
最初に書いたPlannerの例でいうと、タスクでGroupByされている配列を、まずグループ化解除して、さらに今度はアサインされた人ごとにGroupByするような操作をすると人ごとのリマインダーを作れます。
Power Automateのフローをパッケージとしてダウンロードいただけます。以下からどうぞ。