今回扱うDAX関数の種類について
DAX関数の中の「日付と時刻関数」のについて、使い方や実例を紹介しながら解説していきます。
公式ドキュメントは以下を参照してください。
筆者的によく使うものから順に紹介しておりますので、ぜひチェックしてみてください!
事前準備
PowerBI Desktopを開き、左サイドメニューからデータビューを開きます。
「ホーム」タブの「新しいテーブル」をクリックすることで新しいテーブルを作成できます。
以上で準備は完了です!
カレンダーテーブルの作成
PowerBIで日付を扱うときには必ず知っていたい必須の関数です!
CALENDAR関数
〇 公式ドキュメントページ
CALENDAR 関数 (DAX) – DAX | Microsoft Learn
〇 構文
CALENDAR(始めの日付, 終わりの日付)
〇 説明
指定した「始めの日付」~「終わりの日付」までの連続したの1列のテーブルを返す。
このとき作成される列名は「Date」となります。
「新しいテーブル」をクリックし、上部の数式入力欄に以下のように入力してみましょう。
01_CALENDAR関数 = CARENDAR("2023/01/01","2023/12/31")
すると以下のように2023/01/01から2023/12/31の連続する日付テーブルを取得できました。
このように特定の期間の連続した日付テーブルを取得することができます。
「Date」列は書式が「日付と時刻」になっているので、時刻も入った表記になっています。
時刻はすべて0:00となっていますが、日付だけが必要な場合は書式設定で「日付」に修正しておきましょう。
CALENDARAUTO関数
〇 公式ドキュメントページ
CALENDARAUTO 関数 (DAX) – DAX | Microsoft Learn
〇 構文
CALENDARAUTO()
〇 説明
モデル内のテーブルにある日付列を読み取って、期間を自動計算し、連続する日付テーブルを返します。
「新しいテーブル」で以下の式を入力してください。
02_CALENDARAUTO関数 = CALENDARAUTO()
CALENDAR関数と違って日時の指定が依頼ないですね。
これは他のテーブルにある日時列から自動的期間を読み取って連続する日時テーブルを作成してくれます。
以下は、販売データのテーブルに日付の列があったときに作成されたCALENDARAUTO関数の例です。
日付から特定の情報を取り出す
YEAR, MONTH, DAY 関数など
日付から月や、日、など特定の情報だけを取り出せる関数です。
具体的に取り出せる情報は以下の通りです。
公式ドキュメント | ||
---|---|---|
YEAE(日付) | 日付から”年”を取り出す | YEAR 関数 (DAX) – DAX | Microsoft Learn |
QUARTER(日付) | 日付から”四半期”を取り出す | QUARTER 関数 (DAX) – DAX | Microsoft Learn |
MONTH(日付) | 日付から”月”を取り出す | MONTH 関数 (DAX) – DAX | Microsoft Learn |
DAY(日付) | 日付から”日”を取り出す | DAY 関数 (DAX) – DAX | Microsoft Learn |
HOUR(日付) | 日付から”時間”を取り出す | HOUR 関数 (DAX) – DAX | Microsoft Learn |
MINUTE(日付) | 日付から”分”を取り出す | MINUTE 関数 (DAX) – DAX | Microsoft Learn |
SECOND(日付) | 日付から”秒”を取り出す | SECOND 関数 (DAX) – DAX | Microsoft Learn |
「新しいテーブル」で以下の式を入力してください。
03_日付から特定の情報を取り出す =
ADDCOLUMNS(
CALENDARAUTO(),
"Year",YEAR([Date]),
"Quarter",QUARTER([Date]),
"Month",MONTH([Date]),
"DAY",DAY([Date]),
"Hour",HOUR([Date]),
"Minute",MINUTE([Date]),
"Second",SECOND([Date])
)
以下のテーブルが作成されます。
ここで新たに「ADDCOLUMNS関数」という関数を使っています。
詳細の説明は省略しますが、以下が行っていることのイメージです。
日時を含むデータを集計するときは必須となるので絶対に覚えましょう!
曜日を取り出す(WEEKDAY関数)
次に日付テーブルから曜日の情報だけを取り出します。
〇公式ドキュメント
WEEKDAY 関数 (DAX) – DAX | Microsoft Learn
〇構文
WEEKDAY(日付, 戻り値のタイプ(省略可))
〇説明
日付の曜日を日曜日を1とし順番に月曜日2・・・土曜日7とする
※第二引数の「戻り値のタイプ」によって上記のルールは変わりますが特に第二引数は設定不要です。
「新しいテーブル」で以下の式を入力してください。
04_曜日を取得する = ADDCOLUMNS(
CALENDAR("2023/01/01","2023/12/31"),
"曜日(数値)",WEEKDAY([Date]),
"曜日(英語)",FORMAT([Date],"ddd"),
"曜日(漢字)",FORMAT([Date],"aaa","ja")
)
すると、以下のテーブルが作成されます。
WEEKDAY関数は曜日を数値で返すので直感的に何曜日なのかわかりません。
上記のようにFORMAT関数を使って英語表記や日本語表記で曜日を表示できます。
FORMAT関数の詳細な説明についてはここでは省略します。
第何週かを返す
WEEKNUM関数
〇公式ドキュメント
WEEKNUM 関数 (DAX) – DAX | Microsoft Learn
〇構文
WEEKDAY(日付, 戻り値のタイプ(省略可))
〇説明
引数にしていされた日付がその月の第何週か?を返してくれる関数です。
戻り値のタイプは特に指定しなくて大丈夫です。
欧米などでは日本と週の数え方が違う、などの関係で他のタイプの表示方法があるようです。
まず、「新しいテーブル」からカレンダーテーブルを作成します。
05_第何週かを計算する関数 = CALENDAR("2023/01/01","2023/12/31")
次にテーブル ツールタブの新しい列をクリックし、作成したカレンダーテーブルに列を追加します。
以下の式を入力します。
週数 = WEEKNUM([Date])
さらに「新しい列」で以下の式を入力してください。
曜日情報 = "第" & [週数] & format([Date],"aaa","ja") & "曜日"
すると、以下のテーブルができます。
最後の曜日情報の列では曜日情報や文字を「&」で繋げて曜日情報も追加しています。
現在の日付や日時を返す
NOW, TODAY, UTCNOW, UTCTODAY関数
関数名 | 説明 | 公式ドキュメント |
---|---|---|
NOW() | 現在の日時(日付+時刻)を返します。 | NOW 関数 (DAX) – DAX | Microsoft Learn |
TODAY() | 現在の日付(時刻は0:00)を返します。 | TODAY 関数 (DAX) – DAX | Microsoft Learn |
UTCNOW() | 標準時刻の現在の日時(日付+時刻)を返します。 | UTCNOW 関数 (DAX) – DAX | Microsoft Learn |
UTCTODAY() | 標準時刻の現在の日付(時刻は0:00)を返します。 | UTCTODAY 関数 (DAX) – DAX | Microsoft Learn |
「新しいテーブル」で以下の式を入力してください。
06_現在の日付や時刻を取得する関数 = CALENDAR("2023/01/01","2023/01/01")
すると、1行だけのカレンダーテーブルができますので、「新しい列」で上記の関数を使ってみてください。
以下のようなテーブルになります。
実際にレポートで表示して比べてみます。
画面左側のグラフのマークをクリックしてレポート作成画面へ移動します。
「カード」のペインを使ってそれぞれ作った項目を設定してみると以下のようになります。
日本は標準時間と+9時間の時差がありますので、UTCがついている関数とは9時間の違いがあります。
また、TODAY関数とUTCTODAY関数は時刻が0:00になっていることがわかります。
日数の差を計算
DATEDIFF関数
〇公式ドキュメント
DATEDIFF 関数 (DAX) – DAX | Microsoft Learn
〇構文
DATEDIFF(日付1, 日付2, インターバル)
〇説明
ふたつの日付の差分(日付2 - 日付1)を計算します。
インターバルの設定によって、月数の差分なのか?日数の差分なのかを決定できます。
インターバルに設定できる項目は以下の通りです。
項目 | 説明 |
---|---|
YEAR | ” 年数 “の差分を表示する |
QUARTER | ” 四半期 “の差分を表示する |
MONTH | ” 月数 “の差分を表示する |
WEEK | ” 週数 “の差分を表示する |
DAY | ” 日数 “の差分を表示する |
HOUR | ” 時間数 “の差分を表示する |
MINUTE | ” 分数 “の差分を表示する |
SECOND | ” 秒数 “の差分を表示する |
以下がDATEDIFF関数のイメージです。
2022年のカレンダーテーブルを作成し、現在の日付との差分を表示してみましょう。
「新しいテーブル」で以下の式を入力してください。
07_日数の差を計算する関数 =
ADDCOLUMNS(
CALENDAR("2022/01/01","2022/12/31"),
"今日の日付",TODAY()
)
さらに「新しい列」で月数の差分と日数の差分を作ってみましょう。
↓月数の差分
差分(月数) = DATEDIFF([Date],[今日の日付],MONTH)
↓日数の差分
差分(日数) = DATEDIFF([Date],[今日の日付],DAY)
すると以下のテーブルができます。
ちゃんと月の差分、日数の差分が計算できてますね。
カウントダウンなどを表示するときに使えそうな関数です。
datetime形式に変換する関数
DATE, DATEVALUE, TIME, TIMEVALUE関数
関数名 | 説明 | 公式ドキュメント |
---|---|---|
DATE() | 指定された日付を datetime 形式で返します。 | DATE 関数 (DAX) – DAX | Microsoft Learn |
DATEVALUE() | テキスト形式の日付を datetime 形式の日付に変換します。 | DATEVALUE 関数 (DAX) – DAX | Microsoft Learn |
TIME() | 数値として指定された時間、分、および秒を datetime 形式の時刻に変換します。 | TIME 関数 (DAX) – DAX | Microsoft Learn |
TIMEVALUE() | テキスト形式の時刻を datetime 形式の時刻に変換します。 | TIMEVALUE 関数 (DAX) – DAX | Microsoft Learn |
指定した値やテキスト形式の日付や日時をdatetime形式に変換する関数です。
構文は以下の通りです。
関数名 | 構文 | 例 |
---|---|---|
DATE() | DATE(年,月,日) | DATE(2023,1,1) |
DATEVALUE() | DATEVALUE(”日付”) | DATEVALUE(“2023/01/01”) |
TIME() | TIME(時,分,秒) | TIME(12,0,0) |
TIMEVALUE() | TIMEVALUE(”時刻”) | TIMEVALUE(“20:45:30”) |
おわりに
いかがだったでしょうか?
今回はDAX関数の中でも必須の日付や時刻を扱う関数を学びました!
ぜひ自分を手を動かしてマスターしてくださいね!
それでは!