Measure Vs Calculated Column Trong Power BI: Sự Khác Biệt Cốt Lõi Mọi Data Analyst Cần Nắm

30ab8d07-f505-4a33-bfb6-7a69b2120703

Khi học và làm việc thực tế với ngôn ngữ DAX trong Power BI, có đến 80% người mới bắt đầu rơi vào “bẫy” lạm dụng Calculated Column. Hệ quả là file báo cáo dung lượng phình to hàng trăm MB, mỗi lần mở hay thao tác lọc dữ liệu đều bị đơ lag.

Việc hiểu sai bản chất giữa MeasureCalculated Column không chỉ ảnh hưởng đến tốc độ hiển thị mà còn trực tiếp gây ra sai lệch số liệu quản trị. Hãy cùng MCNA Technology School mổ xẻ toàn diện từ kiến trúc kỹ thuật đến bài toán ứng dụng thực tế của 2 khái niệm này.

1. Bản Chất Kỹ Thuật: Dữ Liệu Được Lưu Trữ & Tính Toán Như Thế Nào?

Để biết khi nào nên dùng công cụ nào, trước tiên chúng ta cần hiểu cách bộ máy nén & xử lý dữ liệu VertiPaq Engine của Power BI vận hành đối với từng loại.

+-----------------------------------------------------------------------------------+
|                            BỘ MÁY XỬ LÝ VERTIPAQ ENGINE                            |
+-----------------------------------------------------------------------------------+
|  [Calculated Column] ──> Tính toán khi Refresh ──> Ghi vào RAM / Ổ đĩa (Tốn RAM) |
|  [Measure]           ──> Tính toán khi tương tác ──> Dùng CPU xử lý (Tốn CPU)     |
+-----------------------------------------------------------------------------------+

A. Calculated Column (Cột tính toán)

  • Thời điểm tính toán: Được tính ngay trong quá trình Refresh dữ liệu (Data Load/Refresh).

  • Cơ chế lưu trữ: Giá trị của từng dòng được tính ra và lưu trữ vật lý trực tiếp vào bộ nhớ RAM cũng như file .pbix trên ổ đĩa.

  • Bối cảnh tính toán: Vận hành dựa trên Row Context (Bối cảnh dòng). Nó duyệt qua từng dòng một của bảng để thực thi công thức.

B. Measure (Độ đo)

  • Thời điểm tính toán: Không tính trước. Nó chỉ được kích hoạt tính toán tại thời điểm người dùng click chuột tương tác trên Dashboard (chọn Slicer, di chuột vào biểu đồ).

  • Cơ chế lưu trữ: Không chiếm dung lượng file. Kết quả chỉ tồn tại tạm thời trong bộ nhớ đệm (Cache) để hiển thị trên màn hình.

  • Bối cảnh tính toán: Vận hành dựa trên Filter Context (Bối cảnh lọc). Nó tính toán dựa trên tập dữ liệu đã bị thu hẹp bởi các bộ lọc trên báo cáo.

2. Bảng So Sánh Toàn Diện: Measure Vs Calculated Column

Tiêu chí Calculated Column (Cột tính toán) Measure (Độ đo)
Bản chất Là một cột thực sự thêm vào bảng (xuất hiện ở Data View). Là một công thức ảo, không thêm cột vào dữ liệu thô.
Bối cảnh mặc định Row Context (Xử lý dòng-theo-dòng). Filter Context (Xử lý trên tập dữ liệu đã lọc).
Tác động đến Storage Tăng dung lượng file .pbix và tiêu tốn bộ nhớ RAM. Không làm tăng dung lượng file, tiết kiệm dung lượng đĩa.
Tác động đến Performance Tốn thời gian khi Refresh dữ liệu. Tốn tài nguyên CPU khi người dùng thao tác lọc/click.
Vị trí thả vào Biểu đồ Thả được vào: Trục (Axis), Slicer, Legend, Tooltip. Chỉ thả vào vùng Giá trị (Values / Tooltips).
Độ linh hoạt Cố định (Static): Giá trị từng dòng không đổi theo Slicer. Động (Dynamic): Số liệu biến đổi tức thì theo bối cảnh lọc.

3. Phân Tích Chuyên Sâu Qua Ví Dụ Code DAX Thực Tế

Để thấy rõ sự khác biệt, hãy xét một bảng dữ liệu Bán Hàng (Sales) gồm 3 cột: Quantity (Số lượng), UnitPrice (Đơn giá) và Discount (Mức chiết khấu).

Trường hợp 1: Tạo Calculated Column tính Doanh thu từng dòng

Bạn muốn tạo một cột LineTotal để lưu doanh thu từng đơn hàng:

Đoạn mã

// Công thức tạo Calculated Column
LineTotal = Sales[Quantity] * Sales[UnitPrice] * (1 - Sales[Discount])
  • Cách hoạt động: Power BI chạy từ dòng 1 đến dòng cuối cùng (ví dụ 5 triệu dòng), nhân 3 giá trị lại và lưu 5 triệu kết quả đó vào ổ cứng.

  • Nhược điểm: Dung lượng file tăng thêm đáng kể chỉ để chứa 1 cột số.

Trường hợp 2: Tạo Measure tính Tổng doanh thu toàn hệ thống

Thay vì tạo cột LineTotal rồi dùng hàm SUM, các chuyên gia khuyến nghị tạo trực tiếp 1 Measure sử dụng hàm lặp SUMX:

Đoạn mã

// Công thức tạo Measure
Total Revenue = 
SUMX(
    Sales,
    Sales[Quantity] * Sales[UnitPrice] * (1 - Sales[Discount])
)
  • Cách hoạt động: File báo cáo không tăng thêm 1 KB nào. Khi bạn chọn xem “Năm 2026”, Measure này mới quét qua các dòng thuộc năm 2026, nhân và cộng dồn lại để trả ra 1 con số duy nhất trên thẻ Card.

4. Hướng Dẫn Quyết Định: Khi Nào Dùng Cái Nào?

Để không bao giờ phải phân vân, bạn hãy áp dụng sơ đồ tư duy quyết định chuẩn doanh nghiệp dưới đây:

                          [ BẠN CẦN TÍNH TOÁN MỘT CHỈ SỐ? ]
                                          │
                   ┌──────────────────────┴──────────────────────┐
                   ▼                                             ▼
     Chỉ số này có dùng để làm:                     Chỉ số này dùng để tính:
   - Trục biểu đồ (Axis/Legend)?                  - Tổng số, Trung bình, Tỷ lệ %?
   - Cột để lọc bài (Slicer)?                     - Số liệu thay đổi theo Slicer?
   - Tạo liên kết (Relationship)?                                │
                   │                                             │
                   YES                                          YES
                   │                                             │
                   ▼                                             ▼
        [ CALCULATED COLUMN ]                                [ MEASURE ]

Các trường hợp BẮT BỘC dùng Calculated Column:

  1. Phân loại thuộc tính (Data Categorization):

    • Ví dụ: Tạo cột Age Group dựa vào cột tuổi: IF(Customer[Age] < 30, "Under 30", "30+"). Cột này bắt buộc phải nằm trên thanh lọc Slicer.

  2. Kỹ thuật ghép khóa (Composite Keys):

    • Khi nối 2 bảng mà cần kết hợp 2 cột Mã Chi Nhánh + Mã Sản Phẩm thành 1 khóa duy nhất để tạo Relationship.

  3. Phân tích lát cắt theo dòng cố định (Row-level slicing):

    • Ví dụ: Xác định đơn hàng này là “Đơn sỉ” hay “Đơn lẻ” ngay tại thời điểm bán.

Các trường hợp BẮT BỘC dùng Measure:

  1. Tất cả các con số báo cáo tổng hợp (Aggregated Metrics): Tổng doanh thu, Lợi nhuận gộp, Số lượng khách hàng mua lại, Chi phí trung bình.

  2. Chỉ số so sánh theo Thời gian (Time Intelligence):

    • Ví dụ: Tính % Tăng trưởng doanh thu so với tháng trước (MoM%), Doanh thu tích lũy từ đầu năm (YTD).

  3. Tính toán tỷ lệ % trên tổng thể (Ratio & Percentage):

    • Ví dụ: Tỷ lệ đóng góp doanh thu = [Doanh Thu Chi Nhánh] / [Tổng Doanh Thu Toàn Quốc]. Điều này Calculated Column không bao giờ làm chính xác được do không có tính năng tổng hợp động theo bối cảnh.

5. Mẹo Tối Ưu Tốc Độ Báo Cáo Tại MCNA Technology School

Tại các khóa đào tạo Phân tích Dữ liệu thực chiến của MCNA Technology School, học viên được rèn luyện tư duy tối ưu hệ thống từ những bài học đầu tiên:

💡 Quy Tắc Vàng: “Nếu một bài toán có thể giải quyết bằng Power Query hoặc Measure, tuyệt đối KHÔNG tạo Calculated Column bằng DAX.”

3 Lời khuyên giúp tối ưu hóa Power BI:

  1. Đẩy việc tính toán dòng về Power Query hoặc SQL: Nếu bắt buộc phải tạo thêm cột (Calculated Column), hãy tạo nó ngay từ bước ETL trong Power Query hoặc câu lệnh SQL Server. Bộ máy Power Query nén cột tốt hơn nhiều so với việc tạo bằng DAX trên Power BI Desktop.

  2. Chuyển đổi Calculated Column thành Measure bằng các hàm X (SUMX, AVERAGEX, COUNTX): Giúp giải phóng hoàn toàn bộ nhớ RAM.

  3. Xóa các cột không sử dụng (Remove Unused Columns): Loại bỏ các cột Calculated Column thừa trước khi Publish báo cáo lên Power BI Service.

 

Tác giả: Lương Hữu Duy – Data Analyst tại MCNA Technology School
📞 Hotline: 0939.866.825 (Mr. Minh Khang)
🌐 Website: mcna.vn
📍 Hà Nội: 30 Trung Liệt, Đống Đa | Liền kề 44B TT2 Văn Quán, Hà Đông
📍TP.HCM: 50B Phan Tây Hồ, Cầu Kiệu
Chỉ mục