実践PowerBI講座6|DAX>Calendar関数で日付スライサ作成

実践PowerBI講座6 今回の目標
目次

本講座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で作成したレポートに以下を追加します。下図の赤枠ビジュアルを追加します。

  • 日付スライサ(年月)
  • 期間表示(カード)
実践PowerBI講座6のゴール

ゴールを先に理解することで作業効率が上がります。

今回のインプット|追加データあり

今回は講座5で作ったレポートに、新たに実績テーブルを追加します。レポート作成する場合は下のデータをダウンロードして下さい。

実績テーブルはエネルギー使用実績データです。今回は必要な分だけ、2020年分だけ追加します。

データの内容は以下の関連記事の「使用するデータ」を参照して下さい。

実装プロセス設計|PowerBI日付スライサ

今回の流れは以下です。

  1. データ取込み
  2. 日付列作成
  3. Calendar関数で日付テーブル作成
  4. 年・年月の列作成
  5. 階層構造作成
  6. スライサ配置
  7. 期間表示追加

この流れをテンプレ化すると今後も使い回せます。

実装ポイント解説|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関数を用いて日付テーブルを新規作成します。

①テーブルをクリック-②テーブルツール-③新しいテーブル の順に選択します。

PowerBI上で日付テーブル作成

前述の式を入力します。

T01_calendar = CALENDAR(MIN(‘D01_Energy'[C0001_日付]),MAX(‘D01_Energy'[C0001_日付]))

データを確認します。画面左のテーブルビュー をクリックして見たいテーブルを選択します(ここではT01_calendar)

実践PowerBI講座 日付テーブルの関数式入力


[Date]という列名で、2020年のデータが日毎に取り込まれていることが分かります。

スライサ用の日付DAX式を日付テーブルに追加

日付テーブルを右クリックして新しい列 を選択。前述の2式を追加します。

C01_str年 = FORMAT([Date],”yy”)

C02_str年月 = FORMAT([Date],”yy/mm”)

データを確認して、下図のような計算式が追加されていればOKです。

日付スライサ用の計算式の確認

日付DAX式を階層構造で整理(「階層の作成」)

階層の最上位にする値(ここではC01_str年)を右クリック、階層の作成 を選択

日付スライサに使う計算式を階層構造にする様子1

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

日付スライサに使う計算式を階層構造にする様子2

下図に示すように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月など、飛び飛びの値の指定ができません。今回のチェックボックスの方が指定自由度は高いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

“ねこまご”は、猫の癒しと“孫の手”の実務サポートを合わせた造語です。
Power BI と IT 業務の“こまごま解決”に特化した、実務者向けブログを運営しています。

社内SEを約10年経験した後、2025年にブログ開設しました。
日々の現場で発生する"細かなIT課題"に向き合ってきた中で、
「専門用語なしで理解したい」
「実務でどう使うかを知りたい」
「時間がない中でも効率よく学びたい」
というニーズを強く感じてきました。

私自身、家事・育児・家族サービス・仕事の合間で学び続けている生活者です。限られた時間の中でスキルを磨いていく大変さや、思うように勉強が進まないもどかしさもよく分かります。

だからこそ、このブログでは、
1) Power BI などのITツールのTips(IT小技シリーズ)
2) 初心者でも挫折しないPower BI講座
3) リアルなブログ運営記録(将来的に配信予定)
を、できるだけシンプルに、すぐ実務で使える形にして発信しています。

難しい専門用語を避け、「すぐ役立つITスキル」を届けることを大切にしています。

ITは一気に習得するより、小さな疑問をひとつずつ解消していくことが近道だと考えます。

その“かゆいところに手が届く”存在として、実務力向上やキャリアアップに悩む読者の力になれるブログを目指しています。

コメント

コメントする

CAPTCHA


目次