【Tableau】生年月日から年齢を自動算出する計算式をステップごとに図解で解説!

Tableauで顧客データを扱う際、「年齢を使いたいのに、生年月日しか取得できない」と困った経験がある人は多いと思う。

そのような場合は、計算フィールドを使って生年月日から年齢を算出する必要がある。

一見複雑そうに見えるが、数式の仕組みを理解すれば非常にシンプルだ。

本記事では、実際に使える計算式とその論理構造を丁寧に解説する。

「なぜこの関数を使うのか?」まで理解することで、Tableauの応用力が格段に上がるはずだ。

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

顧客データ

スポンサーリンク

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

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

上記の計算フィールドを適用すれば、生年月日から年齢が作り出すことが出来る。

年齢算出①

上記計算フィールドの数式をコピペして、対象のカラムを置き換えれば、他のデータでも同様に年齢を算出できるはずだ。

Tableau Prepの場合の注意点

Tableau Prepの場合、現状はDATEADD関数DATEDIFF関数IF関数を1つの計算フィールドで組み合わせられない。

そのため、DATEADD関数の式やDATEDIFF関数の式を、それぞれ個別の計算フィールドで作成しておく必要があるので注意してほしい。

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

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

スポンサーリンク

計算フィールドの解説

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

IF関数での条件分岐

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

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

年齢算出②

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

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

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

年齢算出③

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

IF関数の詳細は下記にまとめている。

さて、構造は整理できたので、ここからそれぞれの条件式や値を算出する式を細かく見てみよう。

条件式①の意味

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

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して表示する。

もし既に誕生日を迎えている場合は、生年月日と今日の年数差をそのまま表示させる。

これが生年月日から年齢を算出する計算フィールドの意味だ。

まとめ

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

  • Tableauでは生年月日しか取得できない場合、計算フィールドで年齢を算出できる。

  • 使用する主な関数は DATEDIFF, DATEADD, IF の3つである。

  • 条件式で「誕生日を迎えたかどうか」を判定し、未到達なら年数差から−1する。

単純に計算フィールドをコピペして使うのではなく、

「なぜこの関数を使う必要があるのか?」

まで理解できると応用の幅が広がっていく。

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

是非そのレベルまで理解することを目指してほしいと思う。

他のTableauに関するよくある質問は下記でまとめているので少しでも参考になれば幸いだ。

Tableauよくある質問一覧

 

 

おすすめの記事