この記事で分かること
Power BI でレポートを作成していると、同じ意味のマスタが複数存在し、しかも空白だらけ という状況に直面することがあります。
本社・部門・現場担当がそれぞれ管理しているマスタを前提に分析せざるを得ず、「どの値を信じればいいのか分からない」と感じた経験がある方も多いのではないでしょうか。
この記事では、DAX の SWITCH 関数を使って複数のマスタを一つにまとめ、空白データを補完する実践的な方法 を解説します。
単に関数の書き方を紹介するのではなく、実務でありがちな“部分最適なデータ管理”を前提に、どう解決するか に焦点を当てています。
DAX 関数は使えるものの、信頼度の異なるマスタをどう統合すればよいか分からない。
そんな悩みを抱える実務者にとって、「この考え方なら使えそうだ」 と感じていただける内容です。
空白補完が必要になる実務シーン

実務でよくある想定例
IT 機器管理マスタを例にします。
同じマスタを 本社 IT 部門・各拠点・現場の IT 担当者 がそれぞれ管理しているケースです。
- 本社マスタ
基幹人事システムと連携しており、所属部門や役職、メールアドレスなどの信頼度は高い です。
一方で、承認ルートが長く、現場から遠いため、新規機器の追加や用途変更は反映が遅れ、空白が多くなりがち です。 - 拠点マスタ
本社と現場の中間的な立ち位置で、情報の鮮度と正確性が混在します。 - 担当者マスタ
基幹システムと連携していないため、人事情報は古くなりやすいです。
しかし現場対応が求められるため、空白のままでは困り、手入力で用途や追加情報を即時に埋めています。
本来は一元管理すべきですが、現実には部分最適なマスタ運用が続いている。
この状態で Power BI レポートを作ると、空白値や不整合が分析の邪魔になる のです。
DAX SWITCH関数で解決したい課題
状況整理
- 同じ ID を持つマスタが 3 種類存在します
(本社・拠点・担当) - 各マスタには「機器ID、部門、所有者、機器用途」があります
- 項目ごとに、信頼できるマスタが異なる のがポイントです
項目ごとの信頼度(高 → 低)は以下の通りです。
- 部門:本社 → 拠点 → 担当
- 所有者:本社 → 拠点 → 担当
- 用途:担当 → 拠点 → 本社
<イメージ:ZD01_本社作成マスタ>

<イメージ:ZD02_拠点作成マスタ>

<イメージ:ZD03_担当作成マスタ>

やりたいこと
- 3 つのマスタを組み合わせて、空白のない統一マスタ を作りたい
- 同じ ID・同じ項目に複数の値がある場合、信頼度が最も高い値を優先 します
このようなルールを DAX だけで表現できるか が、今回の課題です。
答え|SWITCH関数とテーブル操作関数の組合せ
本社作成マスタに新しい列を追加
まず、機器IDのリレーションシップを作成します。次に本社作成マスタに 補完用の新しい列 を作成します。
SWITCH 関数と TRUE() を組み合わせ、信頼度が高い順に値を取得 します。それが以下の式です。
部門new =
SWITCH(
TRUE(),
//【第一優先】本社
[部門] <> BLANK(),
[部門],
//【第二優先】拠点
RELATED(‘ZD02_拠点作成マスタ'[部門]) <> BLANK(),
RELATED(‘ZD02_拠点作成マスタ'[部門]),
//【第三優先】担当
RELATED(‘ZD03_担当作成マスタ'[部門]) <> BLANK(),
RELATED(‘ZD03_担当作成マスタ'[部門]),
//どのマスタも空白の場合
BLANK()
)
同様に「所有者」「用途」も作成します。
用途だけは 信頼度の順番が異なる 点に注意します。
用途new =
SWITCH(
TRUE(),
//【第一優先】担当
RELATED(‘ZD03_担当作成マスタ'[用途]) <> BLANK(),
RELATED(‘ZD03_担当作成マスタ'[用途]),
//【第二優先】拠点
RELATED(‘ZD02_拠点作成マスタ'[用途]) <> BLANK(),
RELATED(‘ZD02_拠点作成マスタ'[用途]),
//【第三優先】本社
[用途] <> BLANK(), [用途],
//どのマスタも空白の場合
BLANK()
)
「項目ごとに優先順位を変えられる柔軟性」 が SWITCH 関数の強みです。
統一マスタテーブルを作成
最後に、補完済みの列だけを抜き取った新しいテーブルを作ります。
ZT01_統一マスタ =
SELECTCOLUMNS(
‘ZD01_本社作成マスタ’,
“機器ID”, [機器ID],
“部門”, [部門new],
“所有者”, [所有者new],
“用途”, [用途new]
)
これで 空白のない統一マスタ が完成します。
<イメージ:ZT01_統一マスタ>

答えの解説
使用している関数と考え方
SWITCH(TRUE())
条件分岐を上から順に評価し、最初に TRUE になった値を返します。
BLANK() かどうかを判定
空白でない値だけを採用することで、空白補完を実現しています。
RELATED 関数
リレーションシップを形成した別マスタから値を取得します。
SELECTCOLUMNS関数
テーブルから必要な列だけを抽出した新たなテーブルを作成します。
そして抽出した列名を変更します。即ち「new」を外して元の列名を設定します。(newをつけたのは元データと列名を重複させないため)
実務データに当てはめた考察
ID1の部門、所有者、用途
担当マスタの人事情報が古いため、本社または拠点の値を採用し 正解 です。
ID2の用途変更
用途変更を知っているのは担当だけなので、担当の値を採用して 正解 です。
ID3の新規用途
担当しか把握していないため、担当マスタで空白補充して 正解 です。
ID4の部門、所有者、用途(新規に追加した機器)
担当しか把握していないため、担当マスタで空白補充して 正解 です。
「空白の有無」と「信頼度の違い」をロジックに落とし込めていることが重要です。
まとめ
複数マスタが存在する場面では、空白補完と信頼度の整理 が欠かせません
SWITCH(TRUE()) を使うことで、優先順位を反映したマスタ統合 が可能になります
項目ごとに信頼度評価順を変えられる点は、実務データと非常に相性が良いです
DAX だけで完結するため、モデル設計をシンプルに保てます
Power BI でのマスタ統合や分析精度向上に、ぜひ役立ててください。(終わり)

コメント