Power BI の DAX メジャーが長すぎて保守不能になっていませんか?
CALCULATE と FILTER が 200 行にも連なる DAX 式は、高度なスキルの証拠ではありません。多くの場合、上流のウェアハウスが必要なサロゲートキー、変更履歴、適切な粒度を提供してくれなかったことの表れです。
このような課題はありませんか?
- 1 つのメジャーが 100 行を超えて肥大化し、作成した本人しか中身を理解できなくなっている。
- 画面のビジュアル描画に 15〜45 秒もかかり、遅延の原因を調べると常に同じ 3 つのメジャーに行き着く。
- 1 つのメジャーのロジックを修正すると、別ページの 4 つのビジュアルが予期せず破損する。
- 現在の数値を集計するためではなく、「過去のある時点(例えば昨年の 3 月時点)でその値が何だったか」を算出するために複雑な DAX を書かされている。
長大で複雑な DAX 式は、DAX そのものの問題であることは滅多にありません。上流のデータウェアハウスで欠落していたデータ構造を、ダッシュボード上でユーザーがクリックするたびにクエリ実行時に力技で再構築していることが原因です。
長大な DAX メジャーが実際に行っていること
- 履歴データの無理な復元: ウェアハウス側で履歴(SCD)が保持されていないため、日付フィルターを何重にも重ねた
CALCULATEで過去のステータスを無理やり再現している。 - 多対多リレーションの無理な解消: 中間ブリッジテーブルが存在しないため、イテレーター関数を使って関係性を動的に解決している。
- 疑似キーの生成: 結合のための適切なサロゲートキーがないため、
LOOKUPVALUEや文字列結合したテキスト列でテーブル同士を結びつけている。 - 集計粒度の不整合の修正: ファクトテーブルが複数の粒度(例:日次と月次、注文と明細)を混在して保持しているため、フィルター処理したテーブルに対して
SUMXを回している。
これら 4 つの重い処理が、ビジュアルごと、フィルターごと、ユーザーの操作ごとに毎回再実行されます。それが「15〜45 秒の描画待ち」の正体です。
なぜその負担がアナリストに押し付けられるのか
- 最初から好んで複雑な式を書いた人はいません。その週の報告締め切りに間に合わせるために、動くビジュアルを作る最短ルートがそれだったからです。
- DAX のロジックは
.pbixファイルの内部に閉じ込められているため、上流のチームからはレビューも再利用もできません。 - あなたにはメジャーを書き直すことはできても、必要なディメンションを DWH に追加することはできません。
本来その処理が行われるべき場所
- 履歴管理、サロゲートキー、ブリッジテーブル、粒度設計は「DWH」の仕事: DAX 式の中でユーザーのクリックごとに再計算させるべきではありません。
- 1 箇所の中央基盤に集約すべき: データウェアハウスやデータハブ側で 1 度だけ構造化し、すべてのレポートがそれを参照すべきです。
- 「DWH の改修は高額で時間がかかる」と思われるかもしれませんが: 自動化プラットフォームを導入すれば、モデルから構造とパイプラインが自動生成されるため、数ヶ月も待たされることはありません。
完成したモデルが届いたときに変わること
Datavault Builder は、SQL Server、Azure SQL、Synapse、Fabric、Snowflake、Databricks、BigQuery 上で、キー、履歴、粒度が整ったクリーンなスタースキーマを自動生成します。
- 明確なサロゲートキー: リレーションシップが自然に成立し、重い
LOOKUPVALUEは完全に不要になります。 - Point-in-Time(PIT)テーブル: 「3 月時点の状況」はメジャーの計算ではなく、テーブルの単純な結合(JOIN)としてミリ秒で回答されます。
- ブリッジテーブルの標準整備: 多対多リレーションは Power BI に届く前に解決されます。
- ファクトテーブルの単一粒度: 粒度が揃っているため、
SUMは本来の単純な合計として機能します。 - メジャーはシンプルな
SUM、AVERAGE、COUNTだけになり、チームメンバーの誰もが瞬時にコードレビューできるようになります。
上流チームに何を要求すべきか
「ディメンションの履歴が管理されていないため、メジャー側でクエリ実行時に無理やり過去のデータを復元しており、ダッシュボードの表示が遅くなっています。DWH 側に Point-in-Time テーブルと適切なサロゲートキーを用意して、メジャーを単純な SUM に簡素化できませんか?」
単に「レポートを高速化してほしい」と頼むのではなく、何が構造として欠落しているのかを具体的に伝えることが解決への近道です。
実際のデータで動作をご確認ください
無料デモをお申し込みいただき、最も課題を抱えているレポートをお持ち寄りください。
数値の整合性を保つための 3 つのステップ
-
既存のロジックを抽出
現在レポート内に点在している計算式、結合、フィルターを整理・収集します。
-
1 か所に集約・一元化
ロジックをデータウェアハウスモデルへ一度集約することで、すべてのレポートが同一の定義を参照します。
-
整合性のある正確な数値を実現
すべてのレポートで整合した数値が表示され、「この数値の出所はどこか」という疑問に明確に答えられるようになります。
Datavault Builder が完成したモデルをレポートに提供する仕組み
-
完成したモデルが即座に利用可能
Datavault Builder は Vault やスタースキーマを自動生成し、SQL Server、Azure SQL、Synapse、Fabric、Snowflake、Databricks、BigQuery など既存のデータベース上でネイティブに実行します。
-
レポート側の集計・変換作業を解消
マージ、パース、ファジーマッチなどの手間がレポート側から完全に不要になります。
-
ソースデータを統合した状態で提供
ERP、CRM、EC サイトなどの顧客データを整合性のあるディメンションに統合。結合処理はデータウェアハウス内で一度だけ行われ、各レポートで毎回繰り返す必要がなくなります。
-
いつでも過去時点のデータを遡及クエリ可能
すべての変更履歴が到着順にそのまま保持されるため、ソース側でレコードが上書き更新された場合でも、当時の状態(as-was)と現在の状態(as-is)の双方を正確にレポーティングできます。
-
すべての数値に明確なリネージを保持
ビジネスロジックにデータリネージが付与されるため、「この数値がどこから算出されたのか」をいつでも可視化できます。
-
上流でデータ変更を適切に処理
緩やかに変化するディメンション(SCD)は、近似処理ではなく、上流の Vault サテライトとして正確に管理されます。
導入事例: Porta
専門家にご相談ください
弊社のセールスディレクターが 20 分間で、貴社の環境や要件に適合するか率直にお答えします。
Matt Collett
Sales Director
ご都合の良い日時をお選びください:
本シリーズで解説するその他の課題
-
Power BI レポートごとに同じ指標の数値が食い違っていませんか?
財務、営業、運用部門がそれぞれセマンティックモデルを構築し、各モデル内では整合性が取れている。しかし、同じ「売上」でも定義が部門間で合意されたことは一度もない。数値の不一致の原因と、根本的な解決策を解説します。
-
Power BI の DirectQuery レポートがクリックのたびに重くありませんか?
DirectQuery や Direct Lake はリアルタイムな最新データを提供すると謳われています。しかし実際に起きるのは、表示に 30 秒かかるビジュアルと、誰も説明できない高額なクラウドアカウントの請求書です。問題は DirectQuery モード自体ではなく、その下にあるスキーマ構造にあります。
-
Power BI の深夜のスケジュール更新が失敗し続けていませんか?
スケジュールされた定期更新がタイムアウトし、Power Query がメモリ不足エラーを起こし、朝ダッシュボードを開いたユーザーからの指摘で初めて障害に気づく。その原因は Power BI 自体ではなく、Power BI に背負わせているデータ処理そのものにあります。