Power BI Schema for Copilot
Cho Copilot biết cấu trúc model Power BI của bạn, nhưng không đưa dữ liệu cho nó.
Extension này kết nối khung chat AI của VS Code (GitHub Copilot Chat ở chế độ Agent, hoặc bất kỳ chat nào hỗ trợ MCP) với các semantic model trên Power BI. AI đọc được cấu trúc model: tên bảng, tên cột, kiểu dữ liệu, measure và mô tả. Với chừng đó nó đã viết được DAX đúng tên cột, sinh code front-end bám sát model, hay lập tài liệu cho dataset.
Server không chạy được truy vấn. Không có tool nào trả về dòng dữ liệu, nên không một bản ghi khách hàng, dòng đơn hàng hay con số doanh thu nào rời khỏi Power BI qua đường này. Khi cần số liệu thật, bạn cầm đoạn DAX mà AI viết và tự chạy trong Power BI, nơi quyền truy cập của bạn vẫn được áp dụng đầy đủ.
Extension cộng đồng, không chính thức. Không liên kết với và không được Microsoft bảo trợ.
Vì sao chỉ cho đọc schema
Cách phổ biến là để AI chạy truy vấn rồi che thông tin cá nhân trong kết quả. Cách đó luôn có kẽ hở: che sót cột, tên người nằm trong ghi chú, hoặc AI tự viết truy vấn gom dữ liệu theo kiểu khó lường trước.
Không trả về dữ liệu thì không có gì để che. Ranh giới nằm ở chỗ dễ kiểm chứng: server không có tool chạy truy vấn, và đây là thứ đọc code là thấy ngay, không phụ thuộc vào việc bộ lọc có đủ thông minh hay không.
Đổi lại, AI không kiểm chứng được số liệu và không tự kiểm tra được câu DAX nó viết. Nếu công việc của bạn cần AI nhìn thấy dữ liệu thật, extension này không hợp.
Tính năng
🧱 Đọc cấu trúc semantic model
Danh sách app, dataset, bảng, cột (kèm kiểu dữ liệu và cờ khoá), measure (kèm mô tả và định dạng), cùng thông tin refresh gần đây.
✍️ Viết DAX đúng model
AI đọc tên bảng và tên cột có thật trước khi viết truy vấn, nên không bịa ra schema rồi đưa bạn câu DAX chạy là lỗi.
💻 Sinh code bám theo model
Làm dashboard, báo cáo nhúng hay API trên nền semantic model đều cần biết hình dạng model. AI đọc trực tiếp hình dạng đó rồi sinh code.
📚 Tự động lập tài liệu
"Liệt kê mọi measure trong dataset này và giải thích từng cái tính gì." AI duyệt schema và dựng thành từ điển dữ liệu.
🏠 Chạy hoàn toàn trên máy bạn
Không qua dịch vụ trung gian. Kết nối đi thẳng từ máy bạn tới Power BI REST API bằng chính tài khoản của bạn. Chỉ đọc, không tạo hay sửa được gì trong Power BI.
Yêu cầu
|
|
| VS Code |
Bản 1.101 trở lên |
| AI chat |
GitHub Copilot Chat (chế độ Agent) hoặc extension chat khác có hỗ trợ MCP |
| uv |
Cài uv. uv tự tải Python nếu máy chưa có. |
| Power BI |
Giấy phép Pro, Premium Per User hoặc Premium capacity |
| Azure app registration |
Miễn phí, mất khoảng 5 phút, không cần client secret. Xem hướng dẫn bên dưới. |
Bắt đầu sử dụng
1. Tạo Azure app registration (làm một lần, cả tổ chức dùng chung được)
Vào portal.azure.com → Microsoft Entra ID → App registrations → New registration. Đặt tên, ví dụ Power BI Schema, rồi bấm Register.
Authentication → Add a platform → Mobile and desktop applications → tích chọn
https://login.microsoftonline.com/common/oauth2/nativeclient.
Authentication → Advanced settings → đặt Allow public client flows thành Yes → Save.
API permissions → Add a permission → Power BI Service → Delegated permissions, thêm:
Dataset.Read.All
Workspace.Read.All
App.Read.All
Nếu tổ chức yêu cầu, nhờ admin bấm cấp quyền (grant consent).
Ở trang Overview, sao chép Application (client) ID và Directory (tenant) ID.
Admin Power BI cũng phải bật cài đặt tenant Dataset Execute Queries REST API (Admin portal → Tenant settings → Integration settings). Các hàm INFO.VIEW.* dùng để đọc schema đi qua endpoint này. Câu lệnh gửi lên là cố định, nằm trong mã nguồn, AI không sửa được.
2. Cấu hình extension
Mở Command Palette (Ctrl+Shift+P / Cmd+Shift+P), chạy Power BI Schema: Open Settings rồi điền Client ID và Tenant ID lấy ở bước 1.
Hoặc thêm trực tiếp vào settings.json:
{
"powerbiAnalyst.clientId": "00000000-0000-0000-0000-000000000000",
"powerbiAnalyst.tenantId": "11111111-1111-1111-1111-111111111111"
}
3. Bắt đầu chat
- Mở Copilot Chat và chuyển sang chế độ Agent.
- Bấm biểu tượng tools, kiểm tra Power BI Analyst đã được bật.
- Hỏi: "Đăng nhập Power BI và liệt kê các app của tôi."
- AI trả về một đường link và một mã dùng một lần. Mở link, nhập mã, đăng nhập bằng tài khoản công ty, rồi báo lại cho AI là đã xong.
Các phiên sau không phải đăng nhập lại. Lần khởi động đầu tiên hơi lâu vì uv cần cài thư viện cho server.
Câu hỏi mẫu
- "Tôi có quyền truy cập những app và dataset Power BI nào?"
- "Liệt kê các bảng trong dataset Sales và giải thích từng measure."
- "Viết DAX tính doanh thu theo thị trường và danh mục sản phẩm cho quý 1/2025."
- "Dựng từ điển dữ liệu dạng Markdown cho dataset này."
- "Sinh interface TypeScript cho các cột của bảng Orders."
- "Tôi muốn đếm khách hàng mua nhiều hơn 3 lần. Model này có sẵn measure nào dùng được không, hay phải viết mới?"
Cài đặt của extension
| Cài đặt |
Mặc định |
Mô tả |
powerbiAnalyst.clientId |
(trống) |
Bắt buộc. Application (client) ID của Azure app registration. |
powerbiAnalyst.tenantId |
organizations |
Directory (tenant) ID hoặc tên miền, ví dụ contoso.onmicrosoft.com. Nên đặt khi app là single-tenant (hầu hết các tổ chức). |
powerbiAnalyst.uvPath |
uv |
Đường dẫn đầy đủ tới uv nếu uv không có trong PATH. |
Extension tự nhận khi bạn đổi cài đặt; VS Code có thể hỏi bạn khởi động lại server.
| Tool |
Tác dụng |
authenticate |
Đăng nhập bằng mã thiết bị (device code). |
logout |
Xoá phiên đăng nhập đã lưu. |
list_apps |
Các app Power BI bạn truy cập được. Đây là điểm bắt đầu. |
list_datasets |
Các dataset (semantic model) trong workspace của một app. |
get_dataset_info |
Thông tin dataset và lịch sử refresh gần đây. |
list_tables |
Các bảng hiển thị trong dataset. |
list_columns |
Các cột, kèm kiểu dữ liệu và cờ khoá. |
list_measures |
Các measure, kèm bảng, mô tả và định dạng. |
Hết. Không có tool nào chạy truy vấn hay đọc file kết quả.
Những gì AI vẫn nhìn thấy
Metadata là thứ được trả về, nên AI thấy tên bảng, tên cột, tên measure, mô tả, kiểu dữ liệu và công thức đặt trong phần mô tả. Một cột tên Customer Email cho AI biết cột đó tồn tại, nhưng không cho nó biết địa chỉ nào nằm trong đó.
Nếu ngay cả tên cột hay mô tả cũng là thông tin nhạy cảm, hãy dùng Object-Level Security của Power BI để ẩn hẳn chúng với tài khoản dùng cho AI.
Dữ liệu & quyền riêng tư
| Dữ liệu |
Lưu ở đâu |
| Token đăng nhập |
~/.powerbi_mcp_token_cache.bin, mã hoá bằng Keychain (macOS), DPAPI (Windows) hoặc LibSecret (Linux) |
| Client ID, Tenant ID |
Settings của VS Code |
Server không ghi file kết quả, không ghi nhật ký truy vấn, và không ghi log token.
Xử lý sự cố
| Vấn đề |
Cách khắc phục |
| Báo "set your Azure app Client ID" |
Điền powerbiAnalyst.clientId. |
| Báo "uv was not found" |
Cài uv, khởi động lại VS Code, hoặc đặt powerbiAnalyst.uvPath là đường dẫn đầy đủ tới uv. |
| Không thấy tool Power BI trong Copilot Chat |
Chuyển sang chế độ Agent và bật tool trong danh sách tools. Với tài khoản GitHub Enterprise/Business, admin phải cho phép MCP servers in Copilot. |
Lỗi AADSTS50059 hoặc đăng nhập nhầm tổ chức |
Đặt powerbiAnalyst.tenantId là Directory (tenant) ID của bạn. |
Lỗi AADSTS7000218 / invalid_client |
Trong app registration, đặt Allow public client flows thành Yes. |
Lỗi AADSTS65001 / cần cấp quyền |
Admin phải grant consent cho các API permission. |
Lỗi 403 khi đọc schema |
Bạn cần quyền Build trên dataset. Kiểm tra AI đã dùng workspace ID lấy từ list_apps. |
| Đọc schema lỗi với tất cả mọi người |
Admin Power BI phải bật Dataset Execute Queries REST API. |
| Server không khởi động được |
Chạy MCP: List Servers → Power BI Analyst → Show Output để xem log. |
Giới hạn
- Không có dữ liệu. Muốn xem số liệu thì tự chạy DAX trong Power BI.
- Chỉ đọc. Không tạo hay sửa được nội dung Power BI.
list_tables, list_columns, list_measures dùng hàm DAX INFO.VIEW.*, yêu cầu model Import hoặc DirectQuery có bật quyền đọc XMLA.
Ghi công & giấy phép
Phát triển dựa trên powerbi-analyst-mcp của Martin Brummerstedt, sửa thành server chỉ đọc schema và tích hợp VS Code. Giấy phép MIT.