CDS オートナンバー列（任意のID生成方法もあるよ！）

「オートナンバー」あるいは「自動採番（付番）」の列をご存じでしょうか？

該当テーブルにデータを登録するたびに、番号が「1、2、3・・・」のように自動的にふられていく仕組みのコトです。これを利用すると重複しない連番が得られます。重複しないので、プライマリーキー（主キー ＝ データを一意に判別するための要素）として利用するなどのメリットを享受することが可能になります。SQL Server 経験者の方であれば、テーブル列における自動採番する「IDENTITY」をイメージされているコトでしょう。

さて、Power Apps の文脈でデータソースと言えば CDS ですよね。勿論 CDS にもオートナンバーの仕組みは提供されています。

# 公式情報
関連する Docs を下記にしておきます。

- [フィールドの種類](https://docs.microsoft.com/ja-jp/powerapps/maker/common-data-service/types-of-fields)
- [自動付番フィールド](https://docs.microsoft.com/ja-jp/powerapps/maker/common-data-service/autonumber-fields)

# CDS のオートナンバー列は優秀で便利
例えば、SQL Server の「IDENTITY」列は「1、2、3・・・」というように、数字が増えていくだけです。CDS は単純な数値以外の要素もオートナンバー列に指定ができます。

例えば「西暦4桁＋月2桁＋”-"（ハイフン）＋3桁でゼロパディング（ゼロ詰め）された連番」といった列を、列の設定だけで実現できるんですよ。勿論、末尾の連番はデータ登録されるたびに増加（インクリメント）されます。

　例： 202001-001

なお、この特性は、PowerApps for Teams = Project Oakdale の CDS も同じです。これ、凄く便利ですよね！

# CDS のオートナンバー列
「CDS Project Oakdale」（通称 ”おーくでーるCDS” ※中のヒトが勝手に呼称してるだけ）を利用して、実際の設定をメモしておきます。なお、記事投稿時点では、CDS（無印）と「CDS Project Oakdale」（通称 ”おーくでーるCDS”）の設定方法は同様です。

以降、「おーくでーるCDS」を利用した画面ショットになります。同じ画面に辿り着きたい方は「[CDS #ProjectOakdale の裏技？ #PowerApps](https://qiita.com/yamad365/items/2799a158c275bcd714dd)」を事前にご確認ください。

## 1．オートナンバー列を追加する画面
テーブル（エンティティ）へ列を追加する際は、左上にある「列の追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/0a618172-6cb9-9606-b738-0806beb091d7.png)
右側から”にゅるん”と列の追加設定画面が表示されるので、必要な項目を設定していきます。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/2138eab5-3cf7-6d17-b6ba-cdfe96a6779b.png)
［データ型］の横目で”オートナンバー”を選択することで、自動採番が実現できます。
［最小桁数］は、その名の通り連番の桁数（最小）になります。
［シード値］は、連番の開始番号です。デフォルト 1000 なので、1から開始したい場合はここを修正します。
［プレビュー］で上記の設定結果が”実際にどうなるか？”が確認可能です。

例えば、最小桁数3、シード値が10だった場合、1つ目のデータを登録すると”010”という値が自動的に設定されます。所謂、ゼロ詰め（ゼロパディング）された ID 情報みたいなモノがこの設定のみで実現可能なことが伝わっているでしょうか。

なお、プレビューは設定を変更した場合は必ずチェックするコトをオススメします。ケアレスミスが激減すると思います。こういう細かい便利ポイント、個人的に大好きです。

## 2．CDS オートナンバーの種類
CDS（おーくでーるCDS）には3種類の設定方法が提供されています。
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/ae4c38fd-0c20-b56f-fcb2-dba88577d945.png)

### 2-1．文字列が先頭に付加される数
「固定文字列」＋「連番」が作成可能です。
これはイメージしやすいと思います。
![図7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/6f2718ef-2934-06c7-5e8b-d893e20fdede.png)

### 2-2．日付が先頭に付加される数
「日付」＋「連番」が作成可能です。
![図9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/7798439e-df3d-7397-9f28-a195d8ebc963.png)
一見便利そうですが、日本語環境での利用は注意点があります。
![図8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/0b38e6c7-169d-4475-a0f6-4df6912aac36.png)
上の画面ショットを取得したのは 2020年11月2日 です。画像を確認すると把握できると思いますが”年月日”（＝yyyyMMdd）のような日本人に’なじみのある形式’が選択肢にありません。所謂”海外の表記”になっています。加えて、クラウド上のデータなので世界標準時（UTC）になります。

### 2-3．カスタム
固定文字列や日付などを利用して任意の形式を作成可能です。
”年月日”などを実現したい場合はコレを利用します。

例えば「年月日＋連番4桁」を指定したい場合。
![図11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/004354da-fec5-63f2-92c9-c207acbf54b4.png)

月次でデータを判別したい場合などに便利な「年月＋連番3桁」のような指定も可能です。
![図12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/9fd66066-cda3-4495-f09d-71d36f9a4dc8.png)

その他、指定可能なオプションは下記Docsを参照ください。

[AutoNumberFormatオプション](https://docs.microsoft.com/ja-jp/dynamics365/customerengagement/on-premises/developer/create-auto-number-attributes#autonumberformat-options)

実は、Docs に書かれているようなオプションを覚える必要はなくて、列の追加画面である程度のコトは完結できてしまいます。［形式］のすぐ下にある選択肢を変更すると、シーケンス番号（連番）や日時、ランダム文字列を表すオプションが自動的に挿入される仕組みになっています。
![図10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/26325947-123b-9590-3223-89625c000462.png)
これを利用して、日時を追加 → 年月（yyyyMM）に変更する、という手順が簡単に実施可能です。しかも、紹介済みの[プレビュー]で得られる効果がスグに把握可能なので間違いにも気づきやすいです。ほんと、便利。

# デモ
参考までに、文字列、日付、カスタム、各々3種類のオートナンバー列を追加したテーブル（エンティティ）で動作を確認してみましょう。各列の設定は下イメージ参照。
![図13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/6b74d0c4-e16d-3bbb-90bc-f4175e8f1cfd.png)
追加した後はこんな感じ。
![図14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/fcf16c0c-f1a3-e52e-c1b8-7978f131e5a1.png)

データを追加してみます。
<blockquote class="twitter-tweet"><p lang="en" dir="ltr"><a href="https://twitter.com/hashtag/PowerApps?src=hash&amp;ref_src=twsrc%5Etfw">#PowerApps</a> <a href="https://twitter.com/hashtag/ProjectOakdale?src=hash&amp;ref_src=twsrc%5Etfw">#ProjectOakdale</a> <a href="https://twitter.com/hashtag/CDS?src=hash&amp;ref_src=twsrc%5Etfw">#CDS</a> Autonumber fields <a href="https://t.co/KNYy5GhiQm">pic.twitter.com/KNYy5GhiQm</a></p>&mdash; やま (Yama) (@yamad365) <a href="https://twitter.com/yamad365/status/1323067014928166913?ref_src=twsrc%5Etfw">November 2, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

プレビューで事前確認した結果と同様、期待した状態が確認できますね！
![図15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/9bc78fec-bf46-1465-7a59-51495e949714.png)

# まとめ
- CDS のオートナンバー列は便利
    - 文字列、日時、カスタムの3種類から生成可能
- デフォルト提供されている日時は”日本人向け”ではない
- プレビューで事前確認できて便利！
- 必要に応じてカスタムを利用すると幸せになれそう
    - カスタムオプションも画面で選択可能だよ！

CDS のオートナンバー列、ホントに便利です。アイディア次第で様々なコトに活用できると思いますので、是非覚えておきましょう！（という自戒ですね。使ってないとスグ忘れちゃう汗）

それでは、皆さま、素晴らしい Power Platform Life を！