※本記事の内容は、2024年12月時点の情報に基づいて記載しています。
こんにちは、インフォシェア株式会社DX部の佐々木です。
最近、キャンバスアプリを開発するチームメンバーがこんな関数を書いていました。
ボタンコントロールのOnSelectで、同じ画面の FormMode.New状態のフォームを SubmitForm して新しいレコードを保存した直後の関数です。
Set(
varLatestID,
First(Sort([商品テーブル],ItemID,SortOrder.Descending)).ItemID
);
Patch(
[商品テーブル],
Defaults([商品テーブル]),
{ItemID: varLatestID + 1}
);
レコードの採番機能を関数で実装していたようです。
最後のIDに+1して、新しいIDを作る。関数としてはエラーなく動きそうです。
ただ私はこの関数を見て、思いました。
Max関数って、影薄いんだな....
そう、同じことはMax関数を使えばもっとシンプルにできる。
いうことで、忘れられがちなMax関数についての記事を書いてみます。
Max関数を使えば、冒頭の式が、以下のように簡略化できます。
Patch(
[商品テーブル],
Defaults([商品テーブル]),
{ItemID: Max([商品テーブル],ItemID) + 1}
);
Sort関数とFirst関数を組み合わせて実装していた部分が、一発で処理できました。
Max関数は、Power Appsの集計関数のひとつで、最大値を割り出すために使います。
他の集計関数には、最小値を返すMin関数や、平均を返すAverage関数があります。
Microsoft社の公式Docs
https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-aggregates
具体的なデータで動きを確認してみます。

カーソルが立っているテキストボックスの Text プロパティでMax関数を使っています。
テーブルコントロールには SharePointリスト Cities を設定しています。
テーブル内でも最も人口が多い、東京の「3700」という数値を取得できました。
冒頭で紹介したような例ですが、Max関数を使った採番は最後の手段と考えた方が良いと思います。
複数のユーザーが同時にレコードを作成したときに、同じ番号を生成するリスクがあるからです。
もちろんデータソース側で一意の値のみを許可する設定にして、データソースの更新とエラー処理をしっかり入れるなどの対策はできます。
しかし、そんなことをわざわざするなら、SharePointならID列、Dataverseならオートナンバー列など、サーバー側で採番処理をしてくれる標準機能を使った方が確実です。
それでも要件によっては自前で採番機能を作るしかないこともあります。
同じカテゴリ内のレコード内で連番にしたい とか
同じ起案部署ごとに接頭辞を変えたい とか。
そんなときは、既存レコードから特定の列の最大値を割り出すMax関数は便利です。
月当たりの残業が~時間を超えた社員がいたら何らかの申請を出す。
そんな社内規則があるとしましょう。
そうした場合は、Max関数で最長残業時間を表示しておくことで、申請アクションが必要か否かはひとめで判断できます。

ここまで数値列の最大値を取るケースのみを確認してきましたが
Max関数は日付列でも使えます。
プロジェクト管理のタスク一覧の締切日の列にMax関数を当てれば、締切が最も遠いタスクを取得できます。
と、ここまで書いて気がつきましたが、むしろ知りたいのは締切日が最も迫っている、または遅れているタスクでしょうね。
であればMax関数と同じ要領でMin関数を使えば良いです。
ステータスが「完了」になっていないものに絞ってから、締切日が最も若い日付を割り出す、
というのが現実的かもしれません。
Min(Filter(TaskList, Status <> "完了"), Deadline)
2024年12月現在 Max関数はSharePointおよびDataverseへの委任がサポートされていません。
(SQL Serverには委任できるようです)
データ件数が多いデータソースに対して使うときには注意が必要です。
一方で、冒頭に紹介したSort関数とFirst関数を組み合わせた形であれば、どちらも委任できる関数ですから、データ件数の心配はありません。
どちらの手段も知っておくのが良さそうですね。
と思いつつ、だからMax関数って影が薄いんじゃ...? とも。。。

インフォシェア株式会社では、お客様のニーズに合わせて、導入からカスタマイズ、トレーニングまで幅広くPower Platform支援サービスを提供しています!
お困りごとがあれば、まずは遠慮なくお問い合わせください。