Hàm tổng hợp & iterators
DAX có hai họ hàm tổng hợp: hàm đơn (SUM, AVERAGE…) và hàm iterator (SUMX, AVERAGEX… — đuôi X). Hiểu khác biệt giúp viết measure đúng khi cần tính theo từng hàng.
Hàm đơn (SUM, AVERAGE…)
Phần tiêu đề “Hàm đơn (SUM, AVERAGE…)”- Tổng hợp một cột đã có sẵn giá trị.
Total Amount = SUM ( Sales[Amount] )Iterators (SUMX, AVERAGEX…)
Phần tiêu đề “Iterators (SUMX, AVERAGEX…)”- Duyệt từng hàng của một bảng, tính một biểu thức cho mỗi hàng, rồi tổng hợp.
- Tạo row context → biểu thức tham chiếu được nhiều cột.
-- Tính thành tiền từng dòng rồi cộng — không cần calculated columnTotal Sales = SUMX ( Sales, Sales[Quantity] * Sales[Unit Price])SUMX duyệt từng hàng Sales, nhân Quantity * Unit Price, rồi cộng tất cả.
Khi nào dùng iterator
Phần tiêu đề “Khi nào dùng iterator”| Tình huống | Dùng |
|---|---|
| Cộng một cột có sẵn | SUM |
| Cần tính theo từng hàng rồi tổng hợp (nhân, điều kiện) | SUMX |
| Trung bình theo hàng | AVERAGEX |
| Đếm có điều kiện theo hàng | COUNTX/SUMX với IF |
Iterator + measure = context transition
Phần tiêu đề “Iterator + measure = context transition”-- Doanh thu trung bình mỗi khách hàngAvg Sales per Customer =AVERAGEX ( VALUES ( Customer[CustomerKey] ), [Total Sales])AVERAGEX duyệt từng khách, gọi measure [Total Sales] (có context transition ngầm → tính đúng cho từng khách), rồi trung bình.