4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Financial Sample タイムアタック を Power BI モデリング MCP を使ってやってみた🫣

Last updated at Posted at 2025-12-21

Financial Sample タイムアタックとは

@yugoes1021 さんが Power BI Weekly News の中で提案し、その後 Power BI LT会 で発表の場が設けられるようになった、Financial Sample サンプルデータを決められた形にまで整形する時間を競うタイムアタック競技です。

競技について、実際に見たい方は、ぜひ Power BI LT会にご参加ください。
競技ルールについては、👇️の動画で @yugoes1021 さんが話してくれています。

Financial Sample タイムアタック解説回 Power BI Weekly News 175
https://www.youtube.com/live/-PTkSf3fKys?si=aInx3A2NK9nvSGfH&t=2828

Power BI Modeling MCP Server

Power BI にも AI 関連のアップデートはたくさんきており、ついに2026年11月には Power BI Modeling MCP Server が登場し、自然言語でモデリングに関するタスクを指示することができるようになりました。

Power BI Modeling MCP Server の具体的な動かし方は以下にまとまっています
https://github.com/microsoft/powerbi-modeling-mcp

image.png

さっそく動かしてみた

Power BI Weekly News 内でもさっそく動かしてみて、雰囲気を感じてもらうことができました。

様子は以下の Power BI Weekly News 197 を御覧ください。

Power BI Modeling MCP Server の実演回 Power BI Weekly News 197
https://www.youtube.com/live/Sum1NqrDW0s?si=vMkKrwK9cNZl665J&t=1805

この中でも話していますが、「このデータをスタースキーマにして」とか「リレーションシップを作成して」くらいではなかなかおもったような形になりません。

2025年末時点ではより正確に、より丁寧なプロンプトを作成し、指示をしてあげないといけないことがわかります。

Financial Sample タイムアタック を Power BI Modeling MCP Server にやってもらおう😇

ようやく本題です。

Power BI LT会 で何人もの人が挑んでいる、Financial Sample タイムアタックを Power BI Modeling MCP Server にやってもらおうと思います。

前述した通り、 Power BI Modeling MCP Server は Financial Sample を読み込んで、「スタースキーマにして」くらいのプロンプトでは、ディメンションテーブルの選定を含めて、思った通りのモデルにしてくれません。

より細かくプロンプトを通じてタスクを MCP Server に伝える必要があります。

用意したプロンプト

数十回に及び試行の末、たどりついたプロンプトは以下。

FinancialSampleTimeAttackUsingPowerBIModelingMCP.txt
**役割:**
あなたは Power BI のデータモデリングにおける高度な専門知識を持つ認定プロフェッショナル(旧 MCP、現 Microsoft Certified: Power BI Data Analyst Associate / PL-300 保持者相当)です。

**目的:**
標準的な「Financial Sample」Excel データを、M式 を使用して効率的かつ正確に「スタースキーマ」に変換し、レポート作成に最適なデータモデルを構築してください。以下の手順(型)を厳守し、ステップバイステップで実行してください。M式でできるものはM式で。DAXでしかできないものにだけ、DAXを利用してください。

---

#### 手順 1: ファクトテーブル(Financials)の事前クレンジング

1.  **不要な列の削除:** 分析に不要な列(例:`Month Number`, `Month Name`, `Year` などの日付テーブルで代替可能な列、および分析対象外の数値列)を削除してください。
2.  **不要な行の除外:** シナリオに基づき、データを除外します。具体的には `Product` 列が "Montana" の行(販売終了商品とする)をフィルタリングして削除してください。
3.  **値の置換:** 視認性を高めるため、`Country` 列の "United States of America" を「USA」に置換してください。この際、右クリックメニューの「値の置換」機能を使用してください。
4.  **型の調整:** 必要に応じて、通貨列(Sales, Profit等)を整数型等の適切な型に変換・確定させてください。

#### 手順 2: ディメンションテーブルの作成(4回繰り返し)

以下の4つの項目について、それぞれ独立したディメンションテーブルを作成してください。
**対象:** `Segment`, `Country`, `Product`, `Discount Band`

**各テーブル作成の共通アクション:**

1.  **クエリの複製:** 元の `Financials` クエリを「複製」し、対象の名前(例:`Segment`)に変更してください。
2.  **列の絞り込み:** 対象の列(例:`Segment`列)を選択し、「他の列の削除」を実行してください。
3.  **一意化:** 残った列に対し「重複の削除」を行い、ユニークなリストにしてください。
4.  **キーの作成:** 「列の追加」タブから「インデックス列(1から)」を追加してください。
5.  **キー名の変更:** 追加されたインデックス列の名前を `[対象名]Key`(例:`SegmentKey`)に変更し、列を先頭に移動させてください。

#### 手順 3: ファクトテーブルへの統合と仕上げ

1.  **クエリのマージ:** `Financials` クエリに戻り、作成した4つのディメンションテーブルをそれぞれの名称列で結合してください。
2.  **キーの展開:** マージされた各テーブル列を展開し、**`Key` 列のみ**を選択してください(元の列名のプレフィックスは使用しない)。
3.  **列の整理:** 展開したすべての `Key` 列をテーブルの**先頭に移動**させてください。
4.  **冗長列の削除:** 用済みとなった元のテキスト列(`Segment`, `Country`, `Product`, `Discount Band`)をすべて削除してください。

#### 手順 4: Date テーブルの作成

1.  **日付テーブルの作成:** `Financials` テーブル内の日付に対応したDateテーブルを作成してください。(7列: Date, Year, Quarter, Month Number, Month Name, Day, Day Name)
2. 日付テーブルとしてマークしてください。

#### 手順 5: リレーションシップ

1.具体的な接続詳細(テーブルと列のペア)
各リレーションシップは、作成した「Key列」同士で接続します。
① Financials ⇔ Segment
• ファクト側(多): Financials テーブルの [SegmentKey] 列
• ディメンション側(1): Segment テーブルの [SegmentKey] 列
• 解説: Segment クエリで作成したインデックス列 SegmentKeyと、Financials にマージ・展開して持ってきた SegmentKeyをつなぎます。
② Financials ⇔ Country
• ファクト側(多): Financials テーブルの [CountryKey] 列
• ディメンション側(1): Country テーブルの [CountryKey] 列
• 解説: Country クエリの作成手順(重複削除→インデックス追加→列名変更)で生成されたキーを使用します。
③ Financials ⇔ Product
• ファクト側(多): Financials テーブルの [ProductKey] 列
• ディメンション側(1): Product テーブルの [ProductKey] 列
• 解説: Product クエリの作成手順と同様に生成されたキーを使用します。
④ Financials ⇔ Discount Band
• ファクト側(多): Financials テーブルの [Discount BandKey] 列(または [DiscountBandKey])
• ディメンション側(1): Discount Band テーブルの [Discount BandKey] 列
• 解説: Discount Band クエリでも同様にインデックス列を追加し、名前を変更しています。
⑤④ Financials ⇔ Date

2.  **キーの非表示:** レポート作成時の誤操作(ノイズ)を防ぐため、リレーションシップに使用しているすべての `Key` 列を「非表示」に設定してください。

うまくいかなかった!

長い詳細なプロンプトを書いても、まだまだ失敗が起こります。
うまくいく場合もあるのですが、現時点では失敗のほうが多いです。
モデルの選び方や、プロンプトの書き方など、まだまだ試行錯誤が必要ですね。

(今のところは自分でスタースキーマをつくる練習をしたほうが早い)

成功時の動画をとって載せようと思いましたが、撮影しようとしたときに限って全然うまくいかないのであきらめました…🙇‍♂️いや、このプロンプトでも安定していたんですよ!

無題のビデオ.gif

実際に動いているところを見たい方🫣

実際に動いているところを見たい方は、2025年最後の Power BI LT 会(12月26日)へお越しください。
プロンプトさらに研ぎ澄まして、タイムアタックに挑戦してみたいと思います。時の運が絡んでくるため、自分がやるよりも緊張してます。

Power BI LT 会 に参加しよう!🎉

LT会は初学者でも簡単に飛び込んでもらえるように用意されている場所です。ぜひ、Power BI をさわり始めたばかりのそこのあなた!やってみてできたこと、できなかったこと、共有してください。

きっと、いいアドバイス、いい知見、いい友人を見つけられるはずです。

それでは、またお会いしましょう!

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?