【Tableau】生年月日から年齢を算出する方法をわかりやすく解説!

今回は生年月日から年齢を算出する方法について紹介する。

顧客管理システムなどでは、画面に年齢が表示されているが、いざTableauに接続してデータを取得してみると生年月日しか取得できない、ということがよくある。

「使いたいのは年齢なのに、、、」

と嘆きたくなる時があるが、その場合は計算フィールドを駆使して生年月日から年齢を作り出していく必要がある。

例えば、下記のようなデータだ。

顧客データ

本記事では生年月日から年齢を作り出す計算フィールドを紹介した上で、数式の意味まで詳しく解説していきたいと思う。

スポンサーリンク

生年月日から年齢を作りだす方法

生年月日のデータから年齢を作り出すには下記計算フィールドを作成する。

 

上記の計算フィールドを適用すれば、下記のように生年月日から年齢が作り出せていることがお分かりいただけると思う。

 

年齢算出①

上記計算フィールドの数式をコピペして、それぞれのデータの生年月日を表示しているカラムへ置き換えれば、年齢を算出することはできるはずだ。

Tableau Prepの場合の注意点

Tableau Prepの場合、現状はDATEADD関数DATEDIFF関数とIF関数を1つの計算フィールドで組み合わせられないので、DATEADD関数の式やDATEDIFF関数の式をそれぞれ計算フィールドで作成しておく必要があるので注意してほしい

ただ、上記計算フィールドはやや複雑なため、ぱっと見だとなかなか理解できないと思う(私がそうだった(笑))

よりTableauスキルを高めたい方はこれから数式の解説をしていくので是非参考にしてみて欲しい。

計算フィールドの解説

生年月日から年齢を算出する計算フィールドの数式がどんな意味になっているかを分解しながら確認していこう。

IF関数での条件分岐

まず大きな構成として、IF関数での条件分岐がある。

IF関数は下記のように条件によって、値を出し分けてくれる論理関数だ。

年齢算出②

ちなみにELSEIFは省略が可能で、今回の計算フィールドでも省略されている。

実際に年齢を算出する計算フィールドに当てはめてみよう。

1つ1つの条件式や値を算出する式が長いから、構造がかなり分かりにくいが、下記構造になっている。

年齢算出③

ELSEIFが省略された形のIF関数による条件分岐になっていることがお分かりいただけると思う。

構造は整理できたので、ここから1つずつの各条件式や値を算出する式を細かく見てみよう

条件式①の意味

条件式①の部分が非常にわかりにくいのだが、この式で「今年誕生日を迎えているかどうか?」を判定している。

DATEADD関数の中にDATEDIFF関数が入り込んでいる形なので、構造がわかりにくいのだ。

条件式を整理してみると、下記のように3つの要素が入っている。

年齢算出④

①DATEDIFF関数で生年月日と今日の日付の差の年数を算出

①においては、DATEDIFF関数を使用して今日の日付(TODAY関数で算出)と生年月日の期間を算出して、その年数を取得している。

実際にこのDATEDIFFの式部分だけを取り出してみると下記のような結果になる。

年齢算出⑦

今日の日付(2022年12月30日)の年は2022年なので、2022から各顧客の生年月日の年を引いて数値を出している。

例えば、会員番号10000001の谷奥 大地さんの生年月日は1989年4月20日なので、年は1989となる。

そのため、DATEDIFF関数で取得している年は2022-1989=33 となる。

DATEDIFF関数の使い方を詳しく知りたい方は下記にまとめているので参考にして欲しい。

②DATEADD関数で①で取得した年数を生年月日に足す

②においては、DATEADD関数を使用して、①で取得した年数を生年月日に足して、今日の日付と比べられるように年を合わせている。

ここがかなりわかりにくいと思うが、具体的な数値を入れてみるとわかりやすくなる。

例えば、会員番号10000001のデータ(生年月日が1989/4/20)を②の式に当てはめてみると、下記のようになる。

年齢算出⑧

このようにDATEDIFFの式で取得する値を具体的に当てはめてみると、単純なDATEADD関数の式になるので理解しやすくなるはずだ。

DATEADD関数の使い方を詳しく知りたい方は下記記事で詳しく解説しているので参考にして欲しい。

③ ②で計算した日付と今日の日付を比較する

条件式①の最後は②で計算した日付と今日の日付を比較するだけなので、①と②が理解できていれば簡単だ。

年齢算出⑩

数式の結果としては下記だ。

DATEADD関数の式で取得した値とTODAY関数から取得した今日の日付を比べている。

年齢算出⑨

この2つを比較して、

「今日の日付より②で取得した値が大きかった場合はTRUEを返す」=「今日の時点で誕生日を迎えていない場合はTRUE、迎えている場合はFALSEを返す」

というのが条件式①の意味だ。

値①の意味

前述した条件式①がTRUEだった場合=今年誕生日をまだ迎えていない場合に表示させる年齢が値①となる。

この式の意味も確認しておこう。

年齢算出⑪

正直、条件式①が理解できれば、これ以降はすごく簡単だ。

年齢算出⑫

①のDATEDIFF関数の部分は条件式①でDATEADD関数の式の中に組み込まれていた式と全く一緒だ。

つまり、「今日と生年月日の期間を算出してその年数を取得する」という意味になる。

それを②の-1で1年マイナスしている。

例えば、下記の場合、正しい年齢は32歳だ。

  • 生年月日:1989年4月20日
  • 今日:2022年4月19日
    ※誕生日を迎える前日

まず、①のDATEDIFF関数の式で年数が33と計算される。

それを-1するので、値①の結果は32となり、正しい年齢となる。

誕生日を迎える前は生年月日と今日の年数差からマイナス1するのが正しい年齢になるため、このような計算式になっているのだ。

値②の意味

値①は誕生日を迎える前の年齢を算出するための値だった。

一方で値②に関しては既に今年誕生日を迎えた人の年齢を算出するための値である。

年齢算出⑬

数式は条件式①にも値①にも出てきたDATEDIFF関数の式なので、全く一緒だ。

生年月日と今日の日付の年数差を取得しているだけだ。

計算フィールドの意味

今まで説明してきた内容を整理したのが下記だ。

年齢算出⑭

つまり、条件式①で今年誕生日を迎えているかどうかを判定し、誕生日をまだ迎えていなければ、生年月日と今日の年数差をマイナス1して表示し、誕生日を迎えている場合は生年月日と今日の年数差をそのまま表示させる、というのが生年月日から年齢を算出する計算フィールドの意味だ。

まとめ

だいぶ長くなってしまったが、今回は生年月日から年齢を作り出す方法を紹介した。

単純に計算フィールドをコピペして使うのではなく、「なぜこの関数を使う必要があるのか?」まで理解できると応用の幅が広がっていく。

数式を明確に理解しておけば、自分でその計算フィールドを修正して使うことが出来るようになっていくので、是非そのレベルまで理解することを目指してほしいと思う。

 

スポンサーリンク
おすすめの記事