MCP を活用し Power BI のメタデータを Snowflake Cortex Analyst のセマンティックモデルに連携する
はじめに
Snowflake Cortex Analyst のセマンティックモデル
Snowflake Cortex Analyst では処理の過程でセマンティックモデルが使用されます。セマンティックモデルはユーザーからの問い合わせとともに Cortex Analyst に送信され、SQL 生成のための質問内容の理解を補助します。
公式ドキュメントでも言及されていますが、セマンティックモデルにビジネスメタデータの情報を付与することで Cortex Analyst の精度向上が期待されます。例えば、対象テーブルの売上データがどのような計算で成り立っているかについての情報を記述するといったケースが考えられます。
ビジネスメタデータとセマンティックモデルの連携
ビジネスメタデータはセマンティックモデルの YAML ファイルに直接記述することももちろんできますが、別の場所(データカタログや BI ツール)で管理されている情報を抽出・転記したいというケースもあると思います。本記事では MCP サーバーを活用してビジネスメタデータをセマンティックモデルに連携する例をご紹介します。
使用するのは PBIXRay MCP Server という Power BI のメタデータ取得のための MCP サーバーです。
概要
Windows11 PC を MCP サーバー兼クライアントとして、以下を構成しました。Snowflake は AWS Tokyo リージョンを使用しましたが、Cortex Analyst が利用できる環境であればどこでも OK です。
利用ツール・サービス
- VSCode + GitHub Copilot Business
- WSL 2
- PBIXRay MCP Server
- snowsql
検証データ
Microsoft のサンプル DB である AdventureWorks データベースを使用します。PBIXRay MCP Server の GitHub リポジトリにはデモ用の pbix ファイルがありそれをそのまま使用するとともに、Snowflake 上にも同等のテーブル群を作成しておきます。
事前準備
全ての準備作業を書いていくと長くなるため、この後の検証に関連するものに絞ってご紹介します。以下は一般的な手順でできますので、割愛します。
- GitHub Copilot へのサインイン
- WSL 2 セットアップ
- snowsql インストール
MCP サーバーセットアップ
GitHub リポジトリの Readme 記載の内容に従いインストールを実施します。自分の環境では pip でのインストールが上手くいかなかったため、構築した venv 上にソースコードを直接配置しました。この場合は numpy 等のモジュールも明示的にインストールする必要があります。具体的なコマンドは以下の通りです。
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install mcp pbixray numpy
インストール後、VSCode の setting.json にサーバーの起動設定を記述します。args の引数で指定するファイルパスは WSL で認識できる形式(/mnt ~)とする必要があります。
"mcp": {
"inputs": [],
"servers": {
"pbixray": {
"command": "wsl.exe",
"args": [
"bash",
"-c",
"source /mnt/c/xxx/bin/activate && python3 /mnt/c/xxx/src/pbixray_server.py"
]
}
}
}
VSCode 上で起動をクリックしエラー無くサーバーが起動すれば OK です。
セマンティックモデル作成
Snowflake 上で事前に作成したテーブル群を対象に Snowsight の画面からセマンティックモデルを作成します。この後のメタデータ連携の際に GitHub Copilot でいかようにも書き換えられるので、この時点では YAML ファイルの大枠が出来上がっていれば問題ありません。
作成したセマンティックモデルは Snowflake のステージ上に YAML ファイルとして格納されているので、端末にダウンロードし GitHub Copilot で操作できるようにしておきます。
検証
ここからいよいよビジネスメタデータ連携を試してみます。
ビジネスメタデータ取得
まずは以下のようなプロンプトで pbix ファイルの概要を把握します。
テーブル一覧からファクトやディメンションの概要がわかります。
続いてメジャーに関する情報を問い合わせてみます。
Sales Amount の集計に用いられているキー情報がわかりました。
セマンティックモデルのファイル修正
先ほどのメジャーの情報を現在のセマンティックモデルが持っているかを問い合わせてみます。
メジャーで参照されるキー列があるようなので、そちらに情報を付記してみましょう。
提案に従い YAML ファイルを修正します。
Snowflake への反映
ローカルで修正した YAML ファイルを Snowflake のステージに再度アップロードします。ステージへのアップロードは PUT ステートメントにより行われますが本稿執筆時点で該当処理をサポートする MCP サーバーは見当たらなかったため、端末からの snowsql 実行を GitHub Copilot エージェントにやってもらいます。
Snowflake 環境を確認しステージ上の YAML ファイルが更新されていれば OK です。
まとめ
PBIXRay MCP Server を用いてビジネスメタデータをセマンティックモデルに連携する例をご紹介しました。今回は Snowflake Cortex Analyst の精度向上を目的としたものですが、MCP サーバーを活用してツール間でビジネスメタデータを連携させるというのは他のケースにも応用が効く取り組みのように思うので、アイディアや工夫次第で組織のデータガバナンス向上が図れるのではという期待があります。
Discussion