【PowerBI】手を動かして学ぶ!DAX関数の日付操作

【PowerBI】手を動かして学ぶ!DAX関数の日付操作

今回扱うDAX関数の種類について

DAX関数の中の「日付と時刻関数」のについて、使い方や実例を紹介しながら解説していきます。

公式ドキュメントは以下を参照してください。

筆者的によく使うものから順に紹介しておりますので、ぜひチェックしてみてください!

事前準備

PowerBI Desktopを開き、左サイドメニューからデータビューを開きます。

データビューを選択

「ホーム」タブの「新しいテーブル」をクリックすることで新しいテーブルを作成できます。

「新しいテーブル」をクリック

以上で準備は完了です!

カレンダーテーブルの作成

PowerBIで日付を扱うときには必ず知っていたい必須の関数です!

CALENDAR関数

〇 公式ドキュメントページ

CALENDAR 関数 (DAX) – DAX | Microsoft Learn

〇 構文

CALENDAR(始めの日付, 終わりの日付)

〇 説明

指定した「始めの日付」~「終わりの日付」までの連続したの1列のテーブルを返す。

このとき作成される列名は「Date」となります。

「新しいテーブル」をクリックし、上部の数式入力欄に以下のように入力してみましょう。

DAX
01_CALENDAR関数 = CARENDAR("2023/01/01","2023/12/31")

すると以下のように2023/01/01から2023/12/31の連続する日付テーブルを取得できました。

CALENDAR関数の結果のテーブル

このように特定の期間の連続した日付テーブルを取得することができます。

「Date」列は書式が「日付と時刻」になっているので、時刻も入った表記になっています。

時刻はすべて0:00となっていますが、日付だけが必要な場合は書式設定で「日付」に修正しておきましょう。

CALENDARAUTO関数

〇 公式ドキュメントページ

CALENDARAUTO 関数 (DAX) – DAX | Microsoft Learn

〇 構文

CALENDARAUTO()

〇 説明

モデル内のテーブルにある日付列を読み取って、期間を自動計算し、連続する日付テーブルを返します。

「新しいテーブル」で以下の式を入力してください。

DAX
02_CALENDARAUTO関数 = CALENDARAUTO()

CALENDAR関数と違って日時の指定が依頼ないですね。

これは他のテーブルにある日時列から自動的期間を読み取って連続する日時テーブルを作成してくれます。

以下は、販売データのテーブルに日付の列があったときに作成されたCALENDARAUTO関数の例です。

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

「新しいテーブル」で以下の式を入力してください。

DAX
03_日付から特定の情報を取り出す = 
    ADDCOLUMNS(
        CALENDARAUTO(),
        "Year",YEAR([Date]),
        "Quarter",QUARTER([Date]),
        "Month",MONTH([Date]),
        "DAY",DAY([Date]),
        "Hour",HOUR([Date]),
        "Minute",MINUTE([Date]),
        "Second",SECOND([Date])
    )

以下のテーブルが作成されます。

DAX関数の結果を表すスライド

ここで新たに「ADDCOLUMNS関数」という関数を使っています。

詳細の説明は省略しますが、以下が行っていることのイメージです。

ADDCOLUMNS関数でやっていることの説明スライド

日時を含むデータを集計するときは必須となるので絶対に覚えましょう

曜日を取り出す(WEEKDAY関数)

次に日付テーブルから曜日の情報だけを取り出します。

〇公式ドキュメント

WEEKDAY 関数 (DAX) – DAX | Microsoft Learn

〇構文

WEEKDAY(日付, 戻り値のタイプ(省略可))

〇説明

日付の曜日を日曜日を1とし順番に月曜日2・・・土曜日7とする

※第二引数の「戻り値のタイプ」によって上記のルールは変わりますが特に第二引数は設定不要です。

「新しいテーブル」で以下の式を入力してください。

DAX
04_曜日を取得する = ADDCOLUMNS( 
	CALENDAR("2023/01/01","2023/12/31"), 
	"曜日(数値)",WEEKDAY([Date]),
	"曜日(英語)",FORMAT([Date],"ddd"),
	"曜日(漢字)",FORMAT([Date],"aaa","ja")
)

すると、以下のテーブルが作成されます。

FORMAT関数を使って曜日をいろんな方法で表示する

WEEKDAY関数は曜日を数値で返すので直感的に何曜日なのかわかりません。

上記のようにFORMAT関数を使って英語表記や日本語表記で曜日を表示できます。

FORMAT関数の詳細な説明についてはここでは省略します。

第何週かを返す

WEEKNUM関数

〇公式ドキュメント

WEEKNUM 関数 (DAX) – DAX | Microsoft Learn

〇構文

WEEKDAY(日付, 戻り値のタイプ(省略可))

〇説明

引数にしていされた日付がその月の第何週か?を返してくれる関数です。

戻り値のタイプは特に指定しなくて大丈夫です。

欧米などでは日本と週の数え方が違う、などの関係で他のタイプの表示方法があるようです。

まず、「新しいテーブル」からカレンダーテーブルを作成します。

DAX
05_第何週かを計算する関数 = CALENDAR("2023/01/01","2023/12/31")

次にテーブル ツールタブの新しい列をクリックし、作成したカレンダーテーブルに列を追加します。

テーブルに新しい列を挿入する

以下の式を入力します。

DAX
週数 = WEEKNUM([Date])

さらに「新しい列」で以下の式を入力してください。

DAX
曜日情報 = "第" & [週数] & 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

「新しいテーブル」で以下の式を入力してください。

DAX
06_現在の日付や時刻を取得する関数 = CALENDAR("2023/01/01","2023/01/01")

すると、1行だけのカレンダーテーブルができますので、「新しい列」で上記の関数を使ってみてください。

以下のようなテーブルになります。

NOW関数などの結果を表すテーブル

実際にレポートで表示して比べてみます。

画面左側のグラフのマークをクリックしてレポート作成画面へ移動します。

PowerBi Desktopのレポート編集画面へ移動

「カード」のペインを使ってそれぞれ作った項目を設定してみると以下のようになります。

「カード」ペインで現在の日付や時刻を表示した画面

日本は標準時間と+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関数のイメージです。

DATEDIFF関数のポイントをまとめたスライド

2022年のカレンダーテーブルを作成し、現在の日付との差分を表示してみましょう。

「新しいテーブル」で以下の式を入力してください。

DAX
07_日数の差を計算する関数 = 
    ADDCOLUMNS(
        CALENDAR("2022/01/01","2022/12/31"),
        "今日の日付",TODAY()
    )

さらに「新しい列」で月数の差分と日数の差分を作ってみましょう。

↓月数の差分

DAX
差分(月数) = DATEDIFF([Date],[今日の日付],MONTH)

↓日数の差分

DAXHTML
差分(日数) = DATEDIFF([Date],[今日の日付],DAY)

すると以下のテーブルができます。

DATEDIFF関数の結果のテーブル

ちゃんと月の差分、日数の差分が計算できてますね。

カウントダウンなどを表示するときに使えそうな関数です。

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関数の中でも必須の日付や時刻を扱う関数を学びました!

ぜひ自分を手を動かしてマスターしてくださいね!

それでは!