Bỏ qua để đến nội dung

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.

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.
-- Doanh thu chỉ của sản phẩm nhóm "A", bất kể slicer nhóm
Sales 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).

-- % 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).
  • KEEPFILTERS giữ thêm bộ lọc thay vì ghi đè.
  • 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.
-- Tính theo ShipDate (quan hệ inactive) thay vì OrderDate
Sales 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.

Chia sẻ: