Filter context vs Row context
Ngữ cảnh tính toán (evaluation context) là khái niệm khó nhất nhưng quan trọng nhất của DAX. Cùng một measure cho kết quả khác nhau tùy ngữ cảnh — hiểu điều này là ranh giới giữa “dùng được” và “thật sự giỏi” DAX.
Filter context (ngữ cảnh lọc)
Phần tiêu đề “Filter context (ngữ cảnh lọc)”- Là tập hợp bộ lọc đang áp lên model tại điểm tính: từ visual (hàng/cột), slicer, filter pane, và CALCULATE.
- Quyết định measure “nhìn thấy” dữ liệu nào.
Ví dụ: measure Total Sales = SUM(Sales[Amount]) đặt trong bảng có cột “Năm”:
- Ở hàng 2024 → filter context =
Year=2024→ chỉ tính doanh thu 2024. - Ở hàng 2025 → filter context =
Year=2025. - Ở dòng Total → không lọc năm → tính tất cả.
→ Measure tự thích nghi theo nơi nó hiển thị, nhờ filter context.
Row context (ngữ cảnh hàng)
Phần tiêu đề “Row context (ngữ cảnh hàng)”- Là khái niệm “hàng hiện tại” — tồn tại trong calculated column và bên trong iterators (SUMX…).
- Cho phép biểu thức tham chiếu giá trị của từng hàng.
-- Row context: SUMX duyệt từng hàng SalesTotal = SUMX ( Sales, Sales[Quantity] * Sales[Price] )Tại mỗi hàng, Sales[Quantity] và Sales[Price] là giá trị của hàng đó.
Khác biệt then chốt
Phần tiêu đề “Khác biệt then chốt”| Filter context | Row context | |
|---|---|---|
| ”Câu hỏi” | Đang lọc dữ liệu nào? | Đang ở hàng nào? |
| Có ở đâu | Measure, visual, CALCULATE | Calculated column, iterators |
| Tự cộng dồn? | Có (lọc kết hợp) | Không tự thành filter |
Context transition — cầu nối
Phần tiêu đề “Context transition — cầu nối”- Row context KHÔNG tự động lọc model. Để biến “hàng hiện tại” thành bộ lọc, cần CALCULATE — gọi là context transition.
- Đây là lý do gọi measure bên trong iterator thường cần hiểu CALCULATE ngầm.