Mục lục
Rolling Average là gì?
Rolling Average – trung bình động, là một chỉ số dùng để tính toán xu hướng của dữ liệu chạy trong một khoảng thời gian ngắn (tuần, tháng,…). Chỉ số này đặc biệt hữu ích trong trường hợp dữ liệu thay đổi lên xuống quá nhanh khiến việc xác định xu hướng chung qua thời gian khó có thể thực hiện được.Rolling Average sẽ sử dụng một phần nhỏ của dữ liệu trong một khoảng thời gian được định trước, ví dụ như: 1 tuần hay 30 ngày, và tính toán giá trị trung bình của dữ liệu trong khoảng thời gian đó. Các mốc thời gian sẽ tiếp tục di chuyển, tạo ra khoảng thời gian mới và Rolling Average sẽ được tính toán lại.Ứng dụng của Rolling Average
Chỉ số Rolling Average giúp doanh nghiệp tìm ra được xu hướng dài hạn bỏ qua sự biến động liên tục của dữ liệu. Ví dụ, một doanh nghiệp bán đá lạnh sẽ nhận thấy nhu cầu tăng lên trong những ngày nắng nóng. Nhưng nếu thời tiết tại khu vực doanh nghiệp hoạt động thay đổi liên tục thì rất khó để xác định được xu hướng nhu cầu về lâu dài. Tính toán chỉ số Rolling Average sẽ cho phép doanh nghiệp tìm ra được xu hướng trong từng khoảng thời gian xác định, từ đó tìm ra được yếu tố ảnh hưởng đến xu hướng đó và ra quyết định chính xác về mục tiêu kinh doanh.Cách tính toán Rolling Average
Công thức chung để tính toán chỉ số Trung bình động như sau:
- Sum of data overtime : Tổng giá trị dữ liệu trong khoảng thời gian được thiết lập
- Time period : Khoảng thời gian được thiết lập
Áp dụng tính toán chỉ số Rolling Average bằng DAX trong Power BI
Bộ dữ liệu được sử dụng trong bài viết này được lấy từ Adventure Works DW 2020 Power BI Desktop Sample
Chúng ta sẽ sử dụng bảng Sales để làm ví dụ tính toán chỉ số Rolling Average cho Doanh số

Dữ liệu doanh số theo từng ngày
Các hàm chúng ta sẽ sử dụng:1. Hàm CALCULATEHàm CALCULATE trả về kết quả được tính toán lại từ 1 biểu thức khi kết hợp thêm các bộ lọc.
- Cấu trúc: CALCULATE( Expression, [Filter1], [Filter2]…)
- Expression là biểu thức tính toán
- Filter1, Filter2,… là điều kiện lọc, điều kiện để tính toán biểu thức
Hàm SUM trả về giá trị tổng các số trong 1 cột.
- Cấu trúc: SUM( ColumnName )
- ColumnName là cột chứa dữ liệu cần tính tổng
Hàm DATESINPERIOD giúp trả về những giá trị thời gian nằm trong 1 khoảng tính từ Ngày bắt đầu tới Ngày cách ngày bắt đầu 1 khoảng nhất định.
- Cấu trúc: DATESINPERIOD( Dates, StartDate, NumberOfIntervals, Interval )
- Dates là cột chứa dữ liệu ngày tháng
- StartDate là ngày làm mốc, ngày bắt đầu khoảng thời gian
- NumberOfIntervals là khoảng cách so với ngày làm mốc dựa trên đơn vị thời gian
- Interval là đơn vị thời gian:
- YEAR
- QUARTER
- MONTH
- DAY
Hàm LASTDATE giúp trả về giá trị ngày lớn nhất (ngày cuối cùng, ngày kết thúc) trong số các ngày được xét đến.
- Cấu trúc: LASTDATE( Dates )
- Dates là cột chứa dữ liệu ngày tháng
Hàm DISTINCTCOUNT trả về số giá trị riêng biệt trong một cột dữ liệu.Cấu trúc: DISTINCTCOUNT( ColumnName )Trong đó:
- ColumnName là cột chứa dữ liệu cần trả về số giá trị riêng biệt

- Biến totalSum tính tổng giá trị Sales Amount trong khoảng thời gian 3 tháng tính tới một thời điểm cụ thể.
Ví dụ: Giá trị của totalSum cho tháng 8 = tổng 3 tháng trước đó cộng lại (tháng 5, tháng 6, tháng 7)
- Biến countMonth tính số tháng có trong khoảng thời gian tính tới một thời điểm cụ thể. Ở đây là 3 tháng.
- Measure 3-month Rolling Average trả về giá trị của phép chia giữa biến totalSum và countMonth.
