Viết DAX bằng Claude: Prompt mẫu và cách kiểm tra measure

Viet-dax-bang-claude-2400x1256

📄 README.mdViết DAX bằng Claude
Bạn gõ “viết measure doanh thu cùng kỳ năm trước”, vài giây sau AI trả về một công thức trông rất chuyên nghiệp. Dán vào Power BI thì báo lỗi vì sai tên cột, hoặc tệ hơn: chạy được nhưng ra số sai mà không ai phát hiện. Viết DAX bằng Claude giúp tiết kiệm rất nhiều thời gian, với điều kiện bạn biết cách mô tả mô hình, đặt prompt đúng và kiểm tra lại kết quả một cách có hệ thống. Bài viết này đi qua đủ ba phần đó.

Vì sao AI hay viết DAX sai?

DAX không giống SQL hay Excel: cùng một công thức có thể cho kết quả khác nhau tùy ngữ cảnh lọc (filter context) của từng visual. Khi không được cung cấp đủ thông tin, AI buộc phải đoán, và đây là những chỗ hay đoán sai nhất:

AI phải đoán Hậu quả thường gặp
Tên bảng, tên cột Measure báo lỗi vì tham chiếu cột không tồn tại
Có bảng ngày hay không, đã Mark as date table chưa Hàm Time Intelligence trả về trống hoặc sai
Quan hệ giữa các bảng và chiều lọc Bộ lọc không truyền đúng, số liệu lệch khi dùng slicer
Measure sẽ đặt ở visual nào, theo cấp nào Dòng tổng (Total) sai, hoặc sai khi xem theo ngày thay vì theo tháng
Định nghĩa nghiệp vụ (doanh thu có trừ giảm giá, trả hàng hay không) Công thức đúng kỹ thuật nhưng sai ý nghĩa

Vì vậy, bước quan trọng nhất khi viết DAX bằng AI không phải là câu lệnh, mà là bản mô tả mô hình bạn gửi kèm.

Bước chuẩn bị: viết “bản mô tả mô hình” (model brief)

Bản mô tả mô hình là một đoạn văn ngắn liệt kê bảng, cột quan trọng, quan hệ và các measure đã có. Bạn chỉ cần viết một lần, lưu lại và dán vào đầu mỗi yêu cầu, hoặc lưu vào một Project trên Claude để mọi cuộc trò chuyện đều dùng chung.

🗂️ model_brief.txtBản mô tả mô hình
1MÔ HÌNH DỮ LIỆU (Power BI, Star Schema)
2Bảng Fact:
3- Fact_BanHang(NgayBan, MaSanPham, MaKhachHang, MaCuaHang, SoLuong, ThanhTien, GiaVon)
4  ThanhTien = doanh thu đã trừ giảm giá, chưa trừ trả hàng.
5Bảng Dimension:
6- Dim_Ngay(Date, Nam, Thang, Quy) – đã Mark as date table, liên tục 2024–2026
7- Dim_SanPham(MaSanPham, TenSanPham, NhomHang)
8- Dim_CuaHang(MaCuaHang, TenCuaHang, ThanhPho)
9Quan hệ (1 – nhiều, lọc một chiều):
10- Dim_Ngay[Date] → Fact_BanHang[NgayBan]
11- Dim_SanPham[MaSanPham] → Fact_BanHang[MaSanPham]
12- Dim_CuaHang[MaCuaHang] → Fact_BanHang[MaCuaHang]
13Measure đã có:
14- [Doanh thu] = SUM ( Fact_BanHang[ThanhTien] )
15Dữ liệu mới nhất đến ngày: hôm qua (tháng hiện tại chưa kết thúc).

Lấy thông tin mô hình nhanh: mở Model view để xem bảng và quan hệ. Ở các phiên bản Power BI Desktop gần đây, bạn có thể vào DAX query view và chạy các truy vấn như EVALUATE INFO.VIEW.TABLES(), EVALUATE INFO.VIEW.COLUMNS(), EVALUATE INFO.VIEW.RELATIONSHIPS() để lấy danh sách bảng, cột, quan hệ rồi chép vào bản mô tả.

💡 Lưu ý bảo mật: bản mô tả chỉ cần tên bảng, cột và quan hệ, không cần gửi dữ liệu thật. Đây là cách an toàn để dùng AI ngay cả với mô hình có dữ liệu nhạy cảm.

Prompt khung: “quy tắc viết DAX” dùng cho mọi yêu cầu

Bên cạnh bản mô tả mô hình, hãy gửi kèm một bộ quy tắc ngắn để mọi measure Claude viết ra đều theo cùng chuẩn:

💬 prompt.txtGửi cho Claude
Khi viết DAX, hãy tuân theo các quy tắc sau:
1. Chỉ dùng bảng, cột có trong mô tả mô hình. Nếu thiếu thông tin, hỏi lại thay vì tự đặt tên.
2. Dùng VAR cho giá trị trung gian, DIVIDE thay cho phép chia “/”.
3. Hàm thời gian luôn dùng cột Dim_Ngay[Date], không dùng cột ngày của bảng Fact.
4. Ưu tiên lọc theo cột, tránh FILTER trên cả bảng Fact.
5. Với mỗi measure, ghi rõ: mục đích, giả định đã dùng, định dạng số đề xuất.
6. Cuối cùng, viết một truy vấn EVALUATE để tôi kiểm tra measure trong DAX query view.

Quy tắc số 6 rất quan trọng: nó biến mỗi câu trả lời của Claude thành một gói “công thức + cách kiểm tra”, giúp bạn xác minh kết quả ngay lập tức (xem phần kiểm tra bên dưới).

5 nhóm prompt mẫu để viết DAX bằng Claude

01 Measure cơ bản02 Time Intelligence03 Gỡ lỗi measure đang sai04 Tối ưu measure chạy chậm05 Giải thích và viết tài liệu cho measure

Các prompt dưới đây giả định bạn đã gửi bản mô tả mô hình và bộ quy tắc ở trên. Mỗi nhóm gồm prompt mẫu và ví dụ kết quả bạn nên nhận được.

NHÓM 1

Nhóm 1: Measure cơ bản

💬 prompt.txtGửi cho Claude
Dựa trên mô hình đã mô tả, viết các measure:
– Số lượng bán
– Lợi nhuận gộp và Biên lợi nhuận gộp %
– Tỷ trọng doanh thu % của từng sản phẩm trên tổng các sản phẩm đang được chọn
– Số đơn hàng
✅ measure.daxKết quả tốt sẽ trông như sau:
1Số lượng bán = SUM ( Fact_BanHang[SoLuong] )
2
3Lợi nhuận gộp = [Doanh thu] - SUM ( Fact_BanHang[GiaVon] )
4
5Biên lợi nhuận gộp % = DIVIDE ( [Lợi nhuận gộp], [Doanh thu] )
6
7Tỷ trọng doanh thu % =
8DIVIDE ( [Doanh thu], CALCULATE ( [Doanh thu], ALLSELECTED ( Dim_SanPham ) ) )

Với “Số đơn hàng”, câu trả lời đúng là Claude hỏi lại: mô hình không có cột mã đơn hàng, nên không thể đếm đơn chính xác. Nếu AI tự đặt ra một cột MaDonHang, đó là dấu hiệu bạn cần nhắc lại quy tắc số 1.

NHÓM 2

Nhóm 2: Time Intelligence

💬 prompt.txtGửi cho Claude
Viết bộ measure thời gian cho [Doanh thu]:
– Lũy kế từ đầu năm (YTD)
– Cùng kỳ năm trước và Tăng trưởng YoY %
– Tổng 3 tháng gần nhất
Lưu ý: tháng hiện tại chưa kết thúc. Khi so cùng kỳ, chỉ lấy năm trước
đến đúng ngày tương ứng với ngày có dữ liệu mới nhất.
YoY % để trống nếu năm trước không có dữ liệu.
✅ measure.daxKết quả tốt sẽ trông như sau:
1Doanh thu YTD = TOTALYTD ( [Doanh thu], Dim_Ngay[Date] )
2
3Doanh thu cùng kỳ =
4VAR NgayCuoi = CALCULATE ( MAX ( Fact_BanHang[NgayBan] ), REMOVEFILTERS () )
5VAR NgayCoDuLieu = FILTER ( VALUES ( Dim_Ngay[Date] ), Dim_Ngay[Date] <= NgayCuoi )
6RETURN
7    CALCULATE ( [Doanh thu], SAMEPERIODLASTYEAR ( NgayCoDuLieu ) )
8
9Tăng trưởng YoY % =
10VAR HienTai = [Doanh thu]
11VAR CungKy = [Doanh thu cùng kỳ]
12RETURN
13    IF ( NOT ISBLANK ( CungKy ), DIVIDE ( HienTai - CungKy, CungKy ) )
14
15Doanh thu 3 tháng gần nhất =
16CALCULATE (
17    [Doanh thu],
18    DATESINPERIOD ( Dim_Ngay[Date], MAX ( Dim_Ngay[Date] ), -3, MONTH )
19)

Điểm đáng chú ý là measure “Doanh thu cùng kỳ”: nó chỉ lấy các ngày đến ngày có dữ liệu mới nhất rồi mới dịch lùi một năm, nên tháng chưa kết thúc không bị so với cả tháng năm trước. Chi tiết từng hàm xem tại bài Time Intelligence trong Power BI: 7 hàm DAX so sánh cùng kỳ, lũy kế, tăng trưởng.

NHÓM 3

Nhóm 3: Gỡ lỗi measure đang sai

Khi một measure cho kết quả lạ, hãy gửi đủ bốn thông tin: công thức, visual đang dùng, kết quả mong đợi và kết quả thực tế.

💬 prompt.txtGửi cho Claude
Measure sau trả về trống ở mọi tháng:
Doanh thu cùng kỳ = CALCULATE ( [Doanh thu], SAMEPERIODLASTYEAR ( Fact_BanHang[NgayBan] ) ) ← ❌ dòng gây lỗi
Visual: bảng có cột Dim_Ngay[Nam], Dim_Ngay[Thang].
Mong đợi: tháng 3/2026 hiển thị doanh thu tháng 3/2025.
Đã kiểm tra: [Doanh thu] theo tháng hiển thị đúng.
Hãy giải thích nguyên nhân theo từng bước rồi đưa ra công thức đã sửa.

Nguyên nhân ở đây là hàm thời gian đang dùng cột ngày của bảng Fact thay vì Dim_Ngay[Date]. Prompt có đủ ngữ cảnh giúp Claude chỉ ra đúng chỗ sai thay vì viết lại một công thức hoàn toàn mới.

✅ measure_da_sua.daxSau khi sửa
1Doanh thu cùng kỳ = CALCULATE ( [Doanh thu], SAMEPERIODLASTYEAR ( Dim_Ngay[Date] ) )

NHÓM 4

Nhóm 4: Tối ưu measure chạy chậm

💬 prompt.txtGửi cho Claude
Measure sau chạy chậm (DAX Studio: Formula Engine chiếm phần lớn thời gian):
[dán công thức] Hãy viết lại để chạy nhanh hơn nhưng giữ nguyên kết quả.
Giải thích vì sao bản mới nhanh hơn, và viết một truy vấn EVALUATE
hiển thị measure cũ, measure mới và cột chênh lệch theo từng tháng.

Yêu cầu có cột chênh lệch giúp bạn chứng minh measure mới cho cùng kết quả trước khi thay thế. Xem thêm các mẫu tối ưu trong bài 6 cách tăng tốc Power BI.

NHÓM 5

Nhóm 5: Giải thích và viết tài liệu cho measure

💬 prompt.txtGửi cho Claude
Giải thích measure dưới đây cho người mới học DAX, từng dòng một:
[dán công thức] Sau đó viết một mô tả ngắn (dưới 200 ký tự) để dán vào ô Description
của measure trong Power BI.

Nhóm này đặc biệt hữu ích khi bạn tiếp nhận file Power BI của người khác, hoặc cần bàn giao mô hình cho đồng nghiệp.

Cách kiểm tra lại DAX do AI viết: 5 lớp kiểm tra

🧪 kiem_tra_measure.testTest runner
$ chạy 5 lớp kiểm tra cho measure mới…
5/5 lớp đạt → sẵn sàng đưa vào báo cáo

Một measure chạy được chưa chắc đã đúng. Trước khi đưa vào báo cáo, hãy cho nó đi qua 5 lớp kiểm tra theo thứ tự từ nhanh đến kỹ.

LỚP 1/5

Lớp 1: Đọc lại công thức

  • Mọi tên bảng, tên cột đều có trong mô hình của bạn.
  • Hàm thời gian dùng Dim_Ngay[Date], không dùng cột ngày của bảng Fact.
  • Các giả định Claude ghi kèm (ví dụ “doanh thu đã trừ giảm giá”) khớp với định nghĩa nghiệp vụ.

LỚP 2/5

Lớp 2: So với con số đã biết chắc chắn đúng

Chọn 1–2 kỳ bạn đã có số liệu đối chiếu từ Excel, SQL hoặc báo cáo kế toán, rồi so với kết quả của measure. Nếu lệch, dừng lại tìm nguyên nhân trước khi làm tiếp.

LỚP 3/5

Lớp 3: Kiểm tra bằng DAX query view

Trong Power BI Desktop, mở DAX query view và chạy truy vấn kiểm tra (chính là truy vấn EVALUATE bạn đã yêu cầu Claude viết kèm):

🧪 test_query.daxDAX query view
1EVALUATE
2SUMMARIZECOLUMNS (
3    Dim_Ngay[Nam],
4    Dim_Ngay[Thang],
5    "Doanh thu", [Doanh thu],
6    "Cùng kỳ", [Doanh thu cùng kỳ],
7    "YoY %", [Tăng trưởng YoY %]
8)
9ORDER BY Dim_Ngay[Nam], Dim_Ngay[Thang]

Nhìn vào bảng kết quả và kiểm tra: các tháng của năm đầu tiên phải có “Cùng kỳ” trống; “Cùng kỳ” của tháng 3/2026 phải bằng “Doanh thu” của tháng 3/2025; tính tay YoY % của một tháng bất kỳ để đối chiếu.

LỚP 4/5

Lớp 4: Kiểm tra trong nhiều ngữ cảnh lọc

  • Dòng tổng (Total): có đúng ý nghĩa bạn muốn không, hay chỉ là một con số “vô nghĩa”.
  • Nhiều cấp thời gian: xem theo năm, quý, tháng, ngày.
  • Slicer: chọn một cửa hàng, một nhóm hàng, hoặc nhiều lựa chọn cùng lúc.
  • Trường hợp biên: kỳ không có dữ liệu, mẫu số bằng 0, tháng hiện tại chưa kết thúc.

LỚP 5/5

Lớp 5: Kiểm tra hiệu năng

Chạy Performance Analyzer trên trang có measure mới. Nếu visual chậm hơn hẳn trước, dùng prompt Nhóm 4 để nhờ Claude tối ưu.

Những lỗi AI hay mắc khi viết DAX và cách phát hiện

🐞 BUG-01 Tự đặt tên bảng, cột không có trong mô hình

Dấu hiệu: Power BI báo lỗi khi tạo measure

Cách xử lý: Gửi bản mô tả mô hình, nhắc quy tắc “hỏi lại nếu thiếu”

🐞 BUG-02 Dùng cột ngày của bảng Fact trong hàm thời gian

Dấu hiệu: Cùng kỳ, YTD trống hoặc sai

Cách xử lý: Yêu cầu dùng Dim_Ngay[Date]

🐞 BUG-03 Nhầm ALL và ALLSELECTED

Dấu hiệu: Tỷ trọng % không đổi khi chọn slicer, hoặc đổi khi không nên đổi

Cách xử lý: Nói rõ “trên tổng đang được chọn” hay “trên tổng toàn bộ”

🐞 BUG-04 Dòng tổng không như mong đợi

Dấu hiệu: Total khác tổng các dòng hiển thị

Cách xử lý: Mô tả rõ dòng tổng cần tính thế nào trong prompt

🐞 BUG-05 So tháng chưa kết thúc với cả tháng năm trước

Dấu hiệu: Tăng trưởng âm bất thường ở tháng hiện tại

Cách xử lý: Nêu rõ ngày có dữ liệu mới nhất trong prompt

🐞 BUG-06 Sai tên hàm hoặc thứ tự tham số

Dấu hiệu: Thông báo lỗi cú pháp

Cách xử lý: Dán nguyên văn thông báo lỗi cho Claude sửa

🐞 BUG-07 Dùng FILTER trên cả bảng Fact

Dấu hiệu: Measure đúng nhưng chạy chậm

Cách xử lý: Yêu cầu lọc theo cột, kiểm tra bằng Performance Analyzer

Quy trình 5 bước viết DAX bằng Claude

1
Mô tả mô hình: chuẩn bị bản mô tả bảng, cột, quan hệ, measure đã có (lưu trong Project để dùng lại).
2
Gửi prompt kèm quy tắc: chọn nhóm prompt phù hợp, nêu rõ nghiệp vụ và trường hợp đặc biệt.
3
Nhận công thức và truy vấn kiểm tra: đọc phần giả định Claude ghi kèm.
4
Chạy 5 lớp kiểm tra: sửa ngay khi phát hiện sai, bằng cách gửi lại kết quả thực tế cho Claude.
5
Lưu lại: đặt tên measure nhất quán, điền Description, và lưu prompt hiệu quả vào thư viện của bạn.

📅 Muốn luyện DAX và cách dùng AI trên dữ liệu thực tế cùng giảng viên? Xem Lịch khai giảng tháng 10/2026 các khóa Power BI, SQL, Python, AI tại MCNA.

Câu hỏi thường gặp (FAQ)

?Không biết DAX có dùng Claude viết measure được không?

Được, nhưng bạn sẽ khó phát hiện khi kết quả sai. Hãy học song song các khái niệm nền tảng như ngữ cảnh lọc, CALCULATE, bảng ngày, và dùng prompt Nhóm 5 để nhờ Claude giải thích từng công thức.

?Có cần gửi file .pbix hoặc dữ liệu thật cho Claude không?

Không cần. Bản mô tả mô hình (tên bảng, cột, quan hệ) là đủ để viết DAX. Cách này vừa an toàn cho dữ liệu, vừa giúp câu trả lời tập trung hơn.

?Vì sao cùng một prompt mà mỗi lần Claude viết hơi khác nhau?

AI có thể đưa ra nhiều cách viết cùng cho một kết quả. Điều quan trọng là measure qua được 5 lớp kiểm tra. Bộ quy tắc viết DAX trong prompt khung giúp các câu trả lời nhất quán hơn.

?Claude có thay được việc học DAX không?

Không. Claude giúp bạn viết nhanh hơn và học nhanh hơn, nhưng người chịu trách nhiệm về con số trên báo cáo vẫn là bạn. Hiểu DAX chính là điều kiện để kiểm tra được AI.

Kết luận

Viết DAX bằng Claude hiệu quả nhất khi bạn xem AI như một đồng nghiệp viết nhanh nhưng chưa biết mô hình của bạn: mô tả mô hình rõ ràng, đặt quy tắc viết DAX, dùng prompt đúng nhóm việc, và luôn kiểm tra qua 5 lớp trước khi đưa measure vào báo cáo. Làm đúng quy trình này, bạn vừa tiết kiệm thời gian, vừa hiểu DAX sâu hơn sau mỗi lần làm việc với AI. Hãy bắt đầu bằng việc viết bản mô tả mô hình cho file Power BI bạn đang làm ngay hôm nay.

Nếu bạn muốn học DAX bài bản và biết cách kết hợp AI vào quy trình phân tích, khóa học Power BI tại MCNA Technology School sẽ đồng hành cùng bạn. Đọc thêm: Claude là gì? Cách Data Analyst dùng Claude để phân tích dữ liệu nhanh hơn.

👉 Xem lịch khai giảng tháng 10/2026: Power BI, SQL, Python, AI – MCNA

Thông tin tác giả

Võ Ngọc Vương – Data Analyst tại MCNA Technology School

MCNA Technology School – Đơn vị tiên phong đào tạo AI, Big Data, Business Intelligence tại Việt Nam. Chuyên sâu về Power BI, Python, SQL và Data Analytics — đối tác đào tạo của 300+ doanh nghiệp.

Đối tác đào tạo: Viettel Global, Masan Group, Techcombank, VPBank, Daikin.

→ Chỉ mục