この記事は、Microsoft Power BI Advent Calendar 2025 12月7日担当分の記事です。
1. はじめに
計画金額を開始点、実績金額を終了点とするウォーターフォール図の作成方法をご紹介します。
2. 完成イメージ
主要な勘定科目の増減を直感的に把握できる「計画 vs 実績」のウォーターフォール図(階段チャート)です。
3. 公式ドキュメント
4. サンプルデータ
| 勘定科目 | 計画 | 実績 |
|---|---|---|
| 材料費 | 1200 | 1150 |
| 労務費 | 800 | 850 |
| 経費 | 500 | 480 |
| 減価償却費 | 600 | 620 |
| 外注費 | 700 | 750 |
| 研究開発費 | 400 | 390 |
| 販売費 | 550 | 530 |
| 一般管理費 | 450 | 470 |
| 物流費 | 300 | 310 |
| 修繕費 | 200 | 210 |
5. 作成手順
5-1. テーブルの準備
新しいテーブルを作成します。
SampleManufacturingTable =
DATATABLE (
"勘定科目", STRING,
"計画", INTEGER,
"実績", INTEGER,
{
{ "材料費", 1200, 1150 },
{ "労務費", 800, 850 },
{ "経費", 500, 480 },
{ "減価償却費", 600, 620 },
{ "外注費", 700, 750 },
{ "研究開発費", 400, 390 },
{ "販売費", 550, 530 },
{ "一般管理費", 450, 470 },
{ "物流費", 300, 310 },
{ "修繕費", 200, 210 }
}
)
5-2. パラメータの設定
ウォーターフォール図ビジュアルには、3つのパラメータがあります。

5-2-1. カテゴリ(Category)
カテゴリパラメータ用にWaterfallCategoryテーブルを作成します。
WaterfallCategory =
DATATABLE (
"CategorySort", INTEGER,
"Category", STRING,
{
{ 1, "計画" },
{ 2, "実績" }
}
)
| CategorySort | Category |
|---|---|
| 1 | 計画 |
| 2 | 実績 |
Category列をCategorySort列で「列で並び替え」をして、計画・実績の順番付けをします。
カテゴリパラメータに 'WaterfallCategory'[Category] 列を指定します。
5-2-2. 詳細(Breakdown)
詳細パラメータに 'SampleManufacturingTable'[勘定科目] 列を指定します。
5-2-3. Y 軸(Values)
Y軸パラメータに入力できるデータは1つです。そこで、SWITCH関数を使って選択されたCategoryで計画金額と実績金額を切り替えるDAXを作ります。
RevenueVariance =
VAR _startValue =
SUM ( SampleManufacturingTable[計画] )
VAR _endValue =
SUM ( SampleManufacturingTable[実績] )
RETURN
SWITCH (
SELECTEDVALUE ( WaterfallCategory[Category] ),
"計画", _startValue,
"実績", _endValue
)
Y軸パラメータに [RevenueVariance] メジャーを指定します。
以上で作成できます。
6. ベストプラクティスを考える
上記のようにDAXが少し複雑になってしまうのは、ファクトテーブルが標準ビジュアルに適していないからかもしれません。
以下のようなディメンションテーブルとファクトテーブルに変換し、スタースキーマにしてみましょう。
6-1. ディメンションテーブル DimCategory
| CategoryKey | Category |
|---|---|
| 1 | 計画 |
| 2 | 実績 |
6-2. ディメンションテーブル DimAccounts
| AccountsKey | Accounts |
|---|---|
| 1 | 材料費 |
| 2 | 労務費 |
| 3 | 経費 |
| 4 | 減価償却費 |
| 5 | 外注費 |
| 6 | 研究開発費 |
| 7 | 販売費 |
| 8 | 一般管理費 |
| 9 | 物流費 |
| 10 | 修繕費 |
6-3. ファクトテーブル Expense
| CategoryKey | AccountsKey | Amount |
|---|---|---|
| 1 | 1 | 1200 |
| 1 | 2 | 800 |
| 1 | 3 | 500 |
| 1 | 4 | 600 |
| 1 | 5 | 700 |
| 1 | 6 | 400 |
| 1 | 7 | 550 |
| 1 | 8 | 450 |
| 1 | 9 | 300 |
| 1 | 10 | 200 |
| 2 | 1 | 1150 |
| 2 | 2 | 850 |
| 2 | 3 | 480 |
| 2 | 4 | 620 |
| 2 | 5 | 750 |
| 2 | 6 | 390 |
| 2 | 7 | 530 |
| 2 | 8 | 470 |
| 2 | 9 | 310 |
| 2 | 10 | 210 |
6-4. メジャー TotalAmount
TotalAmount =
SUM( Expense[Amount] )
6-5. スタースキーマ
6-6. パラメータの設定
6-6-1. カテゴリ(Category)
カテゴリパラメータに 'DimCategory'[Category] 列を指定します。
6-6-2. 詳細(Breakdown)
詳細パラメータに 'DimAccounts'[Accounts] 列を指定します。
6-6-3. Y 軸(Values)
Y軸パラメータに [TotalAmount] メジャーを指定します。
6-7. 完成
7. まとめ
- 標準ビジュアルに適したファクトテーブルにすれば、ウォーターフォール図をシンプルに実装できます。
- もし適していなくても、DAXを駆使して開始点と終了点を任意に設定することで時系列ではないカテゴリの比較ができます。

