本講座6で分かること
この記事は実践PowerBI講座の第六回です。前回講座では文字列関数を使ったスライサを扱いました。今回はその応用として、日付関数を活用し、より実践的な分析環境を構築します。
PowerBIでレポートを作っていると、「日付で上手く絞り込みできない」と悩むことはありませんか?
特に「年ごと」「月ごと」に柔軟に分析したい場面では、通常のスライサでは操作性が悪くなりがちです。
今回は、階層構造の日付スライサの作り方を解説します。具体的にはCalendar関数を使って日付テーブルを作り、その日付列を階層構造にします。
これは実務でも頻出で、時系列分析を一気に効率化できる重要テクニックです。今回紹介するDAX式は、筆者自身がPowerBIを初めたばかりの頃に修得しました。今でも日付スライサの標準テンプレートです。読者の方もぜひ参考にして下さい。
本講座で得られる価値は以下です。
- 日付テーブルを作る理由が理解できる
- 年・月の階層構造で見やすいスライサを作れるようになる
- スライサで柔軟な期間絞込みできる
関数は理解しているのに実務で使えない…そんな壁を突破する内容です。
階層構造の日付スライサとは?PowerBIで重要な理由
階層構造の日付スライサとは、下図のような「年 ⇒ 月」といった親子関係を持つデータをまとめて操作できるスライサです。今回はチェックボックス形式で使います。

何故PowerBIで重要かと言うと、通常のスライサより圧倒的に操作効率が良いからです。
理由は後述しますが、特にデータ量が増えたときに差が出ます。
何故日付テーブルが必要か(Calendar関数の前提理解)
私の経験上、日付テーブルは必須です。理由は大きく2つあります。
理由1:テーブルの可読性を保つため
日付関連の計算列は非常に多くなります。
- 年
- 月
- 四半期
- 年月
- 差分(最新月との差など)
- 和暦
- 第○○期(会社の創業年からの数え)
などなど
これを実績テーブルにすべて追加すると、テーブルが非常に見づらくなります。特にテーブルビューでは探したい列が見つけにくいです。
PowerBIは列の並び替えが自由ではないため、
後から整理できない点も問題です。
だから「日付専用テーブル」として分離します。
理由2:リレーションシップを成立させるため
PowerBIのリレーションは以下のみ有効です。
- 1対1
- 多対1
実績テーブルは通常「同じ日付が複数存在する」ため、そのままではリレーションが組めません。
だから一意な日付テーブルが必要になります。
何故階層構造にする必要があるか(操作性の差)
結論:フィルタ操作の効率が劇的に変わるためです。
例1:探しやすさ
階層なし・・・ 年/月がズラッと並ぶ⇒スクロールが多くなる(下図)

階層あり・・・ 年ごとに整理される⇒目的の値にすぐ辿り着ける
例2:選択のしやすさ
2020年全てを選択する場合
- 階層なし:12回クリック
- 階層あり:1回クリック
圧倒的に効率が良いです。
例3:柔軟な期間指定
2020年1月と2021年1月など、飛び飛びで選択する場合
20年を展開、1月をクリック、20年の展開閉じる、21年も同様の操作。
スライダよりもチェックボックスの方が柔軟です。
今回学ぶこと|日付スライサ作成の全体像
今回のポイントは以下です。
- Calendar関数で日付テーブルを作成
- FORMAT関数で表示用データを作成
- 階層構造を作る
- スライサに適用する
やることはシンプルですが、流れを理解することが重要です。
今回のアウトプット|日付スライサをレポートに追加
講座5で作成したレポートに以下を追加します。下図の赤枠ビジュアルを追加します。
- 日付スライサ(年月)
- 期間表示(カード)

ゴールを先に理解することで作業効率が上がります。
今回のインプット|追加データあり
今回は講座5で作ったレポートに、新たに実績テーブルを追加します。レポート作成する場合は下のデータをダウンロードして下さい。
実績テーブルはエネルギー使用実績データです。今回は必要な分だけ、2020年分だけ追加します。
データの内容は以下の関連記事の「使用するデータ」を参照して下さい。

実装プロセス設計|PowerBI日付スライサ
今回の流れは以下です。
- データ取込み
- 日付列作成
- Calendar関数で日付テーブル作成
- 年・年月の列作成
- 階層構造作成
- スライサ配置
- 期間表示追加
この流れをテンプレ化すると今後も使い回せます。
実装ポイント解説|Calendar関数とDAX式
日付データ作成
C0001_日付 = DATE([年],[月],1)
年と月から「日付型データ」を生成します。
Calendar関数は日付型でないと正しく扱えません。実践講座2で扱った式です。
日付テーブル作成(最重要)
T01_calendar =
CALENDAR(
MIN(‘D01_Energy_2020′[C0001_日付]),
MAX(‘D01_Energy_2020′[C0001_日付])
)
開始日~終了日までの1日毎の日付テーブルを生成します。
日付が連続している
一意である
リレーションが組める
⇒これが日付スライサの土台です
年・年月の作成
日付テーブルに以下の2つの計算列を追加します。
C01_str年 = FORMAT([Date],”yy”)
C02_str年月 = FORMAT([Date],”yy/mm”)
表示用の列を作ります。FORMAT関を使って、表示形式を年、月それぞれ最小桁数2桁で表示させます。
実装|日付スライサを作る
データ取込み
「今回のインプット」で示した実績データを追加します。方法は講座4と同じです。
日付データ作成
新しい計算列の追加は講座5などと同じ方法です。実績テーブルを右クリック-新しい列 を選択
前述の式を追加します。
C0001_日付 = DATE([年],[月],1)
日付テーブルの作成
CALENDAR関数を用いて日付テーブルを新規作成します。
①テーブルをクリック-②テーブルツール-③新しいテーブル の順に選択します。

前述の式を入力します。
T01_calendar = CALENDAR(MIN(‘D01_Energy'[C0001_日付]),MAX(‘D01_Energy'[C0001_日付]))
データを確認します。画面左のテーブルビュー をクリックして見たいテーブルを選択します(ここではT01_calendar)

[Date]という列名で、2020年のデータが日毎に取り込まれていることが分かります。
スライサ用の日付DAX式を日付テーブルに追加
日付テーブルを右クリックして新しい列 を選択。前述の2式を追加します。
C01_str年 = FORMAT([Date],”yy”)
C02_str年月 = FORMAT([Date],”yy/mm”)
データを確認して、下図のような計算式が追加されていればOKです。

日付DAX式を階層構造で整理(「階層の作成」)
階層の最上位にする値(ここではC01_str年)を右クリック、階層の作成 を選択

次の階層に入れる値(ここではC02_str年月)を右クリック、「階層に追加」-「C01_str年 階層」 の順に選択

下図に示すようにC01_str年 階層 が出来ていればOKです。

階層名をダブルクリックすれば好きな名前に変更できます(ここではCK01_年月 としました)
階層化した日付DAX式を配置
画面左のレポートビュー(データビュー ボタンの上)をクリック、レポートビューに戻ります。
前回講座で作ったスライサを選択してコピー&ペースト(Ctrl+C、Ctrl+V)します。そうすることで、大きさや形、書式を設定する手間が省けます。
コピーしたスライサを選択(黒枠が出る)した状態でマウスで移動させます(部門スライサの直下)。
フィールドに入っている値を消して(✕をクリック)、先ほど作った階層(CK01_年月)をドラッグ&ドロップします。

スライサのタイトルを変更します。
ビジュアルの書式設定-ビジュアル-スライサ―ヘッダ-テキスト の順に展開し、タイトルテキストを「年月」に変更します。
タイトルに期間を追加(カード追加)
タイトルに開始期間と終了期間を追加します。講座4とほぼ同じ作り方です。
「期間」と「~」はテキストボックスを使います。
「20/01」はカードを使います。カードに配置する値はC02_str年月です。
開始期間はフィールドのVマークをクリックして「第一」を選択します(デフォルトで第一になっているので何もする必要なし)
終了期間はフィールドのVマークをクリックして「最後」を選択します。
動作テスト|日付スライサ
今回作った「年月スライサ」とタイトルに追加した「期間」をテストします。
以下の動作であればテスト成功です。
今回作った「年月スライサ」とタイトルに追加した「期間」をテストします。
以下の動作であればテスト成功です。
・「すべて」の右横Vマークをクリック(クリック後は∧マークに変わる)すると「20」が見える(年)

・「20」の左横のVマークをクリックすると「20/01、20/02、・・・20/12」が見える(年/月)

・Ctrlキーを押しながら任意の年月、例えば「20/01」と「20/06」を選択チェックすると、タイトルの「期間」が20/01~20/06になる。
選択チェックを外すには
スライサタイトルの右横にマウスを持っていき、消しゴムマークが現れたら、それをクリックする。

次回予告
次回からの話題DAXメジャーです。集計カードやグラフなど、レポートの中心部分に欠かせない分野を勉強します。
まとめ
今回は以下のことを学び、作業しました。
- 時系列分析では必須の日付スライサをCalendar関数の作成
- 階層構造により操作性が大幅に向上することを理解
- FORMAT関数で表示を整える方法
- 動作テストとして、スライサと期間表示が連動することを確認した
PowerBIで時系列分析を行うための基本が身につきます。
ぜひ実務でも活用してみてください。
FAQ
Q1. Calendar関数は必ず使うべきですか?
はい、基本的には使うべきです。
日付が欠けていると分析結果が不正確になるため、連続した日付を生成できるCalendar関数が最適です。
Q2. なぜ日付テーブルを別に作る必要があるのですか?
主に以下の理由です。
- テーブルを整理するため
- リレーションを作るため
特に後者は重要で、分析モデルの基盤になります。
Q3. FORMAT関数を使う理由は?
表示形式を自由に設定するためです。
日付のままだと表示スペースを取るため、年月をそれぞれ2文字だけにします。
Q4. 階層構造は必須ですか?
必須ではありませんが、
実務ではほぼ必須レベルです。
操作性・分析効率が大きく変わります。
Q5. スライサの設定でスタイル「指定の値の間」ではだめですか?
20年1月と20年6月など、飛び飛びの値の指定ができません。今回のチェックボックスの方が指定自由度は高いです。

コメント