MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

Power Automate での GroupBy と Ungroup 操作

はじめに

Power Apps ではよく使う GroupBy (特定の列でのグループ化) と Ungroup (グループ化の解除) ですが、Power Automateにはありません。

GroupByのほうはあまり使わないかもしれませんが、Ungroup (グループの解除) のほうは、Power Automateでも必要になるケースが結構あるのではと思います。

例えばPlannerのAssignmentsは1つのタスクに対して入れ子になったユーザー情報の配列を持っています。それらの人ごとにタスクをまとめてリマインドするようなケースでは、Assignmentsでのグループ化解除が必要です。

というわけで、Power Automate で GroupByとUngroupに対応する操作を作るときの考え方を紹介します。最後にサンプルのダウンロードリンクを置いてありますので、アクションの中身の詳細はそちらを参照してください。

f:id:mofumofu_dance:20210909230114p:plain
GroupBy(グループ化)とUngroup(グループ化解除)の例

やりたいのはこういうことです。

Power AutomateでのGroupBy

まず最初にやることは、グループ化する対象の列で重複のない一覧を作成することです。上の例でいえば重複のないdepartmentの一覧を作成します。

これを行うためにはSelectアクションでまず対象の列だけにして、union()関数で重複の排除を行います。

あとは重複が取り除かれた一覧でApply to eachループを実行して、順次配列変数に格納するだけです。

Apply to eachの中では、それぞれのdepartmentのユーザー一覧を配列にして、それをdepartmentとくっつけています。

f:id:mofumofu_dance:20210910004317p:plain
グループ化するフローの全体

もっと手軽にはxpathを使う方法もありますが(これはループがない)、テクニカルなので割愛します。

Power Automate での Ungroup

グループ化解除では、元になる配列をそのままApply to eachでループ処理します。

入れ子になっている配列部分に必要な列 (この場合はdepartment列)を追加して、配列変数とunion()で合体させるだけです。

比較的簡単なフローで完了します。

f:id:mofumofu_dance:20210910005723p:plain
グループ化解除のフロー全体

おわり

Power Appsでよく使うGroupByとUngroupをPower Automateで実現するとどうするかという内容でした。

最初に書いたPlannerの例でいうと、タスクでGroupByされている配列を、まずグループ化解除して、さらに今度はアサインされた人ごとにGroupByするような操作をすると人ごとのリマインダーを作れます。

Power Automateのフローをパッケージとしてダウンロードいただけます。以下からどうぞ。

github.com