【PowerApps】重複の無い連番のID番号の振り方


何をしたいのか?

ソースデータにはID列を作ってPatch関数やSubmitForm関数で外部保存をする時に重複の無いID番号を振っておくと、その後にレコードの編集や削除をする時に便利です。

しかし、簡単そうでしたが、意外と情報が無く、実現するのに苦労したのでここに備忘録しておきます。

Max関数を使う。

Max関数は指定の列の最大値を出す関数なので、それで今現在ID列にある最大値をだしてそれに1を足す。

Max(Database,ID) + 1

良い感じなんですが、Max関数は委任が出来ないのでデータ数が2000を超えたら使えません。ですから使わない方が良いです。

Last関数を使う。

Last関数はそのテーブルの最後のレコードを返します。要は最後に保存されたレコードです。
https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/functions/function-first-last

レコードですので、どの列かを指定する必要があります。前回のレコードのIDに1足した数が今回のIDです。

Last(Database).ID + 1

この関数は委任されるので結構使えます。(2019/10/08修正:すみません、Last関数は委任されません。)さらに、厳密に言うとこの関数でID番号を取得し、実際に外部保存が完了するまでに若干タイムラグがあるので、同じアプリを複数の人で使う場合で、ほとんど同時に外部保存がされた場合は同じID番号が振られてしまう可能性はあります。

GUID関数を使う。

英語圏ではこの関数を使っている人がいます。この関数は連番ではないですが、重複の無い文字列を取得出来ます。
https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/functions/function-guid

GUID()

数式は簡単なのですが、出てくる文字列が長すぎて使い物になりません。

SharePointのID列を使う。

これが僕の結論です。SharePointのリストをデータベースに使う場合ですが、一番シンプルで簡単だと思います。英語ですが、参考リンクを貼っておきます。

SharePointのリストには実はID列が自動で生成されていて、データを保存すると整数の1から順番に連番が振られていきます。これをそのまま利用するのです。

しかし、その列は通常は非表示です。次の手順で表示できます。

対象SharePointリストを表示して画面右の「Add column」、「Show/Hide columns」の順にクリックする。

次の画面で「ID」にチェックを入れて、そのIDをドラッグして一番上まで持っていきます。ちなみに僕は「Title」列は使い難いので使いません。ですので、ここでチェックを外して非表示にします。

そして上の「Apply」をクリックしますが、これだけでは保存されません。

そのちょっと上にある「All Items」、「Save view as」をクリックしてちゃんと保存ができます。

これでID列が表示されてちゃんと連番が作られていきます。これはSharePointの機能ですので確実に重複なしの連番が自動で割当てられていきます。

このIDの名前も変更できますが、PowerApps内では変わらず「ID」で参照することになりますのでご注意ください。ちなみにこのIDは数値型です。