Bộ mã nguồn mở microsoft/skills-for-fabric không chỉ là tập hợp các hướng dẫn sử dụng Microsoft Fabric cho AI Coding Assistant. Dưới góc độ kỹ thuật hệ thống (Systems Engineering), đây là một kiến trúc tham chiếu (Reference Architecture) cấp độ Production của Microsoft về cách thiết kế, điều phối và kiểm soát một hệ thống Conversational Analytics & BI Agent.

Tài liệu này bóc tách toàn bộ cấu trúc, luồng điều phối (orchestration workflow) và các mẫu thiết kế (design patterns) quan trọng nhất từ microsoft/skills-for-fabric để đội ngũ phát triển (Dev & Data Analyst) tham khảo và áp dụng trực tiếp vào hệ thống Conversational Analytics Agent nội bộ.

Interactive Lab

Trình Mô Phỏng Kiến Trúc & Tra Cứu Skills

Kịch bản mẫu: Người dùng hỏi: "Doanh thu của khách hàng Terra Firma trong kịch bản ngân sách (budget) theo từng khu vực là bao nhiêu?". Bấm vào từng bước bên dưới để xem cách FabricIQ điều phối MCP Tools:

Bước 1

MCP Tool
Mục tiêu & Guardrail chống ảo giác
MCP Payload / Truy vấn thực tế
[Anti-Pattern] LLM thông thường tự sinh
[Chuẩn FabricIQ] Quy tắc bắt buộc trong Skill

1. Tại sao Đội Dev Conversational Analytics cần tham khảo Repo này?

Sơ đồ 1.1: Ma trận Chẩn đoán 5 Điểm Nghẽn của Conversational Agent & Cơ chế Khắc phục

Diagnostic Matrix
1. Bùng nổ ngữ cảnh (Context Bloat)Failure Mode

Nhồi toàn bộ hàng trăm bảng, measure và luật SQL/DAX vào 1 System Prompt duy nhất làm giảm khả năng suy luận.

→
Mode Dispatcher + JMESPath Projection-80% Tokens

File SKILL.md chỉ giữ bảng phân luồng (~250 dòng), nạp tài liệu theo chế độ và lọc Schema ngay trên MCP Server.

2. Ảo giác giá trị lọc (Value Hallucination)Failure Mode

Tự đoán chuỗi ký tự trong mệnh đề lọc (VD: Region = 'North America' trong khi DB lưu 'NA'), trả về rỗng.

→
Bắt buộc Entity Grounding (ValueSearch)0% Guessed Filter

Gọi ValueSearch trước khi viết DAX để lấy đúng tên cột và giá trị chính tả chuẩn đang tồn tại trong DB.

3. Lệch số liệu với Dashboard (Metric Drift)Failure Mode

Agent tự viết công thức từ bảng thô và bỏ sót bộ lọc ngầm của trang báo cáo, ra kết quả khác trên Dashboard.

→
Verified Answers + 3-Level Filter Inheritance100% Parity

Ưu tiên VerifiedAnswers, kế thừa toàn bộ Report + Page + Visual Filters và dùng TREATAS cho bảng ẩn.

4. Sai tổng & Mất dòng tổng (Subtotal Loss)Failure Mode

Gộp hàm FILTER gây lỗi Auto-Exist; dòng Grand Total ở cuối bảng bị cắt mất khi chạm ngưỡng maxRows.

→
Parallel Dual-Query & Subtotal-First SortZero Truncation

Chạy song song 1 Summary Query + 1 Detail Query có sắp xếp ORDER BY IsSubtotal DESC đẩy dòng tổng lên đầu.

5. Rủi ro tự ý Ghi/Xuất bản (Unsafe Mutation)Failure Mode

Agent chạy thẳng từ bước lên ý tưởng sang sửa mô hình hoặc publish báo cáo khi chưa có sự phê duyệt.

→
Greenfield Approval Barrier & Mode LockHard Gate

Khóa cứng ở trạng thái approval_pending, xuất đặc tả _brief/report-spec.md và dừng chờ người dùng duyệt.

Khi xây dựng một hệ thống Conversational Analytics Agent (hỏi đáp dữ liệu bằng ngôn ngữ tự nhiên qua Text-to-SQL hoặc Text-to-DAX), các đội phát triển thường gặp 5 điểm nghẽn kỹ thuật lớn:

  1. Bùng nổ ngữ cảnh (Context Window Explosion): Nhồi toàn bộ schema của hàng trăm bảng, cột, measure và luật nghiệp vụ vào một System Prompt duy nhất làm giảm độ chính xác suy luận và tăng chi phí token/độ trễ.
  2. Ảo giác giá trị lọc (Filter Value Hallucination): Agent tự đoán giá trị trong mệnh đề lọc (ví dụ viết WHERE Region = 'North America' trong khi dữ liệu thực tế lưu là 'NA' hoặc 'AMER'), dẫn đến kết quả trả về bằng 0 hoặc rỗng.
  3. Lệch chuẩn số liệu giữa Chat và Dashboard (Metric & Filter Drift): Cùng một câu hỏi “Doanh thu quý này là bao nhiêu?”, Agent tính ra một con số khác với con số hiển thị trên Dashboard của Ban Giám đốc vì bỏ sót các bộ lọc ngầm định (Report/Page/Visual filters) hoặc tự viết công thức tính toán thay vì dùng Measure đã chuẩn hóa.
  4. Lỗi logic khi sinh truy vấn phức tạp (Auto-Exist & Subtotal Truncation): Khi gom nhóm nhiều chiều (multi-dimension hierarchy), câu lệnh sinh ra bị sai dòng tổng (Grand Total) hoặc bị cắt mất dòng tổng quan trọng do vượt quá giới hạn dòng trả về (maxRows).
  5. Rủi ro an toàn khi kết hợp Đọc và Ghi (Read/Write Mixing): Agent tự ý thay đổi cấu trúc mô hình hoặc xuất bản báo cáo khi người dùng mới chỉ yêu cầu lên phương án.

Trong microsoft/skills-for-fabric, Microsoft đã giải quyết triệt để cả 5 bài toán trên thông qua kiến trúc Hybrid 3-Tier (Agents - Skills - Common) kết hợp với MCP Orchestration Tools.


2. Kiến trúc tổng thể: Mô hình Hybrid 3-Tier và MCP Layer

Sơ đồ 2.1: Kiến trúc Phân tầng Hybrid 3-Tier kết hợp Tầng Thực thi MCP/CLI

System Topology
Tầng 1: Agents Layer (agents/*.agent.md) Định tuyến vai trò, Pre-Flight Check & Uỷ quyền tác vụ
FabricIQ.agentConversational BI & DAX
FabricDataEngineerSpark, DW, Pipelines, KQL
FabricAdminGovernance & Tenant Ops
FabricAppDevAPI & App Integration
FabricMigrationEngineerSynapse/Databricks/HDI
↓ Uỷ quyền theo ý định (Intent Delegation) ↓
Tầng 2: Skills Dispatcher Layer (skills/*/SKILL.md) 25 Bộ điều phối chế độ (Mode Dispatchers - Gọn nhẹ ~250 dòng/file)
fabriciq9-Step BI Consumption
semantic-model-authoringTOM, TMDL, DAX Perf, AI Ready
powerbi-report-cliPlan / Design / Author / Manage
sqldw-cli & sqldb-cliT-SQL Analytics & Query Insights
onelake-catalog-cliAudit & Auto Metadata Curate
↓ Nạp ngữ cảnh theo yêu cầu (On-Demand Lazy Loading) ↓
Tầng 3: Modular References & Common Core (references/*.md + common/*.md) Tri thức chuyên sâu theo từng bước + Chuẩn hóa Auth/API chống lệch (No-Drift)
dax-guidelines & perfLuật tối ưu & mẫu DAX
chart-selection & layout5 Archetypes thiết kế PBI
COMMON-CORE.mdToken Audiences & LRO Polling
COMMON-CLI.mdaz rest & JMESPath Discovery
ITEM-DEFINITIONS-COREPayload Envelopes chuẩn
↓ Gọi hàm nguyên thủy trực tiếp (Live Tool Invocations) ↓
Tầng 4: Execution Layer (.mcp.json + CLI Surface) Tương tác thời gian thực với dữ liệu và mô hình trên Microsoft Fabric
FabricIQ MCP Server6 Tools hỏi đáp dữ liệu PBI
powerbi-modeling-mcpLive TOM Read/Write Schema
fabric-sqlendpoint MCPexecute_query T-SQL trực tiếp
Azure & Fabric CLIaz rest / fab api / report-author

Thay vì xây dựng một Agent nguyên khối (Monolithic Agent), Microsoft chia hệ thống thành 3 tầng văn bản điều hướng kết hợp với 1 tầng thực thi qua giao thức MCP (Model Context Protocol).

Vuốt ngang để xem đầy đủ bảng
Tầng kiến trúc Thành phần trong Repo Vai trò kỹ thuật trong hệ thống Agent
Tầng 1: Agents (Bộ định tuyến vai trò) agents/*.agent.md (5 Agents: FabricIQ, FabricDataEngineer, FabricAdmin, FabricAppDev, FabricMigrationEngineer) Định nghĩa Persona, phạm vi trách nhiệm, điều kiện kích hoạt (Triggers), quy tắc phân quyền (Delegation Rules) và cổng kiểm tra bắt buộc trước khi gọi tool (Pre-Flight Check).
Tầng 2: Skills (Bộ điều phối theo chế độ) skills/*/SKILL.md (25 Skills chuyên biệt) + thư mục con references/*.md Đóng vai trò là Mode Dispatcher. File SKILL.md gốc rất gọn, chỉ chứa bảng phân loại ý định (Intent Routing) và trỏ tới các file references/*.md chi tiết. Giúp thực hiện cơ chế Progressive Disclosure (Nạp ngữ cảnh lười - Lazy Loading).
Tầng 3: Common (Lõi chuẩn hóa dùng chung) common/*.md (COMMON-CORE.md, COMMON-CLI.md, ITEM-DEFINITIONS-CORE.md, v.v.) Lưu trữ toàn bộ quy tắc xác thực (Auth/Token Audience), phân trang (Pagination), xử lý tác vụ chạy nền (Long-Running Operations - LRO) và cấu trúc payload chuẩn. Đảm bảo tính nhất quán (No-Drift) giữa các Skills.
Tầng 4: Execution Layer (MCP & CLI) .mcp.json (FabricIQ, powerbi-modeling-mcp, fabric-sqlendpoint) + az rest / fab CLI Cung cấp các hàm nguyên thủy (Primitives) để truy vấn metadata, tìm kiếm thực thể, chạy DAX/T-SQL trực tiếp trên dữ liệu thật và thao tác trên cấu trúc Semantic Model.

Cơ chế Progressive Disclosure (Tiết kiệm 70-80% Context Window)

Sơ đồ 2.2: So sánh Tiêu thụ Context Window giữa Monolithic Prompt và Progressive Disclosure

Token Efficiency
Cách truyền thống (Monolithic Prompt): Nhồi toàn bộ luật DAX, SQL, Schema & 60+ tài liệu 100% (~85,000 tokens)
100% Context Bloat
Hậu quả: Gây nhiễu suy luận (Lost-in-the-middle), tăng độ trễ Time-To-First-Token và tốn chi phí mỗi lượt gọi.
Cách của Microsoft (Progressive Disclosure): Dispatcher mỏng + Nạp đúng 1 Mode Reference ~15% (~8,500 tokens)
6%
14%
80% Context trống
Hiệu quả: SKILL.md (~6%) + 1 Mode Ref (~14%). Giữ lại hơn 80% dung lượng bộ nhớ cho kết quả truy vấn và suy luận sâu.

Điểm đáng học hỏi nhất trong cách tổ chức thư mục của skills-for-fabric là không bao giờ nạp toàn bộ tài liệu hướng dẫn vào bộ nhớ cùng lúc.

Ví dụ với skill powerbi-report-cli (quản lý trọn vòng đời báo cáo Power BI với hơn 60 file tài liệu tham khảo chi tiết): - File skills/powerbi-report-cli/SKILL.md chỉ dài khoảng 250 dòng và tuyên bố rõ: “This skill is a mode dispatcher and intentionally contains no detailed procedures. Select the mode that matches the request, then read the matching mode reference end to end before acting.” - Khi người dùng yêu cầu thiết kế giao diện, Agent chỉ nạp references/design.md và references/design/chart-selection.md. - Khi người dùng yêu cầu sửa code JSON của biểu đồ, Agent mới nạp references/authoring.md và references/authoring/cartesian.md.


3. Phân tích sâu FabricIQ: Luồng điều phối 9 bước cho Conversational BI Agent

Trong repo, agents/FabricIQ.agent.md và skills/fabriciq/SKILL.md là trái tim của hệ thống hỏi đáp dữ liệu tự nhiên trên Power BI và Semantic Model. Hệ thống này sử dụng một MCP Server duy nhất (https://fabriciq.svc.cloud.microsoft/v1/mcp/fabriciq) với đúng 6 công cụ (MCP Tools) được thiết kế cực kỳ chặt chẽ:

Vuốt ngang để xem đầy đủ bảng
Tên MCP Tool Đầu vào chính Mục đích & Quy tắc sử dụng bắt buộc
DiscoverArtifacts searchQuery, artifactTypes, maxResults Tìm kiếm báo cáo (Report) và mô hình ngữ nghĩa (Semantic Model) theo từ khóa. Luôn gọi đầu tiên nếu người dùng chưa cung cấp ID hoặc URL. Luôn ưu tiên chọn Report hơn Semantic Model rời.
ResolveFabricItem fabricItemId (GUID hoặc URL) Phân giải URL (bao gồm cả URL phức tạp của Power BI App) hoặc GUID chưa rõ loại sang fabricItemId chuẩn, itemType và workspaceId.
GetReportMetadata reportObjectId, queries (JMESPath tùy chọn) Lấy cấu trúc các trang báo cáo (Pages), biểu đồ (Visuals), trường dữ liệu đang gắn (Bindings), Report-level measures và toàn bộ bộ lọc 3 cấp (Report / Page / Visual filters).
GetSemanticModelSchema artifactId, queries (JMESPath tùy chọn) Lấy danh sách bảng, cột, measure, mối quan hệ (Relationships), cùng 2 thành phần tối quan trọng: VerifiedAnswers và CustomInstructions.
ValueSearch artifactId, searchTerms, scope Tìm kiếm giá trị thực tế trong các cột của mô hình. Bắt buộc gọi trước khi viết bất kỳ điều kiện lọc DAX nào có chứa tên riêng (khách hàng, sản phẩm, khu vực, chiến dịch).
ExecuteQuery artifactId, daxQueries (mảng 1-4 câu lệnh), maxRows Thực thi từ 1 đến 4 câu lệnh DAX độc lập song song (mỗi câu lệnh chứa một mệnh đề EVALUATE duy nhất) và trả về bảng kết quả (mặc định 250 dòng, tối đa 1.000 dòng).

Quy trình 9 bước thực thi chuẩn (9-Step Execution Pipeline)

Sơ đồ 3.1: Luồng Điều phối 9 Bước của FabricIQ chia theo 3 Pha Thực thi

9-Step Orchestration
Pha I (Bước 1 - 3)
Định vị & Thu thập Ngữ cảnh
BƯỚC 01Discover / Resolve
Định danh Artifact
Tìm theo từ khóa hoặc phân giải URL. Ưu tiên chọn Report trước Semantic Model rời.
BƯỚC 02GetReportMetadata
Đọc Ngữ cảnh Báo cáo
Lấy ID của Semantic Model bên dưới, danh sách Visuals, Measures và bộ lọc 3 cấp.
BƯỚC 03GetSemanticModelSchema
Phân tích Schema & Luật
Tải bảng, cột, quan hệ và bắt buộc lấy đủ VerifiedAnswers + CustomInstructions.
Pha II (Bước 4 - 6)
Neo Ngữ nghĩa & Sinh Mã DAX
BƯỚC 04 [CỔNG RẼ NHÁNH]VA Matcher
Khớp Verified Answer?
Nếu Khớp: Sao chép 100% Bindings & Filters của VA.
Nếu Không: Áp dụng Custom Instructions.
BƯỚC 05ValueSearch
Neo Giá trị Thực thể DB
Tra cứu tên riêng (khách hàng, sản phẩm, vùng) để lấy đúng tên cột và chuỗi chuẩn trong DB.
BƯỚC 06DAX Synthesizer
Sinh Truy vấn Kỷ luật
Viết SUMMARIZECOLUMNS tách biệt từng filter bằng TREATAS / KEEPFILTERS.
Pha III (Bước 7 - 9)
Thực thi, Tự sửa lỗi & Trả lời
BƯỚC 07ExecuteQuery
Chạy Truy vấn Song song
Thực thi từ 1-4 câu lệnh EVALUATE độc lập song song (Summary + Detail Rollup).
BƯỚC 08 [TỰ PHỤC HỒI]Max 1 Retry
Kiểm chứng BLANK / Lỗi
Nếu rỗng/lỗi: kiểm tra mốc ngày LASTNONBLANK, đối chiếu filter ẩn và chạy lại tối đa 1 lần.
BƯỚC 09Synthesis
Trình bày Hướng Nghiệp vụ
Đưa con số chính lên đầu, công khai bộ lọc đã áp dụng, ẩn toàn bộ thuật ngữ DAX/Tool.

Khi nhận một câu hỏi từ người dùng (ví dụ: “Top 5 sản phẩm có doanh thu cao nhất của khách hàng Terra Firma trong kịch bản ngân sách là gì?”), FabricIQ bắt buộc Agent tuân thủ nghiêm ngặt trình tự 9 bước sau:

  1. Bước 1 - Định danh tài nguyên (Artifact Identification):
  2. Nếu có URL hoặc GUID: Gọi ResolveFabricItem.
  3. Nếu chỉ có tên hoặc từ khóa: Gọi DiscoverArtifacts. Lưu ý tách biệt rõ reportObjectId (ID của báo cáo) và artifactId (ID của Semantic Model nằm bên dưới báo cáo đó).
  4. Bước 2 - Đọc ngữ cảnh báo cáo (Report Metadata Inspection):
  5. Gọi GetReportMetadata (lần đầu không truyền tham số queries để lấy toàn cảnh).
  6. Trích xuất semanticModel ID, danh sách các Visual liên quan đến câu hỏi, các Measure đang được Visual đó sử dụng và toàn bộ bộ lọc đang áp dụng trên Report, Page và Visual.
  7. Bước 3 - Phân tích Schema và Luật nghiệp vụ (Schema & Rules Analysis):
  8. Gọi GetSemanticModelSchema với ID của Semantic Model.
  9. Đọc toàn bộ VerifiedAnswers (câu trả lời đã xác thực) và CustomInstructions (hướng dẫn nghiệp vụ của chủ sở hữu mô hình).
  10. Bước 4 - Đối sánh Câu trả lời đã xác thực (Verified Answers Matching - Bắt buộc):
  11. Quét toàn bộ danh sách VerifiedAnswers xem có mục nào khớp về mặt ngữ nghĩa với câu hỏi của người dùng không (kể cả khi dùng từ đồng nghĩa). Nếu khớp, bắt buộc dùng nguyên bản thiết kế (Bindings + Filters) của Verified Answer đó, không tự ý sáng tạo câu truy vấn mới.
  12. Bước 5 - Neo giá trị thực thể (Entity Value Grounding qua ValueSearch):
  13. Với câu hỏi có chứa tên riêng như "Terra Firma" và "Budget", Agent gọi ValueSearch(artifactId, searchTerms=["Terra Firma", "Budget"]) để biết chính xác giá trị này nằm ở bảng nào, cột nào và cách viết hoa/thường chuẩn trong cơ sở dữ liệu là gì.
  14. Bước 6 - Sinh mã truy vấn theo khuôn mẫu (Constrained Query Generation):
  15. Viết câu lệnh DAX dựa trên các Measure có sẵn trong mô hình (ưu tiên Measure đang gắn trên Visual của báo cáo), kết hợp bộ lọc từ Bước 2, luật từ Bước 3/4 và giá trị chuẩn từ Bước 5.
  16. Bước 7 - Thực thi song song (Parallel Query Execution):
  17. Gọi ExecuteQuery (hỗ trợ chạy song song tối đa 4 câu lệnh EVALUATE trong 1 request để giảm độ trễ mạng).
  18. Bước 8 - Kiểm chứng và Tự sửa lỗi (Verification & Error Recovery):
  19. Nếu kết quả trả về BLANK hoặc rỗng bất thường: Kiểm tra lại xem có đang lọc vào một ngày không có dữ liệu không (re-anchor về ngày gần nhất có dữ liệu bằng LASTNONBLANK), kiểm tra lại bộ lọc của Report, sửa DAX và thử lại tối đa 1 lần (max 1 retry).
  20. Bước 9 - Tổng hợp câu trả lời hướng người dùng (Business-First Synthesis):
  21. Trình bày kết quả ngắn gọn, đưa con số quan trọng lên đầu (in đậm), dùng bảng văn bản rõ ràng. Tuyệt đối không nhắc đến tên hàm DAX, tên bảng kỹ thuật hay tên MCP tool trong câu trả lời cho người dùng cuối.

4. Bảy Mẫu Thiết Kế (Design Patterns) Đắt Giá Nhất Cho Đội Dev

Dưới đây là 7 kỹ thuật cốt lõi được rút trích từ mã nguồn của skills-for-fabric mà đội phát triển Conversational Analytics có thể áp dụng ngay vào kiến trúc Agent của mình (dù backend của bạn dùng Power BI DAX, Fabric Warehouse T-SQL, BigQuery, Snowflake hay Postgres).

Pattern 1: Tháp ưu tiên nguồn chân lý (4-Level Hierarchy of Truth)

Một lỗi phổ biến của các Text-to-SQL / Text-to-DAX Agent là luôn cố gắng tự viết câu lệnh tính toán từ các bảng và cột thô (Raw Schema). FabricIQ định nghĩa một tháp ưu tiên 4 tầng rõ ràng:

Sơ đồ 4.1: Tháp Ưu Tiên Nguồn Chân Lý 4 Tầng (Hierarchy of Truth Pyramid)

Pattern 01
TẦNG 1 - ƯU TIÊN TỐI CAO (SOURCE OF TRUTH)
VERIFIED ANSWERS (VA)
Bản thiết kế truy vấn (Bindings + Filters) đã được chuyên gia xác thực. Nếu khớp câu hỏi: sao chép 100% logic, cấm tự ý thêm/bớt filter (vượt quyền cả Custom Instructions).
↓ Khi không có Verified Answer trùng khớp ↓
TẦNG 2 - LUẬT NGHIỆP VỤ CỦA CHỦ SỞ HỮU MÔ HÌNH
CUSTOM INSTRUCTIONS
Quy tắc miền dữ liệu (mốc thời gian mặc định, KPI chuẩn, quy tắc loại trừ) do Model Owner thiết lập. Bắt buộc áp dụng cho mọi câu DAX tự sinh.
↓ Kết hợp ngữ cảnh hiển thị trên báo cáo ↓
TẦNG 3 - NGỮ CẢNH BIỂU ĐỒ & BỘ LỌC BÁO CÁO
REPORT VISUAL BINDINGS & 3-LEVEL FILTERS
Ưu tiên dùng các Measure đang gắn trên Visual và kế thừa trọn bộ Report + Page + Visual Filters để khớp 100% số liệu với Dashboard.
↓ Chỉ dùng khi 3 tầng trên chưa định nghĩa sẵn ↓
TẦNG 4 - DỰ PHÒNG CUỐI CÙNG (FALLBACK ONLY)
RAW SEMANTIC MODEL SCHEMA (TABLES / COLUMNS / RELATIONSHIPS)
Chỉ tự tổ hợp phép tính từ các bảng và cột cơ sở khi không có Verified Answer, Custom Instruction hay Report Visual tương ứng.

Pattern 2: Kế thừa bộ lọc 3 cấp và Cơ chế công khai ghi đè (Filter Inheritance & Override Disclosure)

Sơ đồ 4.2: Phễu Kế thừa Bộ lọc 3 Cấp, Chặn Nhiễu Chéo và Quy tắc Ghi đè

Pattern 02
1. Luồng Kế thừa Mặc địnhBắt buộc
Hợp nhất cả 3 cấp bộ lọc vào câu DAX:
Report Filters + Page Filters + Target Visual Filters.
Nếu bảng trong filter bị ẩn khỏi Schema: bắt buộc áp dụng qua TREATAS({vals}, 'HiddenTable'[Col]).
2. Luồng Bị Chặn Tuyệt đốiCấm mượn
Bộ lọc của các Visual khác trên cùng trang:
Tuyệt đối không tự ý "mượn" filter từ biểu đồ bên cạnh (ngay cả khi trông giống quy tắc lọc dữ liệu rác chung) nếu không khai báo ở cấp Page/Report.
3. Khi Câu hỏi Mâu thuẫn FilterOverride Rule
VD: Báo cáo lọc Year = 2025 nhưng User hỏi 2026:
Chỉ ghi đè đúng chiều Year, giữ nguyên các filter khác và bắt buộc công khai (disclose) việc ghi đè trong câu trả lời.

Tại sao người dùng hỏi Agent lại nhận được con số khác trên Dashboard? Vì trên Dashboard có các bộ lọc ngầm định ở cấp Báo cáo (Report filter), cấp Trang (Page filter) hoặc cấp Biểu đồ (Visual filter) - ví dụ: Status <> 'Cancelled' hoặc Scenario IN ('Actual', 'Forecast').

Quy tắc của Microsoft trong skills/fabriciq/SKILL.md: - Mặc định kế thừa toàn bộ: Khi truy vấn dữ liệu dựa trên một Visual trong báo cáo, Agent bắt buộc đưa toàn bộ Report Filters + Page Filters + Target Visual Filters vào câu lệnh truy vấn. - Cấm “mượn” bộ lọc chéo (No Cross-Visual Filter Borrowing): Không bao giờ lấy bộ lọc của một biểu đồ khác trên cùng trang để áp vào biểu đồ đang xét, ngay cả khi bộ lọc đó trông giống như quy tắc làm sạch dữ liệu chung. - Xử lý bảng ẩn bằng TREATAS: Nhiều khi bộ lọc cấp báo cáo tham chiếu đến một bảng cấu hình bị ẩn khỏi Schema. Agent không được bỏ qua bộ lọc này mà phải áp dụng bằng hàm TREATAS({"Actual", "Forecast"}, 'Budget'[Scenario]). - Ghi đè có công khai (Explicit Override Disclosure): Nếu báo cáo đang lọc cố định Year = 2025, nhưng người dùng hỏi “Doanh thu năm 2026 là bao nhiêu?”, Agent chỉ ghi đè đúng bộ lọc Year, giữ nguyên mọi bộ lọc khác, và bắt buộc ghi rõ trong câu trả lời (ví dụ: “Lưu ý: Kết quả này đã chuyển bộ lọc năm từ 2025 (mặc định của báo cáo) sang 2026 theo yêu cầu của bạn”).

Pattern 3: Xử lý Schema khổng lồ bằng JMESPath Projection (Two-Phase Metadata Retrieval)

Sơ đồ 4.3: Giao thức Truy xuất Metadata 2 Pha chống Tràn Bộ nhớ (Truncated Schema Recovery)

Pattern 03
Pha 1: Truy xuất Toàn cảnh (Full Call)Bước 1
Gọi GetSemanticModelSchema(artifactId) không truyền tham số queries.
→ Nếu mô hình vừa và nhỏ: Nhận toàn bộ Schema trong 1 lượt.
→ Nếu mô hình quá lớn (nhận cảnh báo truncated): Kích hoạt ngay Pha 2.
Pha 2: Chiếu JMESPath Phía ServerBước 2 (Khi bị cắt)
Gọi lại Tool với mảng biểu thức lọc queries=[...] theo đúng thứ tự ưu tiên cứng:
(1) schema.VerifiedAnswers[] → (2) schema.CustomInstructions → (3) Các bảng và measure khớp từ khóa câu hỏi.

Khi một Semantic Model có hàng trăm bảng và hàng nghìn measure, kết quả trả về từ GetSemanticModelSchema hoặc GetReportMetadata sẽ vượt giới hạn token và bị cắt bớt (truncated).

Microsoft giải quyết bằng cơ chế Truy xuất 2 pha tích hợp JMESPath ngay trên MCP Server: 1. Pha 1: Gọi GetSemanticModelSchema(artifactId) không kèm tham số lọc. Nếu mô hình nhỏ, nhận toàn bộ schema trong 1 lần gọi. 2. Pha 2 (Nếu kết quả Pha 1 bị cắt bớt): MCP tool hỗ trợ tham số queries nhận mảng các biểu thức JMESPath để lọc dữ liệu ngay phía server trước khi trả về cho LLM. Thứ tự ưu tiên lấy bổ sung bắt buộc: - Ưu tiên 1: Lấy toàn bộ danh sách câu hỏi xác thực: queries=["schema.VerifiedAnswers[].{Title: Title, Question: Question}"] - Ưu tiên 2: Lấy toàn bộ hướng dẫn nghiệp vụ: queries=["schema.CustomInstructions"] - Ưu tiên 3: Tìm kiếm measure và bảng theo từ khóa liên quan đến câu hỏi: queries=["schema.Tables[].Measures[?regex_match(to_string(@), 'revenue|sales')].{Name: Name, Expression: Expression} | []"]

Pattern 4: Truy vấn kép song song cho dữ liệu phân cấp (Parallel Dual-Query chống mất dòng tổng)

Sơ đồ 4.4: Kiến trúc Tách-Gộp Truy vấn Kép Song song (Parallel Dual-Query Split-Merge)

Pattern 04
Luồng A: Summary Query (Tổng hợp đỉnh)Không bao giờ bị cắt
Chỉ gom nhóm theo 1-2 chiều cao nhất (không dùng ROLLUPADDISSUBTOTAL) kèm toàn bộ các Measure.
→ Số dòng cực ít (< 20 dòng), đảm bảo luôn lấy được con số tổng cấp cao chính xác 100%.
Luồng B: Detail Rollup Query (Chi tiết)Subtotal-First Sort
Chạy ROLLUPADDISSUBTOTAL trên toàn bộ các chiều phân cấp, nhưng bắt buộc:
ORDER BY IsLevel1Sub DESC, IsLevel2Sub DESC, [Measure] DESC.
→ Đẩy toàn bộ dòng Subtotal lên đầu bảng kết quả trước khi chạm trần maxRows = 250.
↓ Gửi đồng thời cả Luồng A và Luồng B trong 1 lần gọi ExecuteQuery(daxQueries=[QueryA, QueryB]) → Hợp nhất thành câu trả lời vừa có Tổng chuẩn vừa có Chi tiết sâu.

Khi người dùng yêu cầu phân tích theo cấu trúc phân cấp từ 3 chiều trở lên (ví dụ: Khu vực -> Quốc gia -> Tỉnh thành -> Nhóm sản phẩm) hoặc các chiều có số lượng giá trị lớn (high-cardinality), câu lệnh tạo dòng tổng phụ (ROLLUPADDISSUBTOTAL trong DAX hoặc GROUP BY ROLLUP trong SQL) có thể sinh ra hàng chục nghìn dòng. Khi bị cắt ở giới hạn maxRows = 250 hoặc 1000, các dòng Tổng (Subtotals / Grand Total) rất dễ bị cắt mất, khiến Agent báo cáo sai tổng số.

Giải pháp trong skills/fabriciq/SKILL.md: - Agent phải gửi 2 câu truy vấn chạy song song trong cùng một lệnh ExecuteQuery: 1. Summary Query (Truy vấn tổng hợp đỉnh): Chỉ gom nhóm theo 1-2 chiều cao nhất (không dùng rollup chi tiết) kèm toàn bộ các Measure. Kết quả cực gọn, đảm bảo 100% không bao giờ bị cắt dòng và luôn có con số tổng chính xác tuyệt đối. 2. Detail Query (Truy vấn chi tiết có Rollup): Gom nhóm toàn bộ các chiều với ROLLUPADDISSUBTOTAL, nhưng bắt buộc sắp xếp (ORDER BY) theo các cột cờ Subtotal giảm dần trước (IsLevel1Subtotal DESC, IsLevel2Subtotal DESC), sau đó mới sắp xếp theo giá trị Measure giảm dần. Nhờ vậy, toàn bộ các dòng tổng cấp cao luôn nằm ở đầu bảng kết quả và sống sót qua mọi giới hạn cắt dòng (maxRows).

Pattern 5: Kỷ luật sinh mã DAX/SQL (Chống lỗi Auto-Exist và Time Intelligence Trap)

Sơ đồ 4.5: Ba Chốt chặn Cú pháp DAX Bắt buộc (Syntax Guardrail Pillars)

Pattern 05
Chốt 1: Chống Auto-Exist
Cấm gộp nhiều cột trong 1 hàm FILTER('Table', A && B). Bắt buộc tách từng cột thành đối số riêng dùng TREATAS hoặc KEEPFILTERS(FILTER(ALL(Col), ...)).
Chốt 2: Neo Ngày Thực Tế
Cấm dùng MAX('Calendar'[Date]) vì bảng lịch thường kéo dài tới tương lai. Bắt buộc dùng LASTNONBLANK kèm kiểm tra [Measure] <> BLANK().
Chốt 3: Report Measure Inline
Nếu Measure chỉ định nghĩa ở tầng Report (không có trong Model), trích xuất công thức từ Metadata và khai báo lại bằng DEFINE MEASURE 'Table'[Name] = ....

Để ngăn LLM viết ra những câu lệnh chạy được nhưng sai số liệu, skills/fabriciq/SKILL.md đặt ra bộ luật cú pháp cực kỳ nghiêm ngặt:

  • Chống bẫy Auto-Exist khi lọc nhiều cột:
  • Cấm tuyệt đối: Gộp nhiều điều kiện lọc vào chung một hàm FILTER('Table', 'Table'[Col1] = "A" && 'Table'[Col2] = "B"). Trong DAX, cách viết này kích hoạt cơ chế auto-exist làm sai lệch dòng Grand Total.
  • Bắt buộc: Tách mỗi điều kiện lọc thành một đối số độc lập bên trong SUMMARIZECOLUMNS. Với điều kiện bằng/IN (=, IN), dùng TREATAS({"A"}, 'Table'[Col1]). Với các điều kiện khác (<>, >, IS NOT NULL), dùng KEEPFILTERS(FILTER(ALL('Table'[Col1]), ...)).
  • Chống bẫy ngày tương lai trong Time Intelligence:
  • Cấm tuyệt đối: Dùng MAX('Calendar'[Date]) để xác định “ngày hiện tại” vì bảng Calendar thường được tạo sẵn đến hết năm 2030.
  • Bắt buộc: Dùng LASTNONBLANK hoặc lọc những ngày có phát sinh dữ liệu ([Measure] <> BLANK()) trước khi lấy mốc thời gian mới nhất.
  • Xử lý Report-Level Measures:
  • Nhiều Measure được DA tạo trực tiếp trên file báo cáo Power BI chứ không nằm trong Semantic Model. Nếu gọi tên Measure đó trong câu lệnh DAX gửi xuống Semantic Model sẽ bị lỗi không tìm thấy.
  • Giải pháp: Đọc biểu thức của Measure đó từ GetReportMetadata, sau đó định nghĩa lại trực tiếp (inline) ở đầu câu truy vấn bằng cú pháp DEFINE MEASURE 'HostTable'[MeasureName] = <biểu thức>.

Pattern 6: Chuẩn bị mô hình cho AI (Semantic Model AI Readiness & OneLake Catalog Curation)

Sơ đồ 4.6: Dây chuyền 5 Bước Chuẩn hóa Tầng Ngữ nghĩa cho AI (AI Readiness Pipeline)

Pattern 06
BƯỚC 01
Chuẩn hóa Tên & Ẩn Khóa
Đổi tên bảng/cột sang thuật ngữ nghiệp vụ rõ nghĩa; ẩn các cột Surrogate Key / ID kỹ thuật.
BƯỚC 02
Curation Mô tả Tự động
Dùng onelake-catalog-cli (curate mode) quét mẫu dữ liệu thật để điền Description cho bảng/cột.
BƯỚC 03
Từ đồng nghĩa (Synonyms)
Gắn từ viết tắt và thuật ngữ phòng ban vào cột/measure để tăng độ chính xác khi khớp câu hỏi.
BƯỚC 04
Custom Instructions
Định nghĩa luật nghiệp vụ mặc định (năm tài chính, loại trừ nội bộ, KPI ưu tiên) ngay trong Model.
BƯỚC 05
Verified Answers (VA)
Đóng gói các câu hỏi trọng yếu của lãnh đạo thành bản thiết kế Bindings + Filters cố định.

Một hệ thống Conversational Analytics không thể trả lời chính xác nếu tầng dữ liệu bên dưới đặt tên cột viết tắt vô nghĩa (col_01, amt_v2). Repo cung cấp 2 skill chuyên biệt để chuẩn hóa tầng ngữ nghĩa cho AI:

  1. semantic-model-authoring (Workflow: Semantic Model AI Readiness):
  2. Kiểm tra và làm giàu metadata của Semantic Model để phục vụ Copilot và Data Agent: chuẩn hóa tên gọi thân thiện với nghiệp vụ, thêm mô tả (Description) giải thích ý nghĩa và công thức tính cho từng bảng/cột/measure, thiết lập từ đồng nghĩa (Synonyms), ẩn các cột khóa kỹ thuật (Surrogate Keys), và tạo sẵn bộ VerifiedAnswers cùng CustomInstructions.
  3. onelake-catalog-cli (Chế độ curate):
  4. Tự động lấy mẫu dữ liệu và cấu trúc của các đối tượng trong Workspace, từ đó dùng AI gợi ý mô tả cấp độ Item, Table và Column, trình bày thành bảng đối chiếu (Current vs Proposed) để Data Steward phê duyệt trước khi ghi hàng loạt vào hệ thống qua API.

Pattern 7: Cổng phê duyệt bắt buộc và Phân tầng công cụ (Greenfield Approval Barrier & Tool Tiering)

Sơ đồ 4.7: Máy Trạng thái Chuyển Chế độ có Chốt chặn Phê duyệt (State Machine with Approval Gate)

Pattern 07
MODE 01
Planning Mode
Khảo sát Semantic Model, lập kế hoạch trang & KPI, ghi file _brief/report-spec.md.
HARD BARRIER
Approval Gate
BẮT BUỘC DỪNG LƯỢT (END TURN). Chờ người dùng phê duyệt rõ ràng ở lượt chat tiếp theo.
MODE 02
Design Mode
Chọn Page Archetype, loại biểu đồ, bảng màu, font chữ và xuất hợp đồng Design Brief.
MODE 03
Authoring Mode
Chỉnh sửa file PBIR/TMDL local, kiểm tra lỗi schema và chụp ảnh màn hình preview để tự rà soát.
MODE 04
Management Mode
Đẩy định nghĩa lên Fabric Workspace, theo dõi tiến trình LRO và rebind kết nối.

Trong các skill có tác động thay đổi dữ liệu hoặc giao diện như powerbi-report-cli và semantic-model-authoring, Microsoft áp dụng 2 cơ chế bảo vệ quan trọng:

  1. Greenfield Approval Barrier (Chốt chặn phê duyệt bắt buộc):
  2. Ngay cả khi người dùng ra lệnh trong một câu duy nhất: “Hãy lên kế hoạch, thiết kế, tạo báo cáo Power BI và publish lên workspace cho tôi”, Agent vẫn bị khóa cứng ở trạng thái approval_pending (chỉ được phép chạy chế độ planning).
  3. Agent bắt buộc phải khảo sát Semantic Model, xuất ra bản đặc tả _brief/report-spec.md, yêu cầu người dùng xác nhận và kết thúc lượt trả lời (end turn). Câu chữ “tạo và publish” trong prompt ban đầu chỉ được coi là “phạm vi mong muốn trong tương lai”, không được coi là giấy phép để bỏ qua bước duyệt thiết kế.
  4. Tool Selection Priority (Phân tầng công cụ thực thi):
  5. Tier 1 (Ưu tiên số 1 - Live MCP): Nếu powerbi-modeling-mcp đang kết nối trực tiếp tới mô hình (trên Desktop hoặc Workspace), mọi thao tác đọc/ghi phải đi qua MCP để đảm bảo tính toàn vẹn của Tabular Object Model (TOM) và cấm đọc file .tmdl trên đĩa để tránh lệch trạng thái (stale state).
  6. Tier 2 (Fallback - Code/REST Round-trip): Chỉ khi không có MCP mới dùng phương pháp tải định nghĩa TMDL về qua az rest, chỉnh sửa file văn bản và đẩy lên lại qua API updateDefinition.

5. Danh mục 25 Skills và 5 Agents trong microsoft/skills-for-fabric

Để đội ngũ phát triển và Data Analyst dễ dàng tra cứu, dưới đây là bảng phân loại toàn bộ 25 Skills trong repo theo nhóm chức năng:

Nhóm A: Conversational BI, Semantic Model & Báo cáo Power BI (Trọng tâm cho DA & BI Agent)

Vuốt ngang để xem đầy đủ bảng
Tên Skill Chế độ (Modes) / Công cụ chính Ứng dụng cho DA và Hệ thống Agent
fabriciq FabricIQ MCP (DiscoverArtifacts, GetReportMetadata, GetSemanticModelSchema, ValueSearch, ExecuteQuery) Trả lời câu hỏi ngôn ngữ tự nhiên trực tiếp trên dữ liệu Power BI Report và Semantic Model với cơ chế chống ảo giác 9 bước.
semantic-model-authoring powerbi-modeling-mcp, TMDL, INFO.VIEW DAX, az rest Thiết kế Star Schema, viết và tối ưu hiệu năng DAX, tạo Field Parameters, kiểm tra Best Practices và chuẩn bị mô hình cho AI (AI Readiness).
powerbi-report-cli 4 Modes: planning, design, authoring, management (powerbi-report-author CLI) Quản lý trọn vòng đời báo cáo PBIP/PBIR: lập đặc tả, chọn loại biểu đồ chuẩn, sửa code visual.json, chụp ảnh màn hình preview để tự đánh giá giao diện và publish lên Fabric.
fabriciq-ontology-cli 2 Modes: authoring, consumption Xây dựng và truy vấn đồ thị ngữ nghĩa (Ontology definitions, lineage, entity grounding, graph walks) trên Fabric IQ.
activator-cli 2 Modes: authoring, consumption Thiết lập cảnh báo tự động (Data Activator / Reflex) dựa trên các chỉ số từ Power BI (powerBiSource-v1) hoặc dòng sự kiện thời gian thực.

Nhóm B: Truy vấn SQL, Data Warehouse & Khám phá Danh mục Dữ liệu

Vuốt ngang để xem đầy đủ bảng
Tên Skill Chế độ (Modes) / Công cụ chính Ứng dụng cho DA và Hệ thống Agent
sqldw-cli 3 Modes: authoring, consumption, operations + fabric-sqlendpoint MCP Truy vấn phân tích T-SQL trên Fabric Data Warehouse, thiết kế bảng/view/stored procedure và chẩn đoán truy vấn chậm (Query Insights).
sqldb-cli 3 Modes: authoring, consumption, operations Thao tác và truy vấn T-SQL trên SQL Database trong Fabric (OLTP workload) kèm kiểm tra hiệu năng.
onelake-catalog-cli 4 Modes: discover, assess, configure, curate Quản trị OneLake Catalog và tự động sinh mô tả (Data Dictionary / Metadata Curation) cho bảng, cột, báo cáo dựa trên dữ liệu thực tế.
search-consumption-cli Fabric Catalog Search REST API Tìm kiếm nhanh tài nguyên trên toàn bộ tổ chức theo từ khóa, loại đối tượng và workspace.
dataflows-cli 3 Modes: authoring, consumption, upgrade Viết mã Power Query (M) cho Dataflows Gen2, theo dõi lịch sử làm mới dữ liệu và nâng cấp từ Dataflow Gen1 lên Gen2 CI/CD.

Nhóm C: Kỹ thuật Dữ liệu (Data Engineering), Real-Time Intelligence & Vận hành

Vuốt ngang để xem đầy đủ bảng
Tên Skill Chế độ (Modes) / Công cụ chính Ứng dụng thực tế
e2e-medallion-architecture Cross-workload Orchestration Thiết kế kiến trúc hồ dữ liệu 3 tầng Bronze (thô) -> Silver (làm sạch) -> Gold (phục vụ phân tích).
spark-cli & project-osmos PySpark, Livy API, Materialized Lake Views Phát triển Notebook PySpark, quản lý Lakehouse Delta tables, chạy job phân tích lớn và xử lý pipeline tự hành với Project Osmos.
eventhouse-cli 2 Modes: authoring, consumption (KQL) Truy vấn phân tích thời gian thực bằng KQL (bắt buộc có bộ lọc thời gian where Timestamp > ago(...)) và quản lý bảng/hàm trong Eventhouse.
eventstream-cli & eventschemaset-cli 2 Modes: authoring, consumption Thiết kế luồng thu thập dữ liệu streaming (Eventstream topology) và quản lý danh mục cấu trúc sự kiện (Schema Sets).
git-integration-operations-cli fab api, az rest Tự động hóa quy trình Git (kết nối repo, commit, pull, xử lý xung đột) từ dòng lệnh.
deployment-pipelines-authoring-cli & variable-library-cli Fabric CI/CD REST APIs Quản lý đường ống triển khai (Dev -> Test -> Prod) và tham số hóa cấu hình môi trường qua Variable Library.
azmon-mirroredcatalogs-operations-cli Azure Monitor + Fabric Mirroring Đưa dữ liệu log/telemetry từ Azure Monitor, App Insights vào Fabric để phân tích tương quan với dữ liệu kinh doanh.
e2e-fabric-cost-estimation Capacity & CU Sizing Ước tính chi phí Fabric Capacity (F-SKU), quy đổi mức tiêu thụ CU của từng workload.
Nhóm Skills Migration (4 skills) synapse-migration, databricks-migration, hdinsight-migration, pipeline-migration Chuyển đổi tự động kho dữ liệu, notebook và pipeline từ Synapse, Databricks, HDInsight, ADF sang Microsoft Fabric.

6. Bảng Đối Chiếu Áp Dụng Cho Đội Phát Triển Conversational Analytics Agent

Sơ đồ 6.1: Kiến trúc Đề xuất khi Xây dựng Hệ thống Conversational Analytics Agent Nội bộ

Reference Blueprint
MODULE 01
Intent & Mode Router
System Prompt mỏng phân loại câu hỏi (Hỏi đáp số liệu vs Tạo báo cáo vs Sửa mô hình) để nạp đúng hướng dẫn.
MODULE 02
Context & VA Resolver
Đọc Metadata Dashboard + Kiểm tra kho Verified Answers + Lọc Schema lớn qua JMESPath.
MODULE 03
Entity Value Grounder
Index toàn bộ giá trị phân loại / tên riêng vào công cụ ValueSearch (Full-text / Vector) trước khi sinh query.
MODULE 04
Dual-Query Executor
Bộ kiểm tra cú pháp (chống Auto-Exist, neo ngày thật) + chạy song song Summary Query & Detail Query.
MODULE 05
Self-Heal & Synthesizer
Tự động sửa lỗi truy vấn tối đa 1 lần; trả lời ngắn gọn kèm công khai các bộ lọc ngầm đã áp dụng.

Nếu đội Dev của bạn đang tự xây dựng một hệ thống Conversational Analytics Agent (trên nền tảng LangGraph, AutoGen, Semantic Kernel, Cloudflare Agents SDK, hoặc Custom Agent), dưới đây là các thành phần có thể học hỏi và tái sử dụng trực tiếp từ microsoft/skills-for-fabric:

Vuốt ngang để xem đầy đủ bảng
Bài toán trong Hệ thống Agent của bạn Giải pháp tham chiếu từ skills-for-fabric File cần đọc kỹ trong Repo
Thiết kế kiến trúc Prompt không bị phình to khi thêm tính năng Áp dụng mẫu Mode Dispatcher + Progressive Disclosure: File prompt chính chỉ chứa bảng phân loại ý định (Intent Table) và gọi tool đọc file hướng dẫn chi tiết theo từng chế độ. skills/powerbi-report-cli/SKILL.md, skills/semantic-model-authoring/SKILL.md
Thiết kế bộ Tool cho Text-to-DAX / Text-to-SQL Agent Chỉ cần 6 hàm nguyên thủy: Discover -> Resolve -> GetReportContext -> GetSchema (kèm JMESPath) -> ValueSearch -> ExecuteQuery (hỗ trợ chạy song song 1-4 câu). skills/fabriciq/SKILL.md, agents/FabricIQ.agent.md, .mcp.json
Ngăn chặn Agent tự bịa tên khách hàng/sản phẩm trong câu query Bắt buộc thêm bước Entity Grounding (ValueSearch) vào pipeline trước bước sinh code SQL/DAX bất cứ khi nào câu hỏi có danh từ riêng hoặc giá trị phân loại. skills/fabriciq/SKILL.md (Mục Workflow Step 5 & Available Tools)
Đảm bảo con số Agent trả lời khớp 100% với Dashboard Xây dựng kho Verified Answers (VA) và cơ chế 3-Level Filter Inheritance (tự động đính kèm bộ lọc của Dashboard vào câu query của Agent). skills/fabriciq/SKILL.md (Mục Verified Answers & Inspect the report)
Tránh mất dòng tổng (Grand Total / Subtotal) khi query bị giới hạn số dòng Áp dụng Parallel Dual-Query Pattern: Chạy 1 câu Summary lấy tổng cấp cao song song với 1 câu Detail có sắp xếp cờ IsSubtotal DESC lên đầu. skills/fabriciq/SKILL.md (Mục Verified Answers - Quy tắc số 6)
Chuẩn hóa dữ liệu và Metadata để AI hiểu đúng nghiệp vụ Áp dụng quy trình Semantic Model AI Readiness và tự động hóa việc điền mô tả bảng/cột từ dữ liệu mẫu (Automated Metadata Curation). skills/semantic-model-authoring/references/semantic-model-ai-readiness.md, skills/onelake-catalog-cli/references/curate.md
Cơ chế tự phục hồi lỗi (Self-Healing / Error Recovery) Phân loại lỗi rõ ràng (Error Taxonomy): Lỗi cú pháp -> đọc lỗi, sửa và chạy lại tối đa 1 lần; Kết quả rỗng -> kiểm tra mốc ngày LASTNONBLANK và bộ lọc ngầm; Lỗi phân quyền (401/403) -> dừng ngay lập tức, không lặp vô tận. skills/fabriciq/SKILL.md (Mục Error Recovery & Error Taxonomy)

7. Hướng dẫn Cài đặt & Trải nghiệm Nhanh

Đội ngũ phát triển và Data Analyst có thể tải về nghiên cứu mã nguồn hoặc cài đặt trực tiếp vào công cụ AI Coding đang sử dụng:

Cách 1: Clone trực tiếp Repo để nghiên cứu Kiến trúc Prompt & Skills

Vì repo đã tích hợp sẵn các file cấu hình gốc (CLAUDE.md, GEMINI.md, AGENTS.md, .cursorrules, .windsurfrules, .mcp.json), bạn chỉ cần clone repo về máy và mở bằng Antigravity, Claude Code, Cursor hoặc Gemini CLI:

git clone https://github.com/microsoft/skills-for-fabric.git
cd skills-for-fabric

Cách 2: Cài đặt qua GitHub Copilot CLI hoặc APM (Agent Package Manager)

# Cài đặt trọn bộ Fabric Skills trên GitHub Copilot CLI
copilot plugin install github:microsoft/skills-for-fabric

# Hoặc chỉ cài đặt gói chuyên biệt cho Power BI & Data Analyst
copilot plugin install github:microsoft/skills-for-fabric --plugin-path .github/plugins/powerbi-authoring

# Hoặc cài từng skill riêng lẻ qua APM
apm install microsoft/skills-for-fabric --skill fabriciq -g
apm install microsoft/skills-for-fabric --skill semantic-model-authoring -g
apm install microsoft/skills-for-fabric --skill powerbi-report-cli -g

Cách 3: Xác thực Azure AD để kết nối trực tiếp vào Fabric / Power BI

# Đăng nhập Azure CLI
az login

# Kiểm tra token truy cập Fabric REST API
az account get-access-token --resource https://api.fabric.microsoft.com

# Kiểm tra token truy cập SQL Endpoint (Warehouse / Lakehouse)
az account get-access-token --resource https://database.windows.net