Trang chủ / Thiết kế
Thiết kế hệ thốngBên trong
Agent Data Studio.
Một MCP server nhỏ có chính sách ở tầng server, bộ skill là nguồn sự thật duy nhất, dữ liệu và tri thức nằm ở trạm ngoài Git, mọi khâu có cổng kiểm chạy được. Trang này dành cho BI developer, IT bảo mật và người muốn tuỳ biến hoặc đóng góp.
Các khối và đường nối
Host gọi MCP server qua stdio. Server nói chuyện với ba đích Power BI, ghi hồ sơ vào trạm dữ liệu, và áp chính sách cho mọi truy vấn DAX đi qua nó.
Bản chữ của sơ đồ (màn hẹp có thể cuộn ngang sơ đồ):
| Khối | Vai trò | Nằm ở đâu / giao thức |
|---|---|---|
| Host | Ứng dụng AI chạy agent; gọi MCP server, đọc skill qua adapter | Claude Code · Codex · Antigravity · Claude Desktop (chỉ MCP) |
| MCP server | 16 công cụ; chính sách cho mọi truy vấn DAX | mcp_server_powerbi.py (shim) → powerbi_agent/, transport stdio |
| Power BI Desktop | Truy vấn và ghi model đang mở (engine live) | ADOMD.NET / AMO-TOM → localhost:<port>, tự dò tiến trình msmdsrv |
| Power BI Service | Truy vấn dataset đã publish — chưa nghiệm thu | REST executeQueries, xác thực MSAL |
| File .pbip | Model dạng TMDL, report dạng PBIR; chỉ ghi trang khi file đóng | Thư mục báo cáo của người dùng |
| skills/ · commands/ · agents/ | Sổ tay, lệnh, agent chuyên trách — nguồn duy nhất | Repo; adapter .claude/skills/, .agents/skills/ |
| Trạm dữ liệu | Hồ sơ dự án, tri thức, audit, PII blocklist | workspace/ hoặc ADS_DATA, ngoài Git |
| powerbi-modeling-mcp | Modeling hàng loạt (tuỳ chọn); không đi qua policy của studio | Cài riêng, host gọi trực tiếp |
Kiến trúc 4 tầng
Mỗi tầng một trách nhiệm. Tầng 1 đi làn riêng, nét đứt, vì studio cố ý không xây: đã có Microsoft làm tốt.
-
T4Workflow & Knowledge
9 skill, template kit, chưng cất model/trang/dự án, 4 artifact bàn giao mỗi dự án.
skills/ · commands/ · agents/ · workflows/ -
T3PolicyCổng kiểm
Aggregate-only, PII blocklist, audit log, trần dòng cho kết quả có dimension. Áp cho công cụ DAX của repo (chi tiết).
powerbi_agent/policy.py -
T2MCP tools của repo (16)
Truy vấn, khám phá schema, ghi model qua TOM, engine template PBIR, chưng cất, tri thức.
powerbi_agent/tools_*.py
T1Delegate cho Microsoft
microsoft/powerbi-modeling-mcp: modeling hàng loạt, transaction, TMDL, kiểm DAX. Chạy song song, phân vai qua skill; tên tool không trùng.
Tuỳ chọn, cài riêng, host gọi trực tiếp: truy vấn qua server này không đi qua policy T3.
16 công cụ, 6 nhóm
Đếm từ @mcp.tool() trong powerbi_agent/tools_*.py tại bản 0.7.1.
| Nhóm | Công cụ | Module |
|---|---|---|
| Khám phá | list_local_reports · list_tables · describe_table | tools_query.py |
| Truy vấn | execute_dax_local · execute_dax_service | tools_query.py + policy.py |
| Sửa model | add_measure_local · add_relationship_local | tools_tom.py (TOM, model live) |
| Kit trang | list_templates · apply_template · distill_template | tools_template.py, pbir.py |
| Chưng cất | distill_model_schema · distill_report_design | tools_distill.py, tools_design.py |
| Tri thức | knowledge_status · setup_knowledge · init_project · log_timeline | tools_knowledge.py, knowledge.py |
- Runtime: Python 3.11–3.14,
pythonnet3.1.0, transport stdio. - ADOMD.NET / AMO-TOM: bộ cài,
doctor.ps1và engine dò theo cùng một danh sách (SSMS 18–22, bản standalone, GAC); đặtADOMD_LIB_DIRthì chỉ dùng đường đó. - Entry:
mcp_server_powerbi.pylà shim giữ bề mặt import cũ, để cấu hình host đã đăng ký không phải đổi khi package bên trong tái cấu trúc.
Chính sách ở tầng server
Mọi câu DAX gửi qua execute_dax_local / execute_dax_service đi qua bốn chặng trên server. Chặng nào chặn thì câu dừng ở đó, và lối ra nào cũng được ghi vào sổ audit. Nguồn: powerbi_agent/policy.py, tools_query.py.
- 1
Chặn dump bảng thô
Aggregate-only
Mặc định bật (tắt:
POWERBI_AGGREGATE_ONLY=0). Nhận raEVALUATE 'Bảng',EVALUATE Bảng,EVALUATE ALL(…)/ALLNOBLANKROW(…).Chặn: trả gợi ý viết lại bằng SUMMARIZECOLUMNS, GROUPBY, TOPN hoặc measure.
- 2
Khoá cột nhạy cảm
PII blocklist
policy.jsonở trạm (hoặcPOWERBI_POLICY_FILE, bắt buộc ngoài repo); mẫupolicy.example.json. Bảo thủ: tên cột xuất hiện bất kỳ đâu trong DAX là chặn.Chặn: cột nằm trong blocklist. File hỏng thì chặn luôn.
- 3
Chỉ khi qua hai cổng
Engine chạy
Desktop qua ADOMD.NET, Service qua REST. Dữ liệu được tính trong engine Power BI; chỉ kết quả trả về.
Ghi sổ: số dòng engine trả về
- 4
Trước khi về AI
Row cap
Kết quả có cột dạng chữ (dimension) bị siết còn 200 dòng (
POWERBI_DIMENSION_ROW_CAP); kết quả thuần số giữ trần chungPOWERBI_MAX_ROWS(mặc định 1000).Ra khỏi server: bảng tổng hợp đã cắt theo trần
Audit JSONL: lối ra nào cũng ghi một dòng, kể cả khi bị chặn. File audit/YYYY-MM.jsonl ở gốc thư mục dự án (đổi qua POWERBI_AUDIT_DIR).
Mỗi dòng: ts · tool · verdict · rows · query_sha256 — lưu băm, không lưu nguyên câu DAX. Lỗi ghi audit không làm hỏng truy vấn.
Giá trị verdict:allowedblocked_raw_dumpblocked_piiblocked_policy_errorinvalid_targeterror
9 skill: nguồn sự thật duy nhất ở skills/
Adapter của từng host chỉ trỏ về đây; không chép, không cache. Sắp theo chain_position trong frontmatter.
| Vị trí | Skill | Nhóm | Loại | Vai |
|---|---|---|---|---|
| 0 | pbi-knowledge | powerbi | K | Lối vào và lối ra: mở dự án, tra kinh nghiệm, quét, kit, đóng dự án, đóng gói tri thức |
| 1 | data-discovery | data | G¹ | Khảo sát, hỏi ngược, PROJECT.md, mindmap, từ điển dữ liệu, kế hoạch Excel |
| 1′ | data-mockup | data | K | Nhánh khi chưa có dữ liệu: spec → generator seed cố định → kiểm định → Excel |
| 2 | pbi-model | powerbi | G | Power Query/M, star schema, TMDL/DAX, ghi measure an toàn |
| 3 | pbi-analysis | powerbi | K | Truy vấn an toàn, chọn tầng công cụ, luật aggregate/PII/audit |
| 4 | pbi-design | powerbi | G | Clone trang đã duyệt hoặc archetype → Design Brief |
| 5 | pbi-build | powerbi | G | Dựng trang, vòng Edit → Validate → Reload → Screenshot → Review |
| 6 | pbi-review | powerbi | K | Review độc lập SQL, DAX, model, trang |
| 7 | pbi-publish | powerbi | M | Đưa lên Fabric / Service khi được yêu cầu — unverified |
Loại: K chỉ nội dung studio · G gộp studio + Microsoft · M chỉ Microsoft. ¹ data-discovery là G theo kế hoạch, hiện mới có phần studio. Khuôn skill: SKILL.md ≤ 150 dòng, frontmatter tiếng Anh kiểu router Use when / Not, thân tiếng Việt; reference Microsoft skills-for-fabric v0.3.16 chép nguyên văn và khoá bằng SOURCE.lock.json; lint tự động ở tests/test_skills_lint.py.
Chuỗi data-to-report và 8 cổng kiểm
-
Mở & khảo sátbước 0–1′
- 0
pbi-knowledge
Mở dự án, tra kinh nghiệm.
Cổng: project-opened
- 1
data-discovery
Khảo sát và lập kế hoạch.
Cổng: discovery-approved
- 1′
data-mockup
Nhánh khi thiếu dữ liệu: tạo dữ liệu mẫu.
- 0
-
Mô hình & con sốbước 2–3
- 2
pbi-model
Kết nối và dựng model khi cần Power BI.
Cổng: model-verified
- 3
pbi-analysis
Soát số và chính sách truy vấn.
Cổng: numbers-checked
- 2
-
Báo cáobước 4–6
- 4
pbi-design
Thiết kế trang, viết Design Brief.
Cổng: brief-approved
- 5
pbi-build
Dựng và xem ảnh render.
Cổng: page-validated
- 6
pbi-review
Review độc lập.
Cổng: review-clean
- 4
-
Phát hành & đóngbước 7–8
- 7
pbi-publish
Nhánh chỉ khi được yêu cầu: đưa lên Fabric / Service.
- 8
pbi-knowledge
Đóng dự án, lưu bài học tái dùng.
Cổng: project-closed
- 7
Bằng chứng: mỗi cổng ghi vào projects/<slug>/artifacts/VERIFICATION trong trạm. Chi tiết: workflows/data-to-report.md.
Không khớp thì quay lại: số sai về định nghĩa chỉ số hoặc model; visual trống về bước dựng; thiết kế không đạt thì sửa Brief rồi kiểm lại.
Chỉ có CSV: bước 0–1 khảo sát được ngay, chưa cần Power BI Desktop hay MCP.
8 lệnh và 2 agent
Lệnh là file Markdown trong commands/ có description ở frontmatter. Host hỗ trợ thì gọi /pbi-*; không thì bảo agent đọc file đó.
| Lệnh | Việc | Công cụ MCP được nhắc trong file lệnh |
|---|---|---|
/pbi-help | Chọn quy trình theo nhu cầu và công cụ hiện có | knowledge_status, list_templates |
/pbi-setup | Thiết lập nơi lưu tri thức trong trạm | knowledge_status, setup_knowledge |
/pbi-new | Mở dự án, chọn bước theo nguồn hiện có | knowledge_status, init_project |
/pbi-scan | Quét thiết kế báo cáo PBIP vào trạm | distill_report_design, distill_model_schema |
/pbi-kit | Chưng cất một file .pbip thành bộ kit nhiều trang | distill_report_design, distill_template, apply_template, log_timeline |
/pbi-done | Đóng dự án: checklist bàn giao, chưng cất, timeline | distill_report_design, distill_model_schema, log_timeline |
/pbi-pack | Đúc kết bài học vào tri thức của trạm (qua curator) | knowledge_status |
/pbi-recall | Tra dự án, bài học, mẫu trong trạm | knowledge_status |
pbi-knowledge-curator
Thủ thư tri thức: đọc dự án vừa xong, rút bài học tái dùng, đóng gói vào 4 trục (tech-stack, industry, business-domain, powerbi), dedup, cập nhật INDEX và TIMELINE. Không làm việc trực tiếp với Power BI.
pbi-render-reviewer
Reviewer độc lập đọc ảnh chụp trang vừa dựng và chấm theo chuẩn trang. Chỉ đọc và báo phát hiện; không sửa PBIR, không chạy truy vấn.
Manifest plugin (plugin.json) chỉ khai skills; commands/ và agents/ được host tự phát hiện theo quy ước thư mục.
Bốn host, một checkout
CLAUDE.md và GEMINI.md chỉ là con trỏ về AGENTS.md: một bản luật cho mọi agent.
| Host | -Hosts | File hướng dẫn | Adapter skill | Cấu hình MCP của người dùng |
|---|---|---|---|---|
| Codex (CLI, desktop) | codex | AGENTS.md | .agents/skills/ | ~/.codex/config.toml |
| Claude Code | claude | CLAUDE.md → AGENTS.md | .claude/skills/ | ~/.claude.json |
| Claude Desktop | claude-desktop | — | — (chỉ MCP) | %APPDATA%\Claude\claude_desktop_config.json |
| Antigravity | antigravity | GEMINI.md → AGENTS.md | .agents/skills/ | ~/.gemini/antigravity/mcp_config.json |
- MCP đăng ký ở cấu hình người dùng → mọi thư mục mở trong host đều thấy server; skill thì chỉ có khi mở thư mục repo. Mỗi máy một checkout.
- Installer gộp, không ghi đè: sao lưu
.baktrước khi ghi, chỉ thêm mụcpowerbi-mcp-bridge, giữ server khác; mục đang trỏ checkout khác thì báo lỗi và giữ nguyên. - Luật ghi cấu hình nhiều chủ (
AGENTS.md§7): theo đúng cấu trúc của host; thay block thì xoá cả sub-table; validate parse ngay sau khi ghi, hỏng thì báo khôi phục.bak.
Trạm dữ liệu: workspace/ hay ADS_DATA
Engine, skill, script chạy từ repo; mọi thứ riêng của người dùng nằm ở trạm. Nguồn: powerbi_agent/knowledge.py, _env.py.
workspace/ # trạm basic trong checkout, Git bỏ qua toàn bộ
# hoặc <ADS_DATA>/ # trạm ngoài repo; liên kết lưu ở .ads-binding.json (cục bộ)
├─ config.env # con trỏ POWERBI_PROJECT_DIR, không chứa secret
├─ INDEX.md · TIMELINE.md · projects.json
├─ projects/<slug>/
│ ├─ PROJECT.md · DATA_DICTIONARY.md …
│ ├─ design/ # hồ sơ thiết kế đã quét
│ └─ artifacts/ # PLAN · CHANGESET · VERIFICATION · HANDOFF
├─ knowledge/{tech-stack,industry,business-domain,powerbi}/
├─ audit/YYYY-MM.jsonl # sổ truy vấn
├─ outputs/ · state/ # kết quả · update-journal
├─ templates/ # kit chưa sanitize (POWERBI_TEMPLATES_DIR)
└─ policy.json # PII blocklistRepo công khai
Code, skill, lệnh, agent, kit đã sanitize. Đường duy nhất để thứ gì đó từ trạm ra đây: người dùng ra lệnh + sanitize=True + review; tests/test_no_leak.py canh.
Trạm dữ liệu
Guard trong knowledge.py từ chối ghi ra ngoài trạm, từ chối workspace là junction/symlink thoát ra ngoài, từ chối con trỏ trỏ thẳng vào repo.
Cấu hình host
Chỉ giữ mục MCP và đường source cần để chạy. Không credential; secret cho Service chỉ nạp khi cần từ kho do người dùng chỉ định.
Dự án → tri thức → dòng thời gian
Agent học dần theo từng dự án; người khác clone repo không nhận tri thức của bạn.
- 1
/pbi-new
Mở và quản lý dự án
init_projectdựngprojects/<slug>/vớidesign/,artifacts/; đọcINDEX.md,TIMELINE.mdvà tri thức liên quan trước khi khảo sát. - 2
/pbi-scan
Quét trọn thiết kế
distill_report_designquét mọi trang, theme, danh mục visual của một báo cáo vàoprojects/<slug>/design/. - 3
/pbi-done
Đóng dự án, ghi timeline
Cuối dự án đủ 4 artifact bàn giao. Timeline append-only, ghi bằng
| ngày | dự án | việc | bài học/kit | link |log_timeline: - 4
/pbi-pack
Đóng gói tri thức 4 trục
Curator dedup, mỗi bài học có Why + How to apply, phân vào tech-stack · industry · business-domain · powerbi.
Dự án sau bắt đầu từ đây: data-discovery đọc knowledge/ cùng domain trước khi hỏi người dùng, nên agent “có kinh nghiệm” thật chứ không bắt đầu từ số 0.
Ba thứ được chưng cất
Model: distill_model_schema → blueprint + Mermaid ERD.
Trang đẹp: distill_template → kit.
Dự án: curator → bài học.
Template kit & vòng dựng báo cáo
PBIP-first: Save As .pbip ngay đầu dự án để model thành TMDL và report thành PBIR — file chữ, có lịch sử, agent sửa an toàn.
Từ Design Brief tới nghiệm thu
- 1
Định hướng
Viết brief
Người xem, quyết định cần hỗ trợ, chỉ số, mức chi tiết (skill
pbi-design).Cổng: người dùng duyệt Brief
- 2
Dựng trang
Chọn bố cục, dựng theo vòng lặp
Clone từ trang đã duyệt hoặc kit; không có mẫu thì đề xuất archetype để duyệt. Chi tiết vòng dựng ở khung dưới.
- 3
Nghiệm thu
Kiểm trong Power BI
Người dùng xem bằng mắt trong Desktop: số liệu, nhãn, màu, trạng thái lọc, khả năng đọc trên màn hình thật.
Cổng cuối: người dùng nói “đạt”
Bên trong chặng 2: vòng dựngnăm bước, mỗi bước một cổng; thiếu ảnh thì chưa nghiệm thu trang
- 1
Edit
apply_templateclone-and-rebind từ kit, chỉ khi file .pbip đóng.Cổng: mọi field được gắn lại
- 2
Validate
powerbi-report-author validate <Tên>.ReportCổng: 0 lỗi
- 3
Reload
powerbi-desktop reload --pid <pid>Cổng: reload không lỗi
- 4
Screenshot
Chụp trang bằng CLI của Microsoft.
Cổng: có ảnh
- 5
Review
Tự review hoặc agent
pbi-render-reviewer.Cổng: không còn lỗi hiển thị
Còn lỗi thì quay lại Edit. Sạch cả năm cổng mới sang chặng 3: người dùng nghiệm thu bằng mắt.
- Kit =
kit.json+blueprint.md+blocks/*.json+_page.json. Kit đi kèm repo:kpim-business-light— 12 block, đã sanitize (mọi tên bảng, cột, nhãn là placeholderTEMPLATE_*), cóPROVENANCE.md. Kit thật của dự án để ngoài repo, trongtemplates/của trạm. - Luật: không tự dựng layout từ đầu; bookmark làm tay; ghi model lúc nào cũng được (engine live), ghi report chỉ khi
.pbipđóng — mở và Ctrl+S phiên cũ sẽ đè mất trang agent vừa tạo. - Thư viện mẫu công khai trên website chỉ thêm kit sau khi kiểm quyền sử dụng, dữ liệu và bản xem trước (
scripts/build_template_gallery.pycó cổng duyệt bằng hash); hiện chưa công bố kit nào.
Nhiều agent cùng một dự án
Claude Code, Codex và Antigravity có thể làm song song trên cùng một dự án Power BI. Luật số 1 là single-writer.
Single-writer
Model: tại một thời điểm chỉ một agent ghi, ghi xong mới bàn giao. Report: một agent sở hữu trọn *.Report/ trong một lượt, và chỉ khi file đóng. Công cụ đọc không cần khoá.
<dự án>/.powerbi-write-lock = <agent> | <việc> | <timestamp>
Kênh chung
Artifact PLAN → CHANGESET → VERIFICATION → HANDOFF trong thư mục dự án là nguồn sự thật; audit log là sổ cái chung; blueprint từ distill_model_schema là bản đồ model chung.
| Vai | Agent gợi ý | Làm gì |
|---|---|---|
| Builder | Claude Code | Chạy data-discovery + pbi-build, ghi model và report, giữ lock |
| Reviewer | Codex | Chỉ đọc: đối chiếu số bằng execute_dax_local, soi ERD, review DAX và page_spec trước khi Builder ghi |
| Analyst / Documenter | Antigravity | Tài liệu nghiệp vụ, mindmap, kế hoạch, soạn page_spec, viết artifact bàn giao |
Agent nào nhận bàn giao cũng đi ba bước
- 1
Nhận bàn giao
Đọc
AGENTS.mdvà artifact mới nhất trong thư mục dự án.Nguồn sự thật: artifact, không phải trí nhớ phiên chat.
- 2
Kiểm trạng thái
list_local_reportsxác nhận Desktop; kiểm.powerbi-write-lock.Có lock của agent khác: chỉ đọc, không ghi, không xoá lock đó.
- 3
Làm đúng vai
Cập nhật artifact; xoá lock nếu chính mình tạo.
Bàn giao: ghi rõ trạng thái vào artifact cho agent sau.
Cài đặt, kiểm tra, cập nhật, gỡ
Mọi script chạy bằng -ExecutionPolicy Bypass cho riêng tiến trình đó; không đổi chính sách của máy.
-
Trước khi càingay sau clone
- 1
Kiểm máy
doctor.ps1 -Preflight7 dòng
prereq(PowerShell, ExecutionPolicy, Git, Python, ADOMD.NET, Node, az), chưa cần.venv.Cổng: có
FAILthì thoát mã 1
- 1
-
Càimột hay nhiều host
- 2
Cài và đăng ký host
install.ps1 -Hosts codex,claude,…Tạo
.venvvàworkspace/, gộp mục MCP vào cấu hình người dùng của từng host, kiểm adapter. Không truyền-Hoststhì chọncodex.
- 2
-
Kiểmmỗi lần một host
- 3
Kiểm bản cài
doctor.ps1 -Hosts <host>Kiểm bản cài cho từng host (mỗi lần một host).
- 4
Thử Power BI Desktop
doctor.ps1 -ProbeDesktopThử
EVALUATE ROW("x",1)với báo cáo đang mở; Desktop đóng thì báoNOT_CHECKED, không phải lỗi.
- 3
-
Bảo trìkhi cần
- 5
Cập nhật có duyệt
update.ps1Xem trước bản mới;
-Apply -ExpectedCommit <SHA>chỉ áp đúng commit đã duyệt. Hậu kiểm hỏng thìgit reset --keep; journal ởstate/của trạm.Từ chối khi
requirements.txthay file ignore đổi, hoặc checkout bẩn. - 6
Gỡ phần của checkout này
uninstall.ps1 -Hosts <host>Chỉ gỡ mục trỏ tới checkout đang chạy lệnh, sao lưu trước khi xoá, không đụng
workspace/hay trạm ngoài.
- 5
Chất lượng: pytest + ruff trên CI windows-latest. Test đáng chú ý: test_no_leak (ranh giới source/dữ liệu), test_install_docs (prompt cài đồng bộ giữa INSTALL.md, README, START-HERE và website), test_version_sync (version khớp mọi manifest), test_installer* (installer chạy hai lần liên tiếp phải idempotent), test_site_nav (menu website thống nhất).
Giới hạn kỹ thuật & việc còn lại
Biết trước khi dùng
- Windows-only cho Desktop — Power BI Desktop chỉ có trên Windows.
- Agent không thấy render — nghiệm thu mắt là cổng bắt buộc của người dùng.
- Policy là phân tích DAX best-effort — chống sơ ý, không thay RLS.
- Bookmark không tự động hoá — clone bookmark từng làm vỡ báo cáo thật.
- Ghi PBIR cần file đóng — ràng buộc của định dạng; công cụ tự nhắc.
- Chưa nghiệm thu: Power BI Service,
pbi-publish, Python 3.14 với Desktop thật. powerbi-modeling-mcpcòn Public Preview — pin version, theo dõi release notes.
Agent Data Studio