Dynamicsの計算フィールドで今年の誕生日や年齢を算出

ちょっと仕事で使う機会があったので備忘録として。
以前、計算フィールドでの年齢の算出を断念していましたが、できることが分かったのでその設定方法です。

今年の誕生日を算出

まずは、今年の誕生日を算出してみます。

まずは、計算の元となる誕生日を作成。

ここで重要なのが、動作の選択欄を「ユーザーローカル」に設定すること
日付だけをもつ項目ですが「日付のみ」には設定しないでください。

理由は後述しますが。

次に、今年の誕生日を計算フィールドで作成します。
計算フィールドを以下のように定義します。

ここも同じように、動作の選択欄を「ユーザーローカル」に設定します。

計算式は、このように設定します。

まず、DIFFINYEARS関数で、誕生日と本日日付の年数の差分をとります。
そこで得た差分を誕生日に加算して、今年の誕生日になるように、ADDYEARS関数で引き上げています。

ここで、注意点として、DIFFINYEARS関数は年月日の年部分のみの差分で計算していること
例えば、2018/12/31と2019/1/2でDIFFINYEARSをかけた場合、日数の差としては2日だけですが、結果は1として返却されます。
年である、2018と2019だけを見て差分を出しているためです。

丸々1年経たなくても年数の差分が出てしまうので計算方法を間違えないようにしましょう。

ちなみに、例として、1/1ではなく1/2としたのは、ユーザーローカルで設定しているため、実際の日付ではなく、基準時間(アメリカ時間?)で計算処理がされるため、1/1だと12/31で計算処理されてしまうらしいです。
そのため、あえて1/2をサンプル例としています。

また、前述した動作欄を「ユーザーローカル」にしないといけない理由として、「日付のみ」に選択してしまうと、このように数式で扱えなくなります。

取引先担当者に標準で入っている生年月日(birthdate)項目は動作が「日付」のみとなっているため、年齢の算出ができません。
カスタム項目を使用しましょう。

誕生日から本日時点の年齢を算出

今年の誕生日を算出したところで、次は年齢を算出します。

年齢算出するロジックとしては簡単で、今年の誕生日が過ぎているか否かで年齢を調整します。
今年の誕生日<=本日日付→DIFFINYEARS(誕生日,本日日付)
今年の誕生日>本日日付→DIFFINYEARS(誕生日,本日日付)-1
となります。

判定材料として本日日付が必要となりますが、計算フィールドの条件式にNOW()は直接使用できないため、本日日付項目を計算フィールドで作成します。

このように作成し、計算式はNOWをぶち込むだけでOKです。

あとは、年齢を計算フィールドで作成します。

上記のロジックを計算フィールドに当てはめればOKです。

動作確認

最後に動作確認を。

誕生日以前のケースで入力

誕生日以降のケースで入力

このように境界値条件もバッチリです。

Dynamics
スポンサーリンク
エスパーラボ

コメント