Phần 1
Cơ chế hoạt động
MCP (Model Context Protocol) là chuẩn kết nối do Anthropic tạo ra, cho phép Claude "cắm" vào công cụ ngoài. Microsoft phát hành MCP server chính thức cho Power BI: @microsoft/powerbi-modeling-mcp — kết nối vào semantic model của Power BI Desktop (qua cổng XMLA cục bộ) hoặc Fabric cloud.
Connect thật = MCP (cây cầu) + Node.js (nền chạy cầu) + Power BI Desktop đang mở file (đầu bên kia)
Cài MCP mới chỉ dựng xong cây cầu. Thiếu Node thì cầu không chạy. Quên mở Power BI thì cầu nối vào khoảng không — vẫn báo "Connected" nhưng không thấy model.
Phần 2
Cài đặt — 4 bước cho mỗi máy
⚡ Cách nhanh — chạy file setup.bat
Tải bộ cài về, giải nén → chuột phải setup.bat → Run. Script tự làm các bước 1–3 bên dưới (cài Node, Claude Code, dựng cầu MCP cho cả Claude Code lẫn Claude Desktop). Bạn chỉ còn bước 4 và phần đăng nhập.
Bộ cài nhúng sẵn trong trang này — bấm là tải, không cần mạng nội bộ. Chi tiết: xem Phần 3.
🔗 Nguồn chính thức — copy khi cần
Repo MCP server của Microsoft (tài liệu gốc, các cách cài khác, troubleshooting):
https://github.com/microsoft/powerbi-modeling-mcp.git
Lưu ý: không cần git clone repo này — package đã có sẵn trên npm, lệnh ở bước 3 tự tải về. Link chỉ để tham khảo tài liệu.
Hoặc cài thủ công — 4 bước
-
Cài Node.js 1 lần / máy
Tải tại nodejs.org (bản LTS). Lệnh npx cần Node để tải và chạy MCP server.
-
Cài Claude Code 1 lần / máy
Nơi gõ lệnh: npm install -g @anthropic-ai/claude-code. Sau đó gõ claude để đăng nhập tài khoản (mỗi người dùng tài khoản riêng).
-
Dựng cầu MCP 1 lần / máy
Một dòng lệnh duy nhất — dùng -s user để mọi thư mục đều có:
# Chi chay 1 lan tren moi may $ claude mcp add powerbi -s user -- npx -y @microsoft/powerbi-modeling-mcp@latest --start # Kiem tra: tim dong "powerbi ... ✔ Connected" $ claude mcp list
-
Mở Power BI Desktop + file .pbip Mỗi lần dùng
Bật định dạng .pbip (làm 1 lần): File → Options → Preview features → tick "Power BI Project (.pbip) save option" → khởi động lại → Save as → .pbip. Định dạng .pbip lưu model dưới dạng text (TMDL) nên Claude đọc/sửa và đưa vào Git được.
Mở file .pbip → hỏi Claude "liệt kê các bảng trong model đang mở". Thấy ra danh sách bảng = thông thật. "✔ Connected" đơn thuần chưa đủ.
Phần 3
Bộ cài 1-click — triển khai 60 máy
Thay vì làm tay 4 bước trên từng máy, đóng gói thành thư mục setup-powerbi-mcp/ gồm 3 file, gửi zip qua mạng nội bộ:
| File | Vai trò |
|---|---|
setup.bat | Nhân viên chuột phải → Run. Tự kiểm tra/cài Node.js (winget) → Claude Code (npm) → thêm MCP vào Claude Code (scope user) → ghép config Claude Desktop |
merge-desktop-config.ps1 | Ghép an toàn vào claude_desktop_config.json: giữ nguyên connector cũ, tự backup .bak |
DOC-TRUOC-KHI-CHAY.md | Hướng dẫn phát hành + checklist kiểm tra thành công |
3 việc không thể tự động (mỗi người tự làm 1 lần)
| Việc | Vì sao không tự động được |
|---|---|
Đăng nhập Claude (gõ claude, làm theo hướng dẫn) | Tài khoản cá nhân của từng người |
| Khởi động lại Claude Desktop (Quit hẳn ở khay hệ thống) | App chỉ đọc config lúc khởi động |
| Bật ".pbip save option" trong Power BI | Setting nằm trong Power BI của từng máy |
Phần 4
Hai đích cài — đừng nhầm lẫn
Có 2 "Claude" khác nhau trên cùng một máy, mỗi cái có kho connector riêng. Cài vào cái này sẽ không hiện ở cái kia:
| Claude Code (terminal) | Claude Desktop (app cửa sổ) | |
|---|---|---|
| Cách cài | claude mcp add powerbi -s user -- npx ... | Sửa file %APPDATA%\Claude\claude_desktop_config.json (hoặc nút Add trong Settings → Connectors) |
| Kiểm tra | claude mcp list | Settings → Connectors (sau khi khởi động lại app) |
| Scope | -s user = mọi thư mục; mặc định = chỉ thư mục hiện tại | Toàn app |
// Doan them vao claude_desktop_config.json > "mcpServers"
"powerbi": {
"command": "cmd",
"args": ["/c", "npx", "-y", "@microsoft/powerbi-modeling-mcp@latest", "--start"]
}Phần 5
Thư viện prompt mẫu
Gõ tiếng Việt tự nhiên. Các mẫu dưới đây đều đã chạy thật:
Khám phá model
Xây model & DAX
Bảo trì hàng loạt
Phần 6
Demo thực chiến: từ report trắng đến model hoàn chỉnh
Toàn bộ phần dưới đây được Claude làm qua MCP trong ~2 phút, bắt đầu từ một report hoàn toàn trống — không gõ tay một dòng DAX nào:
📈 Doanh thu theo tháng (YTD + MoM%)
| Tháng | Doanh thu | YTD | MoM % |
|---|---|---|---|
| Jan | 4.100 | 4.100 | — |
| Feb | 3.360 | 7.460 | −18,0% |
| Mar | 6.300 | 13.760 | +87,5% |
| Apr | 600 | 14.360 | −90,5% |
| May | 2.400 | 16.760 | +300% |
| Jun | 8.800 | 25.560 | +267% |
🏆 Xếp hạng sản phẩm (RANKX + % tổng)
| Sản phẩm | Doanh thu | Hạng | % Tổng |
|---|---|---|---|
| Laptop | 18.000 | 1 | 70,4% |
| Monitor | 3.900 | 2 | 15,3% |
| Keyboard | 2.560 | 3 | 10,0% |
| Mouse | 1.100 | 4 | 4,3% |
Kèm QoQ%: Q2 giảm −14,2% so với Q1 — measure DATEADD quarter.
9 measure đã tạo
| Measure | DAX chính | Folder |
|---|---|---|
| Total Sales | SUM(Sales[Amount]) | Key Metrics |
| Total Quantity | SUM(Sales[Quantity]) | Key Metrics |
| Order Count | COUNTROWS(Sales) | Key Metrics |
| Avg Order Value | DIVIDE([Total Sales], [Order Count]) | Key Metrics |
| % of Total Sales | DIVIDE([Total Sales], CALCULATE([Total Sales], ALL(Sales))) | Key Metrics |
| Sales YTD | TOTALYTD([Total Sales], 'Date'[Date]) | Time Intelligence |
| Sales MoM % | DATEADD('Date'[Date], -1, MONTH) | Time Intelligence |
| Sales QoQ % | DATEADD('Date'[Date], -1, QUARTER) | Time Intelligence |
| Product Rank | RANKX(ALL(Sales[Product]), [Total Sales]) | Ranking |
Phần 7
Ai làm gì — quy trình 7 khâu
🧠 Claude lo
Bộ não · Logic & Số liệu
- Dựng bảng, quan hệ, cột tính toán
- Viết & tối ưu DAX (YTD, YoY, QoQ, RANKX…)
- Dọn dẹp model, đặt tên, thư mục
- Sinh tài liệu, export TMDL
🎨 Bạn lo
Đôi mắt · Trình bày
- Nạp dữ liệu thật, đăng nhập nguồn
- Kéo thả biểu đồ lên canvas
- Màu sắc, bố cục, format
- Quyết định "đẹp / hợp sếp" chưa
| # | Khâu | Ai làm | Tiết kiệm |
|---|---|---|---|
| 1 | Kết nối / nạp dữ liệu (Get Data, mật khẩu) | 👤 Bạn | — |
| 2 | Làm sạch dữ liệu (Power Query) | 👤 Bạn · Claude hỗ trợ viết M | ⭐ |
| 3 | Dựng bảng, quan hệ, cột tính toán | 🤖 Claude | ⭐⭐⭐ |
| 4 | Viết DAX measure | 🤖 Claude | ⭐⭐⭐⭐⭐ |
| 5 | Dọn dẹp model (tên, folder, sort-by-column) | 🤖 Claude | ⭐⭐⭐⭐ |
| 6 | Vẽ biểu đồ (kéo thả canvas) | 👤 Bạn | — |
| 7 | Trang trí dashboard (màu, layout) | 👤 Bạn | — |
Phần 8
MCP làm được gì — 21 nhóm lệnh
Server của Microsoft cung cấp 21 nhóm operations. Bạn không cần nhớ — Claude tự chọn đúng nhóm khi bạn ra lệnh tiếng Việt. Liệt kê để biết "trần" khả năng:
Giới hạn — nói rõ để không kỳ vọng sai
Làm được
- Toàn bộ semantic model: bảng, cột, quan hệ, measure, RLS, calculation group
- Chạy & kiểm tra DAX, đo hiệu năng
- Thao tác hàng loạt có transaction (lỗi thì rollback)
- Power BI Desktop cục bộ + Fabric cloud
Không làm được
- Tạo/sửa visual, biểu đồ trên canvas
- Layout, màu sắc, format báo cáo
- Nhập mật khẩu nguồn dữ liệu hộ bạn
- (Visual nằm ngoài XMLA endpoint)
Phần 9
Sự cố thường gặp & cách xử lý
Tất cả đều là lỗi đã gặp thật trong phiên làm việc và đã xử lý xong:
| Triệu chứng | Nguyên nhân | Cách xử lý |
|---|---|---|
| "Connected" nhưng không thấy bảng nào | Power BI Desktop chưa mở file, hoặc file trống | Mở file .pbip có dữ liệu → thử lại "liệt kê các bảng" |
| Không thấy Power BI trong Connectors của Claude Desktop | Cài vào Claude Code ≠ Claude Desktop (2 kho riêng) | Thêm vào claude_desktop_config.json rồi khởi động lại app (Phần 4) |
| MCP chỉ chạy ở 1 thư mục | Scope mặc định là local (per-project) | Gỡ rồi thêm lại với -s user |
| Tháng trên biểu đồ xếp lộn xộn (Apr, Feb, Jan…) | Cột chữ sắp theo alphabet | Ra lệnh: "set cột Month sắp xếp theo MonthNo" — sửa 1 lần ở model, mọi biểu đồ đúng mãi |
| Tạo bảng DAX bị SemanticError với DATATABLE | DATATABLE không nhận hàm như DATE() — chỉ nhận hằng số |
Dùng UNION(ROW(...), ROW(...)) thay thế |
| "needs to be recalculated" khi chạy query | Vừa tạo bảng/quan hệ nhưng chưa refresh | Ra lệnh refresh model (Full sau khi tạo bảng, Calculate sau khi tạo quan hệ) |
| Lỗi thiếu tham số khi tạo measure | Sai tên thuộc tính | Claude tự tra Help của tool rồi sửa — người dùng không cần làm gì |
Claude không bao giờ nhập mật khẩu/API key hộ — mỗi người tự đăng nhập (device-code với Fabric). Không dán token vào prompt. Kiểm tra file config trước khi chia sẻ máy — key có thể nằm dạng chữ thô trong đó.
Phần 10
Checklist mở lớp training
-
Chuẩn bị trước buổi học
Gửi bộ cài 1-click (Phần 3) trước 1 ngày để mọi người tự cài. File Power BI demo lưu sẵn dạng .pbip. Kiểm tra máy chiếu hiển thị được cả terminal lẫn Power BI.
-
Mở đầu: khái niệm (10 phút)
Dùng sơ đồ cây cầu (Phần 1) + bảng "Ai làm gì" (Phần 7). Chốt bằng câu thông điệp vàng.
-
Demo live: từ 0 đến model (15 phút)
Mở report trắng → gõ lệnh tạo bảng Date + measure YTD → cho lớp thấy Data pane "mọc" ra kết quả. Đây là khoảnh khắc "wow" — đừng bỏ qua.
-
Học viên thực hành (20 phút)
Mỗi người chạy bài test "liệt kê các bảng" trên máy mình → tự tạo 1 measure bằng tiếng Việt → kéo lên canvas thành biểu đồ.
-
Xử lý tình huống + Q&A (15 phút)
Mở bảng sự cố (Phần 9) — demo cố tình để lỗi "quên mở Power BI" cho lớp thấy triệu chứng và cách nhận biết.
-
Giao bài về nhà
Mỗi người mang 1 file báo cáo thật của phòng mình, dùng Claude thêm 3 measure time-intelligence và gửi lại screenshot.