
こんにちはMJです!Power BIのデータモデリングでは、Power QueryのM言語やDAXを使用して新しい列を作成することは一般的な作業です。
しかし、データモデルのサイズが大きくなるほど、その選択が開発パフォーマンスに与える影響は大きくなります。
特にデータの更新(Refresh)時には、この2つの方法の動作の違いが処理時間に大きな差をもたらします。
今回は、両者がどのように動作するのか、そしてレポート開発の観点からどのように選択すべきかを解説します。
Power Queryでの新しい列の作成
Power Queryで列を追加することは、データをモデルに読み込む前の変換処理にあたります。
Power Queryエディターの「列の追加」タブから新しい列を作成できます。
カスタム列では以下のようにM言語式で作成します。
作成した列は次のように表示されます。
処理した履歴は右の「運用したステップ」に表示されます。
主な動作:M言語とクエリフォールディング
- 動作タイミング:データ読み込み前
- 使用言語:M言語
- メリット:ローカルで計算を行うのではなく、データベース側で計算を実行することで、Power BIとデータベース間のデータ転送量を最小化し、クエリのパフォーマンスを向上させます。
データ量による更新負荷
- 全テーブルの再読み込み:Power Queryの変換ステップで新しい列を追加したり、既存の変換を修正すると、そのテーブル全体を再度ソースから読み込み、再計算します。
- 処理時間の増加:データモデルが大きいほど、この再読み込みと変換処理に多くの時間がかかります。データ量が多い場合、Power Queryの変更は慎重に行う必要があります。

DAXによる計算列(新しい列)
DAX計算列は、データがモデルに読み込まれ、テーブル間のリレーションシップが設定された後に定義されます。
上段のメニュー「新しい列」から列を作成できます。
DAX式で列を作成すると、名前の横にアイコンが表示され、Power Queryから取り込まれた通常の列と視覚的に区別されます。
主な動作:行コンテキストとモデル内計算
- 動作タイミング:データモデル読み込み後
- 使用言語:DAX
- メリット:テーブル間の行ごとの計算を効率的に処理できる
メモリとパフォーマンスの負担
計算列を追加すると、データモデル全体のサイズが増加し、Power BIエンジンが処理するメモリの使用量も増えます。
その結果、レポートの操作レスポンスが遅くなる可能性があります。
DAX Studioから両者で追加した列を見るとデータのサイズが異なっています。
まとめ
Power BIで開発を進める中で、新しい列を追加する場面があると思います。
どのようなデータを使って開発するかによって、最適な方法も変わります。
本番データに近い結果を見たいなら多くのデータを使用すべきですが、その分データ更新に時間がかかるリスクもあります。
一方で、DAXで列を作成すれば素早く結果を得られますが、メモリ負担が増える可能性があります。
これらの特徴を理解した上で、レポート開発時にはパフォーマンスと効率を考慮した戦略的な選択が求められます。