はじめに
以前の記事では、Power BI の DAX クエリ ビューで Copilot を使い、セマンティック モデルにメジャーを効率的に作成する方法を紹介しました。DAX クエリ ビューの Copilot は「DAX クエリの生成・説明」が中心で、メジャーのたたき台作りやドキュメント生成に強い機能です。
今回はその続編として、セマンティック モデルを AI で作成・編集する 2 つの方法を比較します。
| # | 方法 | 概要 |
|---|---|---|
| ① | DAX クエリ ビューの Copilot(Power BI Desktop / Fabric ポータル) | DAX クエリ ビュー内の Copilot で、メジャーの生成・DAX の説明・クエリの作成を行う(GA) |
| ② | Power BI Modeling MCP Server(VS Code + GitHub Copilot 等) | MCP(Model Context Protocol)サーバー経由で、外部の AI エージェントからセマンティック モデルを自然言語で操作する(パブリック プレビュー) |
方法① DAX クエリ ビューの Copilot (Power BI Desktop / Fabric ポータル)
DAX クエリ ビューとは
DAX クエリ ビューは、Power BI Desktop および Fabric ポータル上のセマンティック モデルで DAX クエリを記述・実行できるエディターです。2024 年 3 月の GA 以降、Copilot 統合が進み、自然言語で DAX クエリやメジャーを生成できるようになっています。
Copilot でできること(3 つの機能)
DAX クエリ ビューの Copilot は、主に以下の 3 種類の操作を提供します。
| 機能 | 説明 |
|---|---|
| DAX クエリの生成 | 自然言語の指示から EVALUATE 文を含む DAX クエリを生成する |
| DAX の説明 | 既存の DAX 式やクエリの動作を日本語で解説する |
| メジャーの生成 | 自然言語の指示からメジャー定義を生成し、DEFINE MEASURE 句でプレビュー → モデルへ反映する |
前回の記事では、3 番目の「メジャーの生成」に焦点を当て、Copilot が提案したメジャーをその場で実行結果を確認しながらモデルに追加する手順を紹介しました。
利用の前提条件
- Fabric 容量(F SKU)または Power BI Premium 容量 — Copilot の利用に必要(以前は F64 以上の制限があったが、現在は撤廃済み)
- Power BI Desktop(最新版推奨)または Fabric ポータルのセマンティック モデル
- テナント管理者が Copilot 機能を有効にしていること
Copilot の利用には Fabric 容量が必要です。Pro / PPU ライセンスのみの環境では DAX クエリ ビュー自体は利用できますが、Copilot 機能は使用できません。
基本的な手順
前回の記事で紹介したワークフローをまとめると、以下の流れになります。
- DAX クエリ ビューを開く:Power BI Desktop のリボンから DAX クエリ ビューに切り替える
- Copilot にメジャーを依頼:自然言語で「売上の前年比を計算するメジャーを作成して」等と入力
-
生成結果をプレビュー:
DEFINE MEASURE+EVALUATE形式で生成された DAX を実行し、計算結果を確認 - モデルに反映 — 問題なければ「モデルの更新」でセマンティック モデルにメジャーを追加
- 反復・調整 — 修正が必要な場合は Copilot に追加の指示を出して DAX を調整
適したユースケース
- メジャーの「たたき台」を素早く作成し、実行結果を見ながら調整したい場合
- DAX に不慣れなユーザーが Copilot の提案をもとに学習しながら開発する場合
- 個別のメジャーやクエリを対話的に作成・検証する場合
方法② Power BI Modeling MCP Server(VS Code + GitHub Copilot 等)
MCP とは
MCP(Model Context Protocol) は、AI エージェントが外部ツールやサービスとやり取りするためのオープンな通信プロトコルです。MCP サーバーがツール側の機能を公開し、MCP クライアント(AI エージェント)がそれを呼び出すことで、AI が実世界のシステムを操作できるようになります。
Power BI Modeling MCP Server の概要
Power BI Modeling MCP Server は、Microsoft が公式に提供するオープンソースの MCP サーバーです。ローカルで動作し、AI エージェント(GitHub Copilot、Claude など)と Power BI セマンティック モデルをシームレスに接続します。
- ステータス: パブリック プレビュー(2026 年 4 月時点)
- ライセンス: MIT
自然言語で指示するだけで、テーブル・列・メジャー・リレーションシップなどのモデリング操作を AI エージェントが実行します。
インストール方法 (VS Code 推奨)
- Visual Studio Code をインストール
- GitHub Copilot と GitHub Copilot Chat 拡張機能をインストール
- Power BI Modeling MCP VS Code 拡張機能 をインストール
- GitHub Copilot Chat を開き、
powerbi-modeling-mcpが利用可能であることを確認
接続先の種類
Power BI Modeling MCP Server は、以下の 3 種類のセマンティック モデルに接続できます。
| 接続先 | プロンプト例 |
|---|---|
| Power BI Desktop | Connect to 'Sales Report' in Power BI Desktop |
| Fabric ワークスペース | Connect to semantic model 'Sales Model' in Fabric Workspace 'Production' |
| PBIP ファイル | Open semantic model from PBIP folder 'C:\Projects\Sales\Sales.SemanticModel\definition' |
主なツール(操作カテゴリ)
| ツール カテゴリ | できること |
|---|---|
connection_operations |
Power BI Desktop や Fabric ワークスペースへの接続 |
database_operations |
セマンティック モデルの管理、TMDL のインポート/エクスポート |
model_operations |
モデル全体の取得・作成・更新・リネーム・リフレッシュ |
table_operations |
テーブルの作成・更新・削除・リネーム |
column_operations |
列の作成・更新・削除・リネーム |
measure_operations |
メジャーの作成・更新・削除・リネーム・テーブル間移動 |
relationship_operations |
リレーションシップの作成・更新・削除・有効化/無効化 |
dax_query_operations |
DAX クエリの実行・検証・生成 |
calculation_group_operations |
計算グループと計算項目の管理 |
security_role_operations |
セキュリティ ロールと RLS の設定 |
culture_operations |
多言語対応のカルチャ管理 |
object_translation_operations |
モデル オブジェクトの翻訳管理 |
partition_operations |
テーブル パーティションの管理 |
perspective_operations |
パースペクティブの管理 |
named_expression_operations |
名前付き式と Power Query パラメーターの管理 |
trace_operations |
Analysis Services イベントのトレースとキャプチャ |
実際の操作例
本記事の執筆にあたり、Power BI Desktop のサンプル データ Financial Sample.xlsx を読み込んだだけのフラットな 1 テーブル モデルに対して、VS Code + GitHub Copilot + Power BI Modeling MCP Server で以下の操作を自然言語の指示だけで実行しました。
スタースキーマの構築: 「スタースキーマにして」と指示するだけで、AI がファクトテーブルから DimSegment・DimCountry・DimProduct・DimDiscountBand・DimDate の 5 つのディメンション テーブルを自動生成し、リレーションシップを一括作成しました。
ベストプラクティスの適用: 「モデリングのベストプラクティスに合わせて修正して」と指示すると、テーブルの Fact/Dim 命名規約への一括リネーム、FK 列と冗長列の非表示化、DimDate の日付テーブル マーク、MonthName の月番号ソート、Country 列の地理データ カテゴリ設定、数値列の書式・SummarizeBy 設定、全テーブルへの説明追加をまとめて実行しました。
メジャーの一括作成: 「スタースキーマにして」の指示時に基本メジャー 6 個(Total Sales、Total Profit 等)を自動作成。続けて「すべてのメジャーに対して前月と比較するメジャーを追加して」と指示すると、前月値(PM)と前月比変化率(MoM%)の 12 個を一括作成し、MoM 表示フォルダに自動分類しました。さらに「すべてのメジャーの日本語バージョンを作成して」と指示するだけで、全 18 メジャーの日本語版を一括生成しました。
ドキュメントの自動付与: 「すべてのテーブルと列の説明に日本語の説明を追加して」と指示し、6 テーブル・24 列に対して英語・日本語のバイリンガル説明を一括追加しました。
このように、従来は手作業で数時間かかるモデリング作業を、自然言語の対話だけで短時間に完了できます。
このセマンティック モデルの構造を文書化したmdファイルを作成してもらったので、興味のある方は開いてみてください。
financials_mcp セマンティック モデル 構造ドキュメント
# financials_mcp セマンティック モデル構造ドキュメント(2026-04-03)Power BI Desktop の financials_mcp セマンティック モデルの構造を文書化したリファレンスドキュメント。
- モデル名: Model
- モード: Import
- カルチャ: ja-JP
- 最終更新: 2026-04-02T08:23:38(構造変更)
1. テーブル一覧
| テーブル名 | 種類 | 列数 | メジャー数 | 説明 |
|---|---|---|---|---|
| FactSales | ファクト | 13 | 36 | 売上トランザクションを格納。収益・原価・利益の数値を保持する |
| DimSegment | ディメンション | 2 | 0 | 顧客セグメント(Government, Midmarket, Channel Partners, Enterprise, Small Business) |
| DimCountry | ディメンション | 2 | 0 | 国・地域ディメンション。地理的分析に使用する |
| DimDiscountBand | ディメンション | 1 | 0 | 割引帯(None, Low, Medium, High) |
| DimDate | ディメンション(日付テーブル) | 5 | 0 | 日付ディメンション。タイムインテリジェンス分析用。モデルの日付テーブルとしてマーク済み |
| DimProduct | ディメンション | 1 | 0 | 製品ディメンション |
上記のほか Power BI が自動生成する
DateTableTemplateおよびLocalDateTableが存在するが、ユーザー定義のDimDateを優先して使用している。
2. テーブル詳細
2.1 FactSales
| 列名 | データ型 | 説明 |
|---|---|---|
| Segment | String | セグメント名(FK: DimSegment) |
| Country | String | 国名(FK: DimCountry) |
| Product | String | 製品名(FK: DimProduct) |
| Discount Band | String | 割引帯(FK: DimDiscountBand) |
| Units Sold | Double | 販売数量 |
| Manufacturing Price | Int64 | 製造原価(単価) |
| Sale Price | Int64 | 販売価格(単価) |
| Gross Sales | Double | 総売上(割引前) |
| Discounts | Double | 割引額 |
| Sales | Double | 売上(割引後) |
| COGS | Double | 売上原価 |
| Profit | Double | 利益(Sales − COGS) |
| Date | DateTime | 取引日(FK: DimDate) |
2.2 DimSegment
| 列名 | データ型 | 説明 |
|---|---|---|
| SegmentKey | Int64 | セグメントの代理キー |
| Segment | String | セグメント名 |
2.3 DimCountry
| 列名 | データ型 | 説明 |
|---|---|---|
| CountryKey | Int64 | 国の代理キー |
| Country | String | 国名 |
2.4 DimDiscountBand
| 列名 | データ型 | 説明 |
|---|---|---|
| Discount Band | String | 割引帯(None / Low / Medium / High) |
2.5 DimDate
| 列名 | データ型 | 説明 |
|---|---|---|
| Date | DateTime | 日付(主キー) |
| Year | Int64 | 年 |
| MonthNumber | Int64 | 月番号(1〜12)。MonthName のソート用 |
| MonthName | String | 月名(英語表記) |
| Quarter | String | 四半期(Q1〜Q4) |
2.6 DimProduct
| 列名 | データ型 | 説明 |
|---|---|---|
| Product | String | 製品名 |
3. リレーションシップ
| 名前 | From テーブル | From 列 | To テーブル | To 列 | カーディナリティ | クロスフィルター | アクティブ |
|---|---|---|---|---|---|---|---|
| Fact_to_DimSegment | FactSales | Segment | DimSegment | Segment | Many → One | 一方向 | Yes |
| Fact_to_DimCountry | FactSales | Country | DimCountry | Country | Many → One | 一方向 | Yes |
| Fact_to_DimDiscountBand | FactSales | Discount Band | DimDiscountBand | Discount Band | Many → One | 一方向 | Yes |
| Fact_to_DimDate | FactSales | Date | DimDate | Date | Many → One | 一方向 | Yes |
| Fact_to_DimProduct | FactSales | Product | DimProduct | Product | Many → One | 一方向 | Yes |
| (自動生成) | FactSales | Date | LocalDateTable | Date | Many → One | 一方向 | No(非アクティブ) |
典型的なスター スキーマ構成。すべてのリレーションシップが FactSales を中心に放射状に接続されている。
4. メジャー一覧
すべてのメジャーは FactSales テーブルに定義されている。
4.1 基本メジャー(表示フォルダなし)
| メジャー名 | DAX 式 | 書式 |
|---|---|---|
| Total Sales | SUM(FactSales[Sales]) |
$#,##0.00 |
| Total Profit | SUM(FactSales[Profit]) |
$#,##0.00 |
| Total Units Sold | SUM(FactSales[Units Sold]) |
#,##0 |
| Total COGS | SUM(FactSales[COGS]) |
$#,##0.00 |
| Total Gross Sales | SUM(FactSales[Gross Sales]) |
$#,##0.00 |
| Profit Margin | DIVIDE(SUM(FactSales[Profit]), SUM(FactSales[Sales]), 0) |
0.00% |
4.2 前月比メジャー(表示フォルダ: MoM)
| メジャー名 | DAX 式 | 書式 |
|---|---|---|
| Total Sales PM | CALCULATE([Total Sales], DATEADD(DimDate[Date], -1, MONTH)) |
$#,##0.00 |
| Total Sales MoM% | VAR _current = [Total Sales] VAR _prev = [Total Sales PM] RETURN DIVIDE(_current - _prev, _prev) |
0.00% |
| Total Profit PM | CALCULATE([Total Profit], DATEADD(DimDate[Date], -1, MONTH)) |
$#,##0.00 |
| Total Profit MoM% | VAR _current = [Total Profit] VAR _prev = [Total Profit PM] RETURN DIVIDE(_current - _prev, _prev) |
0.00% |
| Total Units Sold PM | CALCULATE([Total Units Sold], DATEADD(DimDate[Date], -1, MONTH)) |
#,##0 |
| Total Units Sold MoM% | VAR _current = [Total Units Sold] VAR _prev = [Total Units Sold PM] RETURN DIVIDE(_current - _prev, _prev) |
0.00% |
| Total COGS PM | CALCULATE([Total COGS], DATEADD(DimDate[Date], -1, MONTH)) |
$#,##0.00 |
| Total COGS MoM% | VAR _current = [Total COGS] VAR _prev = [Total COGS PM] RETURN DIVIDE(_current - _prev, _prev) |
0.00% |
| Total Gross Sales PM | CALCULATE([Total Gross Sales], DATEADD(DimDate[Date], -1, MONTH)) |
$#,##0.00 |
| Total Gross Sales MoM% | VAR _current = [Total Gross Sales] VAR _prev = [Total Gross Sales PM] RETURN DIVIDE(_current - _prev, _prev) |
0.00% |
| Profit Margin PM | CALCULATE([Profit Margin], DATEADD(DimDate[Date], -1, MONTH)) |
0.00% |
| Profit Margin MoM | [Profit Margin] - [Profit Margin PM] |
0.00 pp |
4.3 日本語ラッパーメジャー(表示フォルダ: 基本)
英語メジャーへの参照として定義されている。日本語レポート向けの表示名を提供する。
| メジャー名 | DAX 式 | 書式 |
|---|---|---|
| 売上合計 | [Total Sales] |
$#,##0.00 |
| 利益合計 | [Total Profit] |
$#,##0.00 |
| 販売数量合計 | [Total Units Sold] |
#,##0 |
| 原価合計 | [Total COGS] |
$#,##0.00 |
| 総売上合計 | [Total Gross Sales] |
$#,##0.00 |
| 利益率 | [Profit Margin] |
0.00% |
4.4 日本語ラッパーメジャー(表示フォルダ: 前月比)
| メジャー名 | DAX 式 | 書式 |
|---|---|---|
| 売上合計 前月 | [Total Sales PM] |
$#,##0.00 |
| 売上合計 前月比% | [Total Sales MoM%] |
0.00% |
| 利益合計 前月 | [Total Profit PM] |
$#,##0.00 |
| 利益合計 前月比% | [Total Profit MoM%] |
0.00% |
| 販売数量合計 前月 | [Total Units Sold PM] |
#,##0 |
| 販売数量合計 前月比% | [Total Units Sold MoM%] |
0.00% |
| 原価合計 前月 | [Total COGS PM] |
$#,##0.00 |
| 原価合計 前月比% | [Total COGS MoM%] |
0.00% |
| 総売上合計 前月 | [Total Gross Sales PM] |
$#,##0.00 |
| 総売上合計 前月比% | [Total Gross Sales MoM%] |
0.00% |
| 利益率 前月 | [Profit Margin PM] |
0.00% |
| 利益率 前月比 | [Profit Margin MoM] |
0.00 pp |
5. メジャー依存関係
Total Sales ─────────┬─ Total Sales PM ─────── Total Sales MoM%
└─ Profit Margin ────┬── Profit Margin PM ─── Profit Margin MoM
│
Total Profit ────────┬─ Total Profit PM ──── Total Profit MoM%
└─ Profit Margin (via SUM)
Total Units Sold ────── Total Units Sold PM ── Total Units Sold MoM%
Total COGS ──────────── Total COGS PM ──────── Total COGS MoM%
Total Gross Sales ───── Total Gross Sales PM ── Total Gross Sales MoM%
日本語ラッパーメジャー(売上合計, 利益合計 等)は、対応する英語メジャーへの単純参照のため上記ツリーの末端に位置する。
6. スキーマ概要図
┌─────────────┐
│ DimSegment │
│ ───────── │
│ SegmentKey │
│ Segment │◄──────┐
└─────────────┘ │
│ M:1
┌─────────────┐ │ ┌──────────────────────────────────────────┐
│ DimCountry │ │ │ FactSales │
│ ───────── │ │ │ ────────────────────────────────── │
│ CountryKey │ ├──────│ Segment, Country, Product, │
│ Country │◄──────┤ │ Discount Band, Units Sold, │
└─────────────┘ │ M:1 │ Manufacturing Price, Sale Price, │
│ │ Gross Sales, Discounts, Sales, │
┌───────────────┐ │ │ COGS, Profit, Date │
│ DimDiscountBand│ │ │ │
│ ───────────── │ │ │ [36 measures] │
│ Discount Band │◄───┤ └──────────────────────────────────────────┘
└───────────────┘ │ M:1 │ │
│ │ M:1 │ M:1
┌─────────────┐ │ ┌───────┴──────┐ ┌───┴──────────┐
│ DimProduct │ │ │ DimDate │ │ LocalDateTable│
│ ───────── │ │ │ ──────── │ │ (非アクティブ)│
│ Product │◄──────┘ │ Date (PK) │ └──────────────┘
└─────────────┘ │ Year │
│ MonthNumber│
│ MonthName │
│ Quarter │
└──────────────┘
データ プライバシーの考慮事項
MCP サーバーはローカルで動作し、既存の資格情報と権限を使用してセマンティック モデルに接続します。Power BI のセキュリティ制御はバイパスされません。ただし、MCP サーバーが取得したメタデータやクエリ結果は MCP クライアント(VS Code など)経由で LLM プロバイダーに送信される可能性があります。
- GitHub Copilot を使用する場合は、GitHub Copilot のモデル ホスティングに関するドキュメントを参照してください。
- 組織の AI データ取り扱いポリシーに従って運用してください。
AI エージェントをセマンティック モデルに接続する際は、予期しない変更が行われる可能性があるため、事前にモデルのバックアップを作成してください。
2 つの方法の比較
| 比較項目 | ① DAX クエリ ビュー Copilot | ② Power BI Modeling MCP Server |
|---|---|---|
| 動作環境 | Power BI Desktop / Fabric ポータル | VS Code、Claude Desktop、Cursor など MCP 対応クライアント |
| 操作方式 | DAX クエリ ビュー内で Copilot と対話 | 自然言語プロンプトで AI エージェントが操作を実行 |
| 対象範囲 | 現在開いているモデルの DAX クエリ・メジャー | Power BI Desktop、Fabric ワークスペース、PBIP ファイル |
| 主な操作 | DAX クエリ生成、DAX 説明、メジャー生成 | テーブル・列・メジャー・リレーションシップ・RLS・翻訳等、モデル全体の CRUD |
| バルク操作 | 1 つずつ対話的に生成・追加 | AI が一括操作(数百オブジェクトの一括リネーム・翻訳等) |
| 実行結果の確認 | DAX クエリをその場で実行し結果プレビュー可能 | DAX クエリの実行・検証・ベンチマーク比較が可能 |
| 前提条件 | Fabric 容量(F SKU)/ Premium 容量 + Copilot 有効化 | VS Code + GitHub Copilot(または他の MCP クライアント) |
| 学習コスト | 低い(Power BI Desktop 内で完結) | 中程度(VS Code + MCP の概念理解が必要) |
| 適したユースケース | メジャーの対話的な作成・検証、DAX の学習 | 大量のモデリング作業を自然言語で一気に自動化したい |
| ステータス | GA(一般提供) | パブリック プレビュー |
使い分けガイド
2 つの方法は、それぞれ異なる強みを持っています。以下のシナリオ別に使い分けを検討してください。
| シナリオ | おすすめ |
|---|---|
| DAX に不慣れで、メジャーの書き方を学びたい | ① DAX クエリ ビュー Copilot |
| 個別のメジャーを対話的に作成・検証したい | ① DAX クエリ ビュー Copilot |
| Power BI Desktop 内で完結させたい | ① DAX クエリ ビュー Copilot |
| 数十~数百のメジャーを一括で作成・リネームしたい | ② Power BI Modeling MCP |
| テーブル・列・リレーションシップを含むモデル全体を構築したい | ② Power BI Modeling MCP |
| モデルのドキュメントや翻訳を自動生成したい | ② Power BI Modeling MCP |
| 複数モデル間で DAX のベンチマーク比較をしたい | ② Power BI Modeling MCP |
| VS Code + GitHub Copilot の開発環境を活用したい | ② Power BI Modeling MCP |
両方の方法は排他的ではなく、組み合わせて使うことで効率を最大化できます。たとえば以下のようなワークフローが考えられます。
- MCP でモデルのスキャフォールド(テーブル・列・リレーションシップ)を一括作成
- MCP で命名規則の統一やドキュメントの自動付与を実行
- DAX クエリ ビュー Copilot でビジネス ロジックの複雑なメジャーを対話的に作成・検証
- MCP でモデル全体のドキュメントを Markdown に出力してレビュー
まとめ
- セマンティック モデルの AI 支援は、DAX クエリの生成からエージェント主導の一括モデリング操作へと広がっています。
- DAX クエリ ビュー Copilot は、Power BI Desktop / Fabric ポータル内でメジャーの生成・検証を対話的に行える、手軽で学習コストの低いアプローチです。
- Power BI Modeling MCP Server は、VS Code + GitHub Copilot 等の AI エージェントからセマンティック モデルを自然言語で操作できる、より自動化志向のアプローチです。
- DAX クエリ ビュー Copilot は GA、MCP Server はパブリック プレビュー段階です。MCP Server は今後の GA に向けてツールや動作が変更される可能性があります。
- 両者を組み合わせ、セマンティック モデルを Copilot で効率的に作成・整備し、データ エージェントや AI エージェントにおける活用につなげてみてください。
