Trong Power BI, có rất nhiều hàm DAX thời gian (ví dụ như: DATEADD, DATEBETWEEN, DATESYTD, DATESQTD, DATESMTD…) hay còn gọi là hàm DAX Time Intelligence, mỗi hàm phục vụ cho một mục đích hay một bài toán cụ thể. Trong đó, hàm DATESINPERIOD là hàm vô cùng hữu dụng sẽ giúp chúng ta lấy được một khoảng ngày bắt đầu từ ngày nhất định tới ngày cách ngày đó một khoảng nhất định.
Trong bài viết này, Datapot sẽ giới thiệu tới các bạn cách sử dụng hàm DATESINPERIOD trong POWER BI và đi qua hai ví dụ cụ thể là:
- Tính lũy kế trong N kỳ gần nhất
- Tạo biểu đồ thể hiện giá trị của N kỳ gần nhất
Với hai ví dụ này, các bạn sẽ hiểu rõ hơn về ứng dụng của hàm này. Ngoài ra, việc nắm rõ mục đích, cú pháp và cách hoạt động của hàm DATESINPERIOD sẽ giúp các bạn nâng cao khả năng viết DAX, áp dụng trực tiếp vào công việc thực tế và nâng cao hiệu quả công việc.
Mục lục
Mục đích sử dụng hàm DATESINPERIOD
Hàm DATESINPERIOD là hàm dùng để lấy các giá trị thời gian (tùy vào đơn vị thời gian) trong khoảng thời gian đã cho.
Cú pháp của hàm DATESINPERIOD
DATESINPERIOD(<dates>, <start_date>, <number_of_intervals>, <interval>)
Giải thích:
| Tham số | Ý nghĩa |
<Cột DATE> | Truyền giá trị cột Date của bảng Date trong mô hình dữ liệu |
| <Ngày bắt đầu> | Ngày bắt đầu dải ngày muốn lấy ra. |
| <Số khoảng thời gian> | Số khoảng thời gian so với <ngày bắt đầu> dựa theo <Đơn vị thời gian>. |
<Đơn vị thời gian> | Đơn vị thời gian: khoảng thời gian mà ta muốn thay đổi. (Giá trị: Day, Month, Quarter, Year.) |
Giá trị trả về sử dụng hàm DATESINPERIOD
Kết quả trả về sẽ là một bảng gồm một cột của các giá trị ngày.
Ví dụ: Dùng hàm DATESINPERIOD để lấy bảng thời gian gồm 10 ngày từ ngày 01/01/2020 trở về sau.

(*Lưu ý: Hình ảnh dùng DAX query view để xem trước bảng.)
Lưu ý: Hàm DATEINSPERIOD thường được sử dụng tại phần điều kiện lọc cùng các hàm DAX tính toán như hàm CALCULATE.
Cách sử dụng hàm DATESINPERIOD
Những bài toàn mà chúng ta thường xuyên gặp với hàm DATESINPERIOD:
- Bài toán 1: Tính lũy kế doanh thu/lợi nhuận/chi phí …. của N tháng gần nhất.
- Bài toán 2: Tạo biểu đồ lấy ra doanh thu/lợi nhuận/chi phí… trong N tháng gần nhất.
Bài toán 1: Bài toán tính lũy kế lợi nhuận/doanh thu/chi phí của N tháng gần nhất.
Bài toán thực tế: Bạn được yêu cầu lũy kế tính doanh thu trong 3 tháng gần đây.
Data set gồm:
- Bảng Sales ghi nhận thông tin giao dịch.
- Bảng thời gian.

Bước 1: Tạo 1 measure trong Power BI với công thức DAX như sau:
Tổng doanh thu 3 tháng trước =
CALCULATE (
SUM ( Sales[Total Amount] ),
DATESINPERIOD ( 'Date'[date], MAX ( 'Date'[date] ), -3, MONTH )
)
Trong đó:
DATESINPERIOD ( ‘Date'[date], MAX (‘Date'[date]), -3, MONTH):
- Hàm DATESINPERIOD kết hợp với MAX (‘Date'[date]) sẽ giúp chúng ta xác định ngày bắt đầu là giá trị thời gian lớn nhất được chọn.
- Phần “ -3, MONTH” xác định khoảng thời gian cần lấy là 3 tháng trước so với ngày hiện tại.
SUM (Sales[Total Amount]): Biểu thức tính tổng doanh thu.
Khi kết hợp với hàm CALCULATE () sẽ tính được tổng doanh thu trong 3 tháng trước đó.
Bước 2: Tạo Table gồm :
- Cột tháng
- Doanh thu tháng hiện tại.
- Tổng doanh thu 3 tháng trước ( Measure vừa tạo).
Kết quả:

Như ta có thể thấy vào tháng 12/2016, measure đã trả ra kết quả của tổng doanh thu 3 tháng gần nhất ( tháng 10,11,12) còn vào tháng 11/2016, measure trả ra kết quả của tổng doanh thu 3 tháng gần nhất là tháng 9,11,12.
Bài toán 2: Biểu đồ thể hiện xu hướng biến động doanh thu của N tháng gần nhất.
Bài toán thực tế: Yêu cầu thể hiện doanh thu theo số tháng trước để có thể so sánh được sự biến đổi của doanh thu theo số tháng /số kỳ.
Hướng dẫn sử dụng hàm DATESINPERIOD để lấy ra doanh thu trong N tháng gần nhất:
Bước 1: Chuẩn bị data set:
- Data set của mình sẽ có 1 bảng Sales ghi nhận các thông tin giao dịch như tổng số tiền thanh toán (Total Amount), Ngày đặt hàng (Order Date)… và gồm 1 bảng Date.
- Ngoài ra chúng ta sẽ tạo bảng Date phụ để phục vụ cho nhu cầu bài toán.

Bước 2: Tạo Parameter để lọc ra số kỳ cần lấy:
Tại phần Modeling, chọn New parameter/Numeric range.
Tại cửa sổ Parameters, chọn Create.
(Lưu ý: Minimum là số kỳ nhỏ nhất muốn lấy, Maximum là số kỳ lớn nhất )

Bước 2: Tạo 1 thẻ Slicer với Parameter vừa tạo (có thể đổi tên cột và Measure có sẵn trong Parameter thành “Số kỳ”, cho phù hợp với mục đích bài toán).

(Lưu ý: Có thể tự tạo 1 bảng gồm giá trị để lọc thay vì dùng Parameter.)
Bước 3: Viết DAX và trực quan hóa dữ liệu:
Công thức DAX:
Doanh thu N tháng trước =
VAR _min =
CALCULATE (
MIN ( 'Date'[Date] ),
DATESINPERIOD (
'Date'[Date],
MAX ( 'Date'[Date] ),
- SELECTEDVALUE ( 'Số kỳ'[Số kỳ] ),
MONTH
),
REMOVEFILTERS ( 'Bảng Date phụ' )
)
VAR _max =
MAX ( 'Date'[Date] )
RETURN
CALCULATE (
SUM ( Sales[Total Amount] ),
FILTER (
'Bảng Date phụ',
AND ( 'Bảng Date phụ'[Date] >= _min, 'Bảng Date phụ'[Date] <= _max )
),
ALL ( 'Date' )
)
Trong đó:
| Thành phần | Ý nghĩa | |
Phần VAR | _max | Giới hạn ngày lớn nhất muốn xuất hiện. |
| _min | Giới hạn ngày nhỏ nhất muốn xuất hiện. | |
| Phần RETURN | Tính doanh thu trong các ngày giữa ngày lớn nhất muốn xuất hiện. | |
Lưu ý:
- Có thể dùng hàm EDATE thay cho phần tính _min.
- Chi tiết hơn cách hoạt động hàm VAR.
Tạo biểu đồ:
- Một slicer bao gồm parameter tạo ở bước 2 để lọc ra số kỳ thể hiện.
- Tạo 1 biểu đồ dạng Line chart, cột X gồm giá trị thời gian “tại bảng Date phụ”, cột Y gồm giá trị Measure vừa tạo ở phía trước.
- Một slicer với bảng “Date” để lọc ra ngày lớn nhất trong kỳ đó.
(Lưu ý: phần thời gian ở Line Chart và phần thời gian ở Slicer sẽ đến từ hai bảng Date khác nhau, mục đích tạo bảng Date phụ là để giới hạn thời gian muốn thể hiện trong biểu đồ cần tạo.)
Kết quả:

Tạm kết
Qua bài viết về POWER BI DAX: DATESINPERIOD, Datapot hi vọng bạn có một cái nhìn rõ hơn về hàm DATESINPERIOD. Để không bỏ lỡ các nội dung mới về tự học và thực hành Power BI, mời bạn theo dõi chuyên mục Power BI trên Blog và subscribe vào kênh YouTube của Datapot nhé.
