見出し画像

Tableau Prepの作業を変えるTips集17 ー日付の計算ー

Tableau Prepユーザー会のNakajima2です。
24年6月のPreppin' Data課題で、日付に関する処理が多く取り上げられました。
 ・日米欧(英国)での日付記載ルールの違い
 ・Excelがデータソースとなっていた際の年月日の読み取り順序の違い
から、日付を整える処理の難しさが課題対応以外に大きな問題となっていました。

上記への対処もさることながら、データ処理において日付の扱いはたびたび発生するよくよく考えて対応しなければならない事項。
前回報告 でも日付処理に対するTipsを取り上げましたが、今回も2回目のTipsとして整理したいと思います。


Prep Tips (33) : 文字列からの日付作成

24年6月のPreppin' Data課題で、データソースを接続した後の処理で、日付の表記が データにより違ってしまう問題が発生していました。
具体的には、データによって YYYY /DD/MM と YYYY /MM/DD の順になる月日の部分が逆になる現象です。
詳細は、24年6月に出題された2024W25の課題を取り組んだPreppin' Data 勉強会のブログに譲りますが、文字列から日付を作成するTipsが勉強会参加者から多く提示されました。主要なTipsを以下まとめてみます。

1)DATEPARSE 関数 (再掲)

特別にフォーマットされた文字列を日付として返します。汎用的に文字列から日付を作ることが出来る関数です。

構文 : DATEPARSE(date_format, date_string)
出力 : 日付
定義 : <date_format> 引数は <date_string> フィールドがどのように配置されているかを示します。文字列フィールドはさまざまな順序で配置することができるため、<date_format> は正確に一致する必要があります。
詳細については、「フィールドを日付フィールドに変換する」(新しいウィンドウでリンクが開く)を参照してください。

例 : DATEPARSE('yyyy-MM-dd', "1986-03-25") = #March 25, 1986#

2)FINDNTH 関数

2024W25の課題で、月日の部分が逆になる現象が発生していた際に、mitamuuさんが対応したTipsです。

2024W25の課題で、月日の部分が逆になる現象が発生していた例

この例に対し、「日付表示の揺れ」の法則性をデータを確認した上で利用し、「 / 」が最初に出てくる文字の位置を返してくれる FINDNTH 関数を利用して、「日付表示の揺れ」を区別する方法です。
CASE 関数を利用した条件式を用いています。データの中身をよく確認した上で対処している良い例です。

FINDNTH([指定文字列],”検索文字”,n)

FINDNTH 関数の使用例

実際に記載された計算式は、次の通りです。1回の処理で「日付表示の揺れ」を解消しています。

CASE FINDNTH([Date Received],"/",1)
  WHEN 2 THEN DATE(DATEPARSE("MM/dd/yyyy",[Date Received]))
  WHEN 3 THEN DATE(DATEPARSE("MM/dd/yyyy",[Date Received]))
  WHEN 5 THEN DATE(DATEPARSE("yyyy/dd/MM",[Date Received]))
END

FINDNTH 関数の利用例

3)LEFT 関数

MR. もりた からのTipsです。
「日付表示の揺れ」の法則性をデータを確認した上で、データ中の「2023」がデータの最初にあるか無いかを確認し「日付表示の揺れ」を修正する方法です。
シンプルに、こちらも1回の処理で「日付表示の揺れ」を解消しています。

DATE(
     IF LEFT([Date Received],4) = '2023'
     THEN STR( DATEPARSE( 'yyyy/dd/mm',[Date Received]))
     ELSE [Date Received]
     END
)

LEFT 関数の利用例

4)特別な文字列の日付への変換

MR. もりた からのTipsです。
24年6月に出題された課題では、「Current」 などの特別な文字がデータソースに最初から入っているものがありました。
「Current」 など時間に関する意味を持つ文字列の場合、Tableau Prepで日付データとして読み込んだ際に、日付型への変換で特定の日付として表示されるものをリストしました。

2024年6月9日に各文字列が日付型変換で表示される日付の例


Prep Tips (34) : 特別な日付処理 ー 年齢、月末日など ー

1)年齢算出 : 誕生日と基準日の比較から

mitamuuさんが対応した、実務でもよく使う年齢の算出に関するTipsです。
例では、2024年7月1日を基準日として、誕生日を算出する際に利用出来る計算式です。

2024年7月1日を基準日とした年齢の算出例

この算出に用いた計算式は、次の通りです。
上記表では、年齢が見やすいよう、ROUND 関数で小数点2位で丸めています。

floor(datediff('month', [誕生日],[基準日] )) / 12

2)月末、月初日の算出

DATETRUNC関数を利用し、月の初日(毎月1日)と月の末日(毎月最終日)を算出 出来ます。
月末日は実務で会計処理日の算出報告などで利用するケースが多い方もいらっしゃると思います。

特定の期日に対する初日、末日の例(期日の翌月初日も示す)

月初の日
DATETRUNC('month',[期日])

期日の翌月初日
DATEADD('month',1,DATETRUNC('month',[期日]))

月末の日
DATEADD('day',-1,
DATEADD('month',1,DATETRUNC('month',[期日] )))

3)集計処理で日付をグループ化する際に、日付の単位を指定する

yamagushiさんからのTipsです。
24年6月に出題された 2024W24 で集計処理の際に利用されたTipsです。

日付(1日単位)のデータに対し、集計処理をする際に、「グループ化したフィールド」の「グループ」設定欄に 「レベルごとにグループ化」 というメニューがあります。
これを選択すると、分〜年、開始分〜年の開始 など様々な日付の単位で集計方法を変えることが出来ます。集計単位を変えるために、予め「週」などに日付データを関数で事前処理しておく必要は無く、このメニュー1回で日付単位を変更することが出来ます。

集計処理での「グループ化したフィールド」設定画面

おわりに

日付の処理は、実務でも利用する機会が多く、フローの処理においてもちょくちょく処理の方法に悩む機会が多いと思います。
今回だけでなく、この先も新たなTipsが出た際にブログを記載したいと思っています。


この記事が気に入ったらサポートをしてみませんか?