🎯 Power BIを本格的に学びたい方へ
初心者から上級者まで、あなたのレベルに合わせたソリューションをご用意
ハンズオンセミナー
基礎編
Power BIの基礎を1日でマスター。データ取り込みから可視化まで実践形式で学べます。
- データ取り込みの基本
- レポート作成の流れ
- 基本的なビジュアル作成
Power BI 導入支援・構築
コンサルティング
経験豊富なコンサルタントが、御社の課題に合わせたPower BI導入を全面サポート。
- 大手から中小まで30社以上の導入実績
- 延べ3,000名以上のセミナー開催実績
- 課題ヒアリングから運用定着まで伴走
「受注から納品までに何日かかったか?」 「在庫はあと何日分残っているか?」 「休眠顧客の最終購入日から今日で何日経過したか?」
Power BI で業務データを可視化していると、こうした「日数」や「期間(Duration)」を求めるシーンに必ず直面します。一見、「終了日」から「開始日」を引くだけのシンプルな計算に思えますが、いざ実装しようとすると「土日や祝日を除外したい」「月末またぎの計算がおかしい」「今日を基準にして毎日動的に変えたい」といった複雑なビジネス要件が壁となって立ちはだかります。
この記事では、実務で頻出する Power BI の日数・期間計算について、基本の DAX 関数から、つまずきやすい「営業日計算」、分析を深める「グループ化(バケット化)」まで、プロの設計アプローチを徹底解説します。
1. すべての基本:二つの日付の差を求める「DATEDIFF関数」
最も基本となるのは、テーブル内にある「開始日」と「終了日」の差分を求める計算です。DAXにおいて、日付は内部的にシリアル値(数値)として扱われているため、引き算で日数を出すことも可能ですが、実務では可読性の高い DATEDIFF 関数 を使うのがベストプラクティスです。
DATEDIFF(開始日, 終了日, 単位) というシンプルな構文で、第三引数に DAY(日)、WEEK(週)、MONTH(月)、YEAR(年)などを指定します。
-
日数を求める場合:
DATEDIFF('テーブル'[受注日], 'テーブル'[出荷日], DAY) -
注意点: もしデータ入力のミス等で「終了日が開始日より前」になっている異常データが存在すると、マイナスの値が返るか、エラーになることがあります。これを防ぐために、
ABS関数で絶対値を取るか、IF関数で「終了日が空白でない場合のみ計算する」といったエラーハンドリングを入れておくと、レポートの信頼性が格段に上がります。
Power Query の段階で計算を済ませておきたい場合は、「列の追加」メニューから「期間」を選択し、Duration.Days 関数で日数の整数値を抽出する方法も有効です。
2. 「今日」を基準にした動的な日数計算(TODAY関数)
「契約満了まであと何日か(残り日数)」や「最終来店から何日経過したか(経過日数)」を追う場合、基準となるのは「今日」の日付です。この場合は、TODAY 関数 を活用します。
-
経過日数:
DATEDIFF('テーブル'[最終購入日], TODAY(), DAY) -
残り日数:
DATEDIFF(TODAY(), 'テーブル'[契約満了日], DAY)
TODAY 関数は、レポートが開かれるたびに(またはデータセットが更新されるたびに)その日の日付を取得します。そのため、毎日自動で残り日数が減っていく動的なダッシュボードを作ることができます。
さらに、残り日数が「0以下」になったレコードを条件付き書式で「赤色」にハイライトすれば、それだけで立派な「期限管理アラート・ダッシュボード」が完成します。時間単位の細かい精度が必要な業務(製造ラインの工程管理など)では、現在時刻を返す NOW 関数を使用します。
3. 実務の最難関:「営業日」だけを正確に数える方法
日数計算において、多くの人が最初に挫折するのが「営業日計算」です。リードタイムを測る際、土日や祝日を含めてしまうと、正確な業務パフォーマンスが測れません。
DAX には、この問題を解決するための強力な関数 NETWORKDAYS が用意されています。
NETWORKDAYS(開始日, 終了日, [週末の指定], [祝日テーブル])
この関数は、指定した期間内の「土日を除いた日数」を自動で計算してくれます。さらに素晴らしいのは、第4引数に「祝日リスト(1列のみのテーブル)」を渡すことで、自社独自の休日やカレンダー通りの祝日も除外して計算できる点です。
実装のコツ: 日本の祝日は毎年変動するため、内閣府が公開している祝日のCSVデータを Power Query で自動取得し、「祝日マスタ」としてデータモデルに組み込んでおく運用がおすすめです。これにより、毎年手動で休日設定をメンテナンスする手間から解放されます。
4. 分析の解像度を上げる「期間のグループ化(バケット分析)」
日数を計算した後は、「平均何日か」を見るだけでなく、「受注から出荷まで1〜3日で済んだ案件は何件か? 8日以上かかってしまった遅延案件は何件か?」といった分布(バラツキ)を分析することが非常に重要です。
これを行うには、計算した日数を SWITCH 関数を使ってグループ分け(バケット化)する計算列を作成します。
出荷リードタイム区分 =
SWITCH(
TRUE(),
'テーブル'[リードタイム日数] <= 3, "1. 3日以内",
'テーブル'[リードタイム日数] <= 7, "2. 4〜7日",
"3. 8日以上"
)
プロの注意点: グループのラベルを単なる文字列(「3日以内」「4〜7日」など)にしてしまうと、グラフにしたときに五十音順やアルファベット順に並び替えられてしまい、順番がぐちゃぐちゃになるという罠があります。上記のように頭に「1.」「2.」と番号を振るか、別途「並び替え用の数値列」を用意して「列で並び替え」を設定するのが、美しいレポートを作るための必須テクニックです。
5. 日付テーブル(カレンダーテーブル)との連動
Power BI の時系列分析において、日付テーブル(カレンダーテーブル)の存在は絶対的な土台です。
イベントログ(ステータス変更履歴など)から特定のステータスでの滞留期間を計算したり、前年同期比と絡めて「去年の今頃と比べて、平均納品日数はどう変化しているか」を分析したりするには、タイムインテリジェンス関数と日付テーブルの組み合わせが欠かせません。
単なる「点と点の引き算」から脱却し、日付テーブルに「営業日フラグ」や「四半期列」を持たせることで、分析の切り口は無限に広がります。
まとめ:DAXの「迷路」から抜け出し、最速で実務に活かすために
Power BIでの日数・期間計算は、DATEDIFF などの基本関数から始まり、営業日考慮の NETWORKDAYS、そして SWITCH 関数を用いた分布分析へと、要件が高度になるにつれて必要となるDAXの知識も深まっていきます。
しかし、現場で求められる複雑なビジネスロジック(イレギュラーな休日の扱い、月またぎの特殊なカウント、NULL値の処理など)を、すべてネットの検索と独学のDAXで乗り切ろうとすると、「数式エラーが消えない」「集計結果がどうしても数日ズレる」と、膨大な時間を浪費してしまうことになりかねません。
-
「自社の複雑な営業日カレンダーに合わせた正確なリードタイム分析を作りたい」
-
「DAXのエラーに悩まされず、正しいデータモデルの設計手法を知りたい」
-
「自己流のレポート作成から卒業し、組織で信頼されるダッシュボードを構築したい」
そんなお悩みをお持ちであれば、無駄な試行錯誤をショートカットして、プロから直接「正しい設計の型」を学んでみませんか?
私たちのPower BI実践セミナーでは、実務で必ず直面する「日付・期間の計算」や「高度なDAXの実装」、そして絶対に崩れない「データモデルの構築法」を、豊富なハンズオンを通じて体系的にお伝えしています。
▼ DAXのつまずきを解消し、真のデータ分析力を手に入れる Power BI セミナー 公式ページで詳細を見る
コメント