今回はDATEPART関数について解説していきたいと思う。
DATEPART関数とは?
DATEPART関数は日付フィールド(もしくは日付時間フィールド)から、指定した日付単位の値を取り出してくれる関数だ。
DATEPARTを分解すると
- DATE:日付
- PART:部分
となるので、日付の一部分を取得する関数というのはなんとなく理解しやすいかもしれない。
実はDATEPART関数は誰もが自然と使っている関数だ。日付フィールドを列シェルフか行シェルフにドラッグ&ドロップすると自動的にDATEPART関数が使われている。
このようにDATEPART関数は使う機会があまりないかもしれないが、実際は自然と使っている関数なのだ。
今度は計算フィールドを作ってDATEPART関数の使用例を見てみよう。
サンプルスーパーストアの「オーダー日」フィールドから年だけを取り出したい時に、DATEPART関数を使うと下記のように整数で値を返してくれる。
もう1つ例を確認しよう。同じオーダー日から日を取得すると下記のように整数で日にち部分だけを返してくれる。
このようにDATEPART関数を使えば、日付フィールドから年・月・日・曜日などの特定の単位の値を取得することが可能だ。
DATEPART関数の使い方
DATEPART関数の使い方は下記の通りだ。
上図のように下記3つを指定すればOKだ。
- 取り出したい日付の単位を指定(年を取り出したいならyear という感じ)
- 取り出す対象の日付フィールドを指定
- 週の開始日の指定(これは省略可能で、実際ほぼ使わない(笑))
先ほどのオーダー日から日にちを取得した例で具体的に見てみよう。
週の開始日は省略することが多く、使い方はシンプルなので覚えやすいはずだ。
DATEPART関数で指定できる日付の単位は下記の通りだ。
指定可能な日付の単位 | 具体例 |
---|---|
'year' |
年:2022や2023などの4桁の年 |
'quarter' |
四半期の区切り(デフォルトは1月~3月がQ1となっている):1~4 ※会計年度の開始月を変更して区切りを変えることが可能 |
'month' |
月:1~12 |
'dayofyear' |
1月1日から何日経過したかの日数:1月3日なら3となる |
'day' |
日:1~31 |
'weekday' |
曜日を1~7で返す:日曜日=1、月曜日=2、、、 |
'week' |
週:1~52 ※1年間を52週に分割している |
'hour' |
時間:0~23 |
'minute' |
分:0~59 |
'second' |
秒:0~60 |
上記以外にもISO~というのもあるが、私は実務で全く使った経験がないので省略している。
DATEPART関数を計算フィールドで使う時の注意点
DATEPART関数を計算フィールドで使う場合には1点注意が必要だ。
それはDATEPART関数の結果は数値(整数)型で返ってくる点だ。
日付を特定の単位に丸めるDATETRUNC関数は結果が日付時刻型のフィールドとして返ってくるが、DATEPART関数の場合は数値(整数)型で返ってくる。
そのため、計算フィールドでDATEPART関数を使うと下記のように最初はメジャーとして作成される。
もしディメンションで使いたい場合はメジャーからディメンションに変更してあげる必要がある。
結果が日付型ではなく、数値(整数)型で返ってくるのは、YEAR関数やMONTH関数などと同じだ。
数値で返ってくるから、そのままIF関数の条件式に使えるなど便利な面がある。
まとめ
今回はDATEPART関数について紹介した。
DATEPART関数の特徴を整理すると下記だ。
- 日付フィールドから特定の日付単位の値を取得できる
- 結果は数値(整数)型で返ってくる
- 計算フィールドで作成するとメジャーフィールドとして最初は作成されるので、ディメンションで使いたいなら変更する必要がある
実際、自ら作成する計算フィールドでDATEPART関数を使うことはあまり無いかもしれないが、日付フィールドを扱う時は裏側でDATEPART関数がよく使われていることは認識しておくと良いと思う。
他の日付関数は下記で紹介しているので是非参考にして欲しい。