Power BI 使用時に自動日付テーブルが適切かどうかを確認する方法という記事では、Microsoft Power BI が日付と時刻をどのように処理するかについて、内部的な仕組みを解説しています。これは、何もする必要がないため、最も迅速で簡単な方法です。Power BI は内部的に日付テーブルを作成しますが、必要なフィルタリングやグループ化の要件が必ずしも満たされるとは限りません。その場合は、自分で日付テーブルを作成できます。複雑なデータセットを扱う場合、独自の日付テーブルを作成できるスキルは大きなメリットとなります。
このチュートリアルでは、内部のデフォルトテーブルが適切でない場合に、データ分析式を使用して日付テーブルを作成する方法を説明します。日付テーブルについてよく知らない場合は、日付テーブルの作成に取り組む前に、上記のリンク先の記事を読むことをお勧めします。
Windows 11 64ビットシステムでMicrosoft Power BI Desktopを使用しています。この記事では、日付テーブルとデータテーブルをそれぞれ「日付テーブル」と「ファクトテーブル」という用語で説明します。「日付」と「データ」という用語が類似しているため、混同される可能性があるためです。
このチュートリアルの Microsoft Power BI デモ ファイルをダウンロードできます。
1 Zohoアナリティクス
企業規模
企業規模ごとの従業員数
マイクロ(0~49)、スモール(50~249)、ミディアム(250~999)、ラージ(1,000~4,999)、エンタープライズ(5,000以上)
あらゆる規模の企業 あらゆる規模の企業
特徴
アドホック分析、コラボレーションツール、ダッシュボードなど
Power BI の日付テーブルとは何ですか?
日付テーブルは、日付とそれらの日付に関するその他のメタデータを格納するテーブルです。ファクトテーブルと日付テーブルの関係により、ユーザーは月や年などの期間でデータをフィルタリングしたり比較したりすることができます。
Power BIでは日付テーブルを1つしか作成できないため、日付テーブルを作成する予定がある場合は事前に確認しておくことをお勧めします。内部の自動日付テーブルに基づいてビジュアルを構築した後、独自の日付テーブルを作成してそのようにマークすると、Power BIは自動日付テーブルとそれに基づくすべてのビジュアルを破棄します。
参照: Google Workspace と Microsoft 365 を比較した分析をご覧ください。
日付テーブルは、日付ごとに行が1つずつある他のテーブルと似ています。最初の列は、日付という名前の日付と時刻のデータ型の列です。残りの列には、各日付の年、四半期、月などのメタデータが格納されます(図A)。
図A

カスタム日付テーブルを使用すると、モデルで使用される日付階層を制御できます。これは、クイックメジャーやその他の評価にも反映されます。ファクトテーブルでは、日付テーブルとしての要件を満たすことが困難です。
- 日付テーブルには、日付と時刻のデータ型である Date という名前の列が必要です。
- 日付列には一意の値が含まれている必要があります。
- 日付列には空白値または null 値を含めることはできません。
- 日付列に欠落した日付を含めることはできません。日付は連続している必要があります。
ファクト テーブルを使用する場合は、次のように日付テーブルとして定義できます。
- データ ペインでテーブルを選択します。
- テーブルを右クリックし、「日付テーブルとしてマーク」を選択します。表示されるメニューから「日付テーブルとしてマーク」を選択します。
ファクトテーブルを日付テーブルとしてマークすると、Power BI はこのテーブルに基づいてリレーションシップと階層を構築します。そうでない場合は、同じ結果を得るために、日付(ファクト)テーブルと他のテーブルの間に必要なリレーションシップを作成する必要があります。
参照: Power BI でダッシュボードを作成する方法は次のとおりです。
DAX を使用して Power BI で日付テーブルを作成する方法
カスタム日付テーブルを作成する必要がある場合は、DAX を使用して計算テーブルを作成できます。DAX は、Analysis Services、Power BI、Power Pivot で使用される関数と演算子を含む式言語です。
日付テーブルを作成するには、DAX CALENDAR 関数または CALENDARAUTO 関数のいずれかを使用できます。どちらも日付の単一列テーブルを返します。
どちらの関数を使用するか検討する際には、CALENDAR関数は日付の完全なリストを生成するために、開始日と終了日が必要です。CALENDARAUTO関数は、ファクトテーブル内の既存の日付を使用して日付のリストを生成します。ここでは、CALENDAR関数を使用して日付テーブルを作成します。
CALENDARを使用して日付テーブルを作成する方法
CALENDAR 関数では次の構文を使用します。
カレンダー(<開始日>, <終了日>)
ここで、start_date は結果の日付テーブルの最初の日付、end_date は最後の日付です。この関数は、start_date から end_date までの日付と、その間のすべての日付を含む 1 列のテーブルを返します。
ここで、CALENDAR を使用して、2000 年 1 月 1 日を start_date、2021 年 12 月 31 日を end_date として Power BI に日付テーブルを作成しましょう。
- Power BIを起動します。必要に応じて、「ファイル」メニューから「新規」を選択し、新しい.pbixファイルで作業します。既存の.pbixファイルは使用しないでください。
- 左側のペインで [テーブル ビュー] をクリックします。
- 必要に応じて、[ホーム] メニューをクリックします。
- 右端にあるメニューの [DAX 式を記述して新しいテーブルを作成する] オプションをクリックします。
- Power BIには最初のコンポーネント「Table =」が用意されています。式「Table = CALENDAR (DATE (2020, 1, 1), DATE (2022, 12, 31))」を完成させます(図B)。
- 左側のチェックマークである「コミット」をクリックします。
図B

この関数は新しいテーブルを作成し、単一の列に「Date」という名前を付け、適切な値を設定します。注目すべきは、1,096個の異なる値、つまり行があることです。ただし、365 * 3 = 1,095です。Power BIは2020年が閏年であったことを認識しています。
CALENDAR を使用して日付テーブルを作成し、そのフィールドにデータを入力する方法
次のステップでは、並べ替えやフィルタリングに必要な日付要素(週番号、月番号、四半期、年など)ごとに列を追加します。この時点で、「列を追加」オプションを使用して列を追加できますが、必ずしもそうする必要はありません。テーブルを作成するときにすべての列を追加する方が効率的です。
日付 =
列の追加 (
カレンダー(日付(2020年1月1日)、日付(2022年12月31日))、
“年”, YEAR([日付]),
“月番号”, MONTH([日付]),
「四半期」、QUARTER([日付])、
“DayOfWeek”, WEEKDAY([日付])
)
図Cに結果を示します。追加する列の数は、視覚化とレポートのフィルタリングとグループ化のニーズによって異なります。
図C

参照: Outlook および Office で Power BI を使用してデータ ストーリーテリングを行う方法について説明します。
この例では、関数はいくつかの列のみを作成しますが、必要な列はもっと多くある可能性があります。完全なリストについては、「日付と時刻の関数 (DAX) – DAX | Microsoft Learn」をご覧ください。
この式は ADDCOLUMNS と CALENDAR を組み合わせたものです。
- Date は結果のテーブルの名前です。
- ADDCOLUMNS を使用すると、日付の列を指定できます。
- CALENDAR は日付テーブルを作成し、最初の列にデータを入力します。
- 次の 4 行はメタデータ列を定義します。
この時点で、状況は少し複雑になります。ファクトテーブルを日付テーブルとしてマークする方法について前述したように、カスタムテーブルを日付テーブルとしてマークするかどうかを決定する必要があります。日付テーブルとしてマークすると、日付テーブルによって定義されたカスタム階層が作成されます。
参照: このガイドに従って、Microsoft Power BI に計算列を追加します。
一方、Power BI に自動で処理させたい場合は、テーブルを日付テーブルとしてマークしないでください。代わりに、リレーションシップを作成して、特殊なグループ化やフィルタリングに使用できます。これは正解や不正解がないものの、データを理解することが最も効率的な選択を行う鍵となります。
注意:ファクトテーブルを日付テーブルとしてマークすると、Power BI によって組み込みの自動日付テーブルと、そのテーブル上に以前に作成したビジュアルが削除されます。手動日付テーブルの選択を解除すると、Power BI によって新しい自動日付テーブルが自動的に作成されます。