Làm Chủ Công Thức DAX: Sức Mạnh Của Biến (VAR)
6/2/2025
Làm Chủ Công Thức DAX: Sức Mạnh Của Biến (VAR)
Khi làm việc với Power BI, việc xây dựng các phép tính DAX phức tạp là điều không thể tránh khỏi. Tuy nhiên, những công thức dài dòng có thể trở nên khó đọc, khó bảo trì và ảnh hưởng đến hiệu suất. Đây là lúc biến (VAR) trong DAX phát huy vai trò như một công cụ đắc lực, giúp bạn tổ chức và tối ưu hóa code của mình.
1. Khai Báo Biến (VAR) trong DAX: Khái Niệm Cơ Bản
Trong DAX, VAR không phải là một hàm tính toán mà là một từ khóa cho phép bạn khai báo một biến và "gán" cho nó kết quả của một biểu thức. Giá trị này sau đó có thể được tái sử dụng nhiều lần trong phần còn lại của công thức. Cấu trúc điển hình thường đi kèm với RETURN để chỉ định kết quả cuối cùng:
VAR tên_biến_1 = biểu_thức_1
VAR tên_biến_2 = biểu_thức_2
…
RETURN
Biểu_thức_trả_về
RETURN đánh dấu phần cuối của việc khai báo biến và bắt đầu phần tính toán kết quả cuối cùng dựa trên các biến đã được gán giá trị.
2. Giải Quyết Bài Toán Thực Tế: Phân Tích Tỷ Lệ Tăng Trưởng Doanh Thu YoY (Year-over-Year)
Hãy cùng nhìn vào 1 bài toán ví dụ về tính toán tỷ lệ tăng trưởng doanh thu so với cùng kỳ năm trước – một chỉ số then chốt để đánh giá hiệu suất kinh doanh.
Dữ liệu đầu vào:
Bảng Sales với cột [RevenueAmount].
Bảng Date (bảng ngày chuẩn) liên kết với Sales.
Measure cơ sở: Total Revenue = SUM(Sales[RevenueAmount]).
Bước 1: "Bóc tách" logic tính toán
Để tính tỷ lệ tăng trưởng YoY, chúng ta cần các thành phần chính:
Doanh thu kỳ hiện tại: Giá trị doanh thu trong ngữ cảnh filter hiện tại (ví dụ: tháng/quý/năm đang được xem).
Doanh thu cùng kỳ năm trước: Giá trị doanh thu của kỳ tương ứng ở năm liền kề trước đó.
Tính toán tỷ lệ: Dựa trên hai giá trị trên.
Bước 2: "Gán" các thành phần logic vào biến (VAR) – Xây dựng công thức
Bây giờ, chúng ta sẽ sử dụng VAR để lưu trữ kết quả của từng bước logic, giúp công thức trở nên mạch lạc:
Lưu trữ Doanh thu kỳ hiện tại:
Mặc dù [Total Revenue] đã là một measure, việc gán nó vào một biến giúp công thức nhất quán và dễ đọc hơn khi có nhiều thành phần.
VAR CurrentRevenue = [Revenue]- Lưu trữ Doanh thu cùng kỳ năm trước:
Đây là một phép tính phức tạp hơn, sử dụng CALCULATE để thay đổi ngữ cảnh filter và SAMEPERIODLASTYEAR để lùi về một năm.
VAR RevenueLastYear = CALCULATE([Revenue], SAMEPERIODLASTYEAR(dim_date[Date])) Lợi ích ngay lập tức: Phép tính này, có thể tốn tài nguyên, sẽ chỉ được thực thi một lần và kết quả được lưu vào PreviousYearRevenue.
Bước 3: Tính toán kết quả cuối cùng với RETURN, sử dụng các biến đã "gán"
Sau khi đã có các "mảnh ghép" cần thiết dưới dạng biến, việc tính toán kết quả cuối cùng trở nên đơn giản và dễ hiểu:
Công thức YoY Revenue Growth % hoàn chỉnh sử dụng VAR
Tại Sao Cách Tiếp Cận Này Lại Hiệu Quả?
Việc sử dụng VAR trong ví dụ trên mang lại nhiều lợi ích rõ rệt:
Tính dễ đọc (Readability) được nâng cao: Công thức được chia thành các bước logic, rõ ràng. CurrentRevenue và PreviousYearRevenue mang ý nghĩa tường minh, giúp bất kỳ ai (kể cả bạn trong tương lai) cũng dễ dàng nắm bắt luồng tính toán.
Hiệu suất (Performance) được tối ưu: Phép tính CALCULATE([Total Revenue], SAMEPERIODLASTYEAR('Date'[Date])) chỉ được thực hiện một lần. Nếu không dùng VAR, bạn sẽ phải lặp lại phép tính này, làm tăng thời gian xử lý, đặc biệt với dữ liệu lớn.
So sánh nhanh:
Công thức YoY Revenue Growth % hoàn chỉnh không sử dụng VAR
Khả năng bảo trì (Maintainability) dễ dàng hơn: Nếu cần thay đổi logic tính doanh thu năm trước (ví dụ, sử dụng DATEADD thay vì SAMEPERIODLASTYEAR), bạn chỉ cần cập nhật định nghĩa của biến PreviousYearRevenue mà không ảnh hưởng đến cấu trúc tổng thể của công thức.
Gỡ lỗi (Debugging) hiệu quả hơn: Khi công thức phức tạp, bạn có thể tạm thời thay đổi phần RETURN để trả về giá trị của từng biến (RETURN CurrentRevenue hoặc RETURN PreviousYearRevenue). Điều này giúp cô lập và kiểm tra xem từng bước trung gian có đang hoạt động chính xác hay không.
Những Điểm Cần Lưu Ý
Phạm vi hoạt động (Scope): Biến VAR chỉ có giá trị trong measure, cột tính toán, hoặc bảng tính toán nơi nó được khai báo.
Tính bất biến (Immutability): Một khi giá trị đã được "gán" cho VAR, nó không thể thay đổi trong phạm vi đó.
Đặt tên biến: Hãy chọn những cái tên mang tính mô tả, dễ hiểu.
Kết Luận: Biến (VAR) Là Người Bạn Đồng Hành Đáng Tin Cậy
Thông qua ví dụ phân tích tỷ lệ tăng trưởng doanh thu YoY, chúng ta có thể thấy rằng VAR không chỉ là một cú pháp. Đó là một phương pháp tư duy giúp bạn cấu trúc các phép tính DAX một cách logic và hiệu quả. Bằng cách "gán" các giá trị hoặc các phép tính trung gian vào biến, bạn không chỉ làm cho công thức của mình dễ đọc và dễ bảo trì hơn mà còn tối ưu hóa hiệu suất cho báo cáo Power BI. Hãy coi VAR như một công cụ thiết yếu trong bộ kỹ năng DAX của bạn.
Tài liệu tham khảo: