DAX Trong Power BI: Từ Measures Cơ Bản Đến Tính Toán Nâng Cao
Chia sẻ
"Hướng dẫn DAX (Data Analysis Expressions) từ cơ bản đến nâng cao. CALCULATE, FILTER, ALL, RELATED, Time Intelligence functions và các pattern DAX phổ biến."
1. DAX Là Gì? Tại Sao Phải Học?
DAX (Data Analysis Expressions) là ngôn ngữ công thức của Power BI, Power Pivot, và SSAS Tabular. Nếu Power BI là con dao thì DAX là lưỡi dao — không có DAX, dashboard chỉ là bảng số tĩnh. Với DAX, bạn tạo measures tính toán phức tạp: YTD, growth rate, running total, conditional aggregation.
DAX giống Excel formula nhưng mạnh hơn nhiều. Thay vì tính trên cell, DAX tính trên toàn bộ DATA MODEL — hàng triệu dòng dữ liệu từ nhiều bảng, có filtering context tự động.
2. Measures Cơ Bản: SUM, COUNT, AVERAGE
Measures là công thức DAX trả về 1 giá trị duy nhất, tự động recalculate theo filter context. Khi user click slicer hoặc drill down, measure tự tính lại cho context mới.
Total Revenue = SUM(Sales[Amount])
Order Count = COUNTROWS(Sales)
Avg Order Value = DIVIDE([Total Revenue], [Order Count], 0)
Distinct Customers = DISTINCTCOUNT(Sales[CustomerID])3. CALCULATE — Hàm Mạnh Nhất Của DAX
CALCULATE thay đổi filter context của expression. Đây là hàm quan trọng nhất — 70% measures nâng cao đều dùng CALCULATE. Nó cho phép: tính toán với điều kiện khác context hiện tại, so sánh actual vs target, tính % contribution.
-- Revenue chỉ cho category Electronics
Electronics Revenue =
CALCULATE([Total Revenue], Products[Category] = "Electronics")
-- Revenue năm trước (dù slicer đang chọn năm nay)
PY Revenue =
CALCULATE([Total Revenue], SAMEPERIODLASTYEAR(Calendar[Date]))
-- % of Total (bỏ qua filter hiện tại)
% of Total =
DIVIDE([Total Revenue], CALCULATE([Total Revenue], ALL(Products)))4. Time Intelligence: YTD, QTD, MTD
DAX có sẵn functions tính Year-to-Date, Quarter-to-Date, Month-to-Date. Yêu cầu: phải có Calendar table đầy đủ (mỗi ngày 1 dòng) và relationship với fact table.
Revenue YTD = TOTALYTD([Total Revenue], Calendar[Date])
Revenue QTD = TOTALQTD([Total Revenue], Calendar[Date])
Revenue MTD = TOTALMTD([Total Revenue], Calendar[Date])
-- So sánh YTD năm nay vs năm trước
YoY Growth =
VAR ThisYear = [Revenue YTD]
VAR LastYear = CALCULATE([Revenue YTD], SAMEPERIODLASTYEAR(Calendar[Date]))
RETURN DIVIDE(ThisYear - LastYear, LastYear)5. Context Transition Và Row Context
DAX có 2 loại context: Filter Context (từ slicers, filters) và Row Context (trong Calculated Columns, iterators). CALCULATE biến Row Context thành Filter Context — đây gọi là Context Transition. Hiểu đúng context là chìa khóa master DAX.
Iterator functions (SUMX, AVERAGEX, MAXX) tạo row context — chạy expression từng dòng rồi aggregate. VD: SUMX(Sales, Sales[Qty] * Sales[Price]) nhân Qty × Price từng dòng rồi cộng tổng.
6. Variables (VAR) — DAX Sạch Và Nhanh
VAR/RETURN giúp code DAX dễ đọc và nhanh hơn (tính 1 lần, dùng nhiều lần). Luôn dùng VAR cho measures phức tạp thay vì lặp lại expression.
Profit Margin =
VAR TotalRevenue = [Total Revenue]
VAR TotalCost = SUM(Sales[Cost])
VAR Profit = TotalRevenue - TotalCost
RETURN
IF(TotalRevenue = 0, BLANK(),
DIVIDE(Profit, TotalRevenue)
)7. Lỗi DAX Thường Gặp
1) Circular dependency: measure tham chiếu chính nó. 2) Missing Calendar table → Time Intelligence lỗi. 3) DIVIDE chia cho 0 → dùng DIVIDE(a, b, 0) thay vì a/b. 4) Nhầm SUM vs SUMX. 5) Quên ALL() trong % contribution → % luôn = 100%.
8. Kết Luận
DAX là skill bắt buộc cho Power BI developer. Master 4 concepts: Measures cơ bản → CALCULATE + filter modification → Time Intelligence → Context transition. Luyện tập với data thực tế và DAX Studio để debug. Sau 2-3 tháng thực hành, bạn sẽ tự tin viết measures cho bất kỳ yêu cầu nào.
Bình luận
Đăng nhập để tham gia bình luận
Đăng nhậpNhận bài viết mới nhất
Đăng ký để nhận thông báo khi có bài viết mới. Không spam, chỉ kiến thức chất lượng.
Bài viết liên quan
Khám phá thêm các bài viết cùng chủ đề

DAX Từ Cơ Bản Đến Nâng Cao: CALCULATE, Time Intelligence Và Copilot
Hướng dẫn DAX Power BI toàn diện: từ khái niệm filter context, hàm CALCULATE + ALL/ALLEXCEPT, đến Time Intelligence (YTD, MTD, YoY). Cập nhật TABLEOF/NAMEOF mới nhất và cách dùng Copilot tạo DAX tự động.

