Trang chủ / Thiết kế

Thiết kế hệ thống

Bê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.

Tổng thể

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ó.

Sơ đồ tổng thể Agent Data Studio Bốn host gọi MCP server qua stdio. MCP server gồm shim mcp_server_powerbi.py, package powerbi_agent với 16 công cụ và lớp policy cho truy vấn DAX. Server nối tới Power BI Desktop qua ADOMD.NET, Power BI Service qua REST (chưa nghiệm thu) và file .pbip. Host đọc skill, lệnh, agent từ repo qua adapter. Server ghi hồ sơ, audit vào trạm dữ liệu. MCP của Microsoft là tuỳ chọn, chạy song song và không đi qua policy. Host (ứng dụng AI) Claude Code Codex Antigravity Claude Desktopchỉ MCP, không skill stdio MCP server mcp_server_powerbi.py (shim) powerbi_agent/ · 16 tool query · schema · TOM · PBIR · distill · knowledge Policy cho truy vấn DAX aggregate-only · PII blocklist cap 200/1000 dòng · audit JSONL Power BI Desktop ADOMD.NET → localhost:<port> tự dò tiến trình msmdsrv Power BI Service REST executeQueries · MSAL chưa nghiệm thu File .pbip TMDL (model) + PBIR (report) ghi trang khi file đóng Repo: skills/ · commands/ · agents/ 9 skill · 8 lệnh · 2 agent nguồn sự thật duy nhất .claude/skills/ · .agents/skills/ adapter host đọc đọc qua adapter Trạm dữ liệu (ngoài Git) workspace/ hoặc ADS_DATA projects/ · knowledge/ · audit/ policy.json · INDEX · TIMELINE từ chối ghi ra ngoài trạm hồ sơ · audit microsoft/ powerbi-modeling-mcp tuỳ chọn · chạy song song modeling hàng loạt, TMDL không đi qua policy của studio luồng chính đọc nguồn tuỳ chọn, ngoài phạm vi studio

Bản chữ của sơ đồ (màn hẹp có thể cuộn ngang sơ đồ):

KhốiVai tròNằm ở đâu / giao thức
HostỨng dụng AI chạy agent; gọi MCP server, đọc skill qua adapterClaude Code · Codex · Antigravity · Claude Desktop (chỉ MCP)
MCP server16 công cụ; chính sách cho mọi truy vấn DAXmcp_server_powerbi.py (shim) → powerbi_agent/, transport stdio
Power BI DesktopTruy vấn và ghi model đang mở (engine live)ADOMD.NET / AMO-TOM → localhost:<port>, tự dò tiến trình msmdsrv
Power BI ServiceTruy vấn dataset đã publish — chưa nghiệm thuREST executeQueries, xác thực MSAL
File .pbipModel dạng TMDL, report dạng PBIR; chỉ ghi trang khi file đóngThư 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ấtRepo; adapter .claude/skills/, .agents/skills/
Trạm dữ liệuHồ sơ dự án, tri thức, audit, PII blocklistworkspace/ hoặc ADS_DATA, ngoài Git
powerbi-modeling-mcpModeling hàng loạt (tuỳ chọn); không đi qua policy của studioCài riêng, host gọi trực tiếp
Kiến trúc

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.

Host gọi MCP server qua stdioCodex · Claude Code · Antigravity · Claude Desktop (chỉ MCP, không skill)
  1. 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/
  2. 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
  3. 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
Power BIDesktop (ADOMD.NET, AMO-TOM) · Service (REST, chưa nghiệm thu) · file .pbip (TMDL + PBIR)

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.

MCP server

16 công cụ, 6 nhóm

Đếm từ @mcp.tool() trong powerbi_agent/tools_*.py tại bản 0.7.1.

NhómCông cụModule
Khám phálist_local_reports · list_tables · describe_tabletools_query.py
Truy vấnexecute_dax_local · execute_dax_servicetools_query.py + policy.py
Sửa modeladd_measure_local · add_relationship_localtools_tom.py (TOM, model live)
Kit tranglist_templates · apply_template · distill_templatetools_template.py, pbir.py
Chưng cấtdistill_model_schema · distill_report_designtools_distill.py, tools_design.py
Tri thứcknowledge_status · setup_knowledge · init_project · log_timelinetools_knowledge.py, knowledge.py
  • Runtime: Python 3.11–3.14, pythonnet 3.1.0, transport stdio.
  • ADOMD.NET / AMO-TOM: bộ cài, doctor.ps1 và engine dò theo cùng một danh sách (SSMS 18–22, bản standalone, GAC); đặt ADOMD_LIB_DIR thì chỉ dùng đường đó.
  • Entry: mcp_server_powerbi.py là 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.
An toàn dữ liệu

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. 1
    Chặn dump bảng thô

    Aggregate-only

    Mặc định bật (tắt: POWERBI_AGGREGATE_ONLY=0). Nhận ra EVALUATE '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. 2
    Khoá cột nhạy cảm

    PII blocklist

    policy.json ở trạm (hoặc POWERBI_POLICY_FILE, bắt buộc ngoài repo); mẫu policy.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. 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. 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 chung POWERBI_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

Trung thực về giới hạn: đây là lưới chống rò rỉ do sơ ý (agent tiện tay kéo nguyên bảng), phân tích DAX theo kiểu best-effort. Bảo mật cứng vẫn là RLS trên model và service principal quyền tối thiểu. Audit log mặc định nằm trong trạm; chưa thiết lập trạm thì lùi về thư mục tạm của hệ điều hành, không bao giờ vào repo.
Skill

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íSkillNhómLoạiVai
0pbi-knowledgepowerbiKLố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
1data-discoverydataG¹Khảo sát, hỏi ngược, PROJECT.md, mindmap, từ điển dữ liệu, kế hoạch Excel
1′data-mockupdataKNhánh khi chưa có dữ liệu: spec → generator seed cố định → kiểm định → Excel
2pbi-modelpowerbiGPower Query/M, star schema, TMDL/DAX, ghi measure an toàn
3pbi-analysispowerbiKTruy vấn an toàn, chọn tầng công cụ, luật aggregate/PII/audit
4pbi-designpowerbiGClone trang đã duyệt hoặc archetype → Design Brief
5pbi-buildpowerbiGDựng trang, vòng Edit → Validate → Reload → Screenshot → Review
6pbi-reviewpowerbiKReview độc lập SQL, DAX, model, trang
7pbi-publishpowerbiMĐư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

  1. Mở & khảo sátbước 0–1′

    1. 0

      pbi-knowledge

      Mở dự án, tra kinh nghiệm.

      Cổng: project-opened

    2. 1

      data-discovery

      Khảo sát và lập kế hoạch.

      Cổng: discovery-approved

    3. 1′

      data-mockup

      Nhánh khi thiếu dữ liệu: tạo dữ liệu mẫu.

  2. Mô hình & con sốbước 2–3

    1. 2

      pbi-model

      Kết nối và dựng model khi cần Power BI.

      Cổng: model-verified

    2. 3

      pbi-analysis

      Soát số và chính sách truy vấn.

      Cổng: numbers-checked

  3. Báo cáobước 4–6

    1. 4

      pbi-design

      Thiết kế trang, viết Design Brief.

      Cổng: brief-approved

    2. 5

      pbi-build

      Dựng và xem ảnh render.

      Cổng: page-validated

    3. 6

      pbi-review

      Review độc lập.

      Cổng: review-clean

  4. Phát hành & đóngbước 7–8

    1. 7

      pbi-publish

      Nhánh chỉ khi được yêu cầu: đưa lên Fabric / Service.

    2. 8

      pbi-knowledge

      Đóng dự án, lưu bài học tái dùng.

      Cổng: project-closed

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.

Lệnh & agent

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ệnhViệcCông cụ MCP được nhắc trong file lệnh
/pbi-helpChọn quy trình theo nhu cầu và công cụ hiện cóknowledge_status, list_templates
/pbi-setupThiết lập nơi lưu tri thức trong trạmknowledge_status, setup_knowledge
/pbi-newMở dự án, chọn bước theo nguồn hiện cóknowledge_status, init_project
/pbi-scanQuét thiết kế báo cáo PBIP vào trạmdistill_report_design, distill_model_schema
/pbi-kitChưng cất một file .pbip thành bộ kit nhiều trangdistill_report_design, distill_template, apply_template, log_timeline
/pbi-doneĐóng dự án: checklist bàn giao, chưng cất, timelinedistill_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-recallTra dự án, bài học, mẫu trong trạmknowledge_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.

Host

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-HostsFile hướng dẫnAdapter skillCấu hình MCP của người dùng
Codex (CLI, desktop)codexAGENTS.md.agents/skills/~/.codex/config.toml
Claude CodeclaudeCLAUDE.md → AGENTS.md.claude/skills/~/.claude.json
Claude Desktopclaude-desktop—— (chỉ MCP)%APPDATA%\Claude\claude_desktop_config.json
AntigravityantigravityGEMINI.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 .bak trước khi ghi, chỉ thêm mục powerbi-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

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.

Cấu trúc trạm
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 blocklist
REPO

Repo 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

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.

HOST

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.

Knowledge OS

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. 1
    /pbi-new

    Mở và quản lý dự án

    init_project dựng projects/<slug>/ với design/, artifacts/; đọc INDEX.md, TIMELINE.md và tri thức liên quan trước khi khảo sát.

  2. 2
    /pbi-scan

    Quét trọn thiết kế

    distill_report_design quét mọi trang, theme, danh mục visual của một báo cáo vào projects/<slug>/design/.

  3. 3
    /pbi-done

    Đóng dự án, ghi timeline

    Cuối dự án đủ 4 artifact bàn giao. Timeline append-only, ghi bằng log_timeline:

    | ngày | dự án | việc | bài học/kit | link |
  4. 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

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. 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. 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. 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. 1

    Edit

    apply_template clone-and-rebind từ kit, chỉ khi file .pbip đóng.

    Cổng: mọi field được gắn lại

  2. 2

    Validate

    powerbi-report-author validate <Tên>.Report

    Cổng: 0 lỗi

  3. 3

    Reload

    powerbi-desktop reload --pid <pid>

    Cổng: reload không lỗi

  4. 4

    Screenshot

    Chụp trang bằng CLI của Microsoft.

    Cổng: có ảnh

  5. 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à placeholder TEMPLATE_*), có PROVENANCE.md. Kit thật của dự án để ngoài repo, trong templates/ 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.py có cổng duyệt bằng hash); hiện chưa công bố kit nào.
Nhiều agent

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.

VaiAgent gợi ýLàm gì
BuilderClaude CodeChạy data-discovery + pbi-build, ghi model và report, giữ lock
ReviewerCodexChỉ đọc: đối chiếu số bằng execute_dax_local, soi ERD, review DAX và page_spec trước khi Builder ghi
Analyst / DocumenterAntigravityTà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. 1

    Nhận bàn giao

    Đọc AGENTS.md và 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. 2

    Kiểm trạng thái

    list_local_reports xá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. 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.

Vòng đời

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.

  1. Trước khi càingay sau clone

    1. 1

      Kiểm máy

      doctor.ps1 -Preflight

      7 dòng prereq (PowerShell, ExecutionPolicy, Git, Python, ADOMD.NET, Node, az), chưa cần .venv.

      Cổng: có FAIL thì thoát mã 1

  2. Càimột hay nhiều host

    1. 2

      Cài và đăng ký host

      install.ps1 -Hosts codex,claude,…

      Tạo .venv và 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 -Hosts thì chọn codex.

  3. Kiểmmỗi lần một host

    1. 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).

    2. 4

      Thử Power BI Desktop

      doctor.ps1 -ProbeDesktop

      Thử EVALUATE ROW("x",1) với báo cáo đang mở; Desktop đóng thì báo NOT_CHECKED, không phải lỗi.

  4. Bảo trìkhi cần

    1. 5

      Cập nhật có duyệt

      update.ps1

      Xem 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.txt hay file ignore đổi, hoặc checkout bẩn.

    2. 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.

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

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-mcp còn Public Preview — pin version, theo dõi release notes.

Xem Roadmap