CALCULATE — hàm cốt lõi
CALCULATE là hàm quan trọng nhất trong DAX — nó thay đổi filter context trước khi tính một biểu thức. Hầu hết DAX nâng cao đều xoay quanh CALCULATE.
Cú pháp
Phần tiêu đề “Cú pháp”CALCULATE ( <biểu thức>, <điều kiện lọc 1>, <điều kiện lọc 2>, ... )- Tính
<biểu thức>(thường là một measure) sau khi áp/sửa các điều kiện lọc. - Các bộ lọc ghi đè filter context hiện tại cho cột tương ứng.
Ví dụ cơ bản
Phần tiêu đề “Ví dụ cơ bản”-- Doanh thu chỉ của sản phẩm nhóm "A", bất kể slicer nhómSales Group A =CALCULATE ( [Total Sales], Product[Group] = "A")Dù người dùng đang lọc nhóm khác, measure này luôn tính nhóm A (CALCULATE ghi đè bộ lọc cột Group).
Bỏ/giữ bộ lọc với ALL, KEEPFILTERS
Phần tiêu đề “Bỏ/giữ bộ lọc với ALL, KEEPFILTERS”-- % trên tổng: bỏ bộ lọc để lấy mẫu số là TỔNG% of Total =DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], ALL ( Product ) ))ALL(Product)bỏ mọi bộ lọc trên bảng Product → mẫu số là tổng toàn bộ (table functions).KEEPFILTERSgiữ thêm bộ lọc thay vì ghi đè.
Context transition
Phần tiêu đề “Context transition”- Khi gọi measure bên trong iterator hoặc calculated column, có một CALCULATE ngầm biến row context → filter context.
- Đây là “ma thuật” khiến measure tính đúng theo từng hàng — nhưng cũng là nguồn gây nhầm lẫn.
USERELATIONSHIP
Phần tiêu đề “USERELATIONSHIP”-- Tính theo ShipDate (quan hệ inactive) thay vì OrderDateSales by Ship Date =CALCULATE ( [Total Sales], USERELATIONSHIP ( Sales[ShipDate], 'Date'[Date] ))Kích hoạt tạm một quan hệ inactive trong phạm vi CALCULATE.