[DAX] DATESINPERIOD với DATESBETWEEN có sự khác biệt gì???

Như các bạn đã biết, có rất nhiều hàm thời gian thông minh trong DAX, mỗi hàm đều có những chức năng riêng và chúng đều giúp ích trong việc phân tich dữ liệu về ngày tháng. Có hai hàm hoạt động rất giống nhau nhưng có cách sử dụng khác nhau một chút đó là: DatesInPeriod() và DatesBetween(). Trong bày viết hôm nay, dataMAKER sẽ hướng dẫn các bạn cách sử dụng hai hàm này và chỉ ra sự khác biệt khi sử dụng chúng.

DATESINPERIOD()

DATESINPERIOD() trả về ngày trong một khoảng thời gian tùy chỉnh, bao gồm ngày, tháng, quý, năm. Cấu trúc hàm:

DATESINPERIOD(<dates>, <start_date>, <number_of_intervals>, <interval>)

Thông số:

  • <dates>: trường ngày tháng
  • <start_date>: ngày bắt đầu
  • <number_of_intervals> : số nguyên hoặc số âm bắt đầu từ ngày bắt đầu dựa trên khoảng thời gian
  • <interval>: khoảng thời gian năm, tháng, quý hoặc ngày

DATESBETWEEN()

DATESBETWEEN() trả về khoảng thời gian giữa hai ngày được chỉ định từ ngày bắt đầu đến ngày kết thúc. Cấu trúc hàm:

DATESBETWEEN(<dates>, <start_date>, <end_date>)

Thông số:

  • <dates>: trường thời gian
  • <start_date>: Ngày bắt đầu mà khoảng thời gian đó bắt đầu từ đó
  • <end_date>: Ngày kết thúc là khoảng thời gian đó kết thúc tại đó.

Ví dụ: Chúng tôi có bảng dữ liệu (Sales_Table) như bên dưới:

Để tính tổng số lương bán dựa theo điều kiện cột ngày chỉ trả về những kết quả từ ngày 01/01/2019 đến ngày 31/03/2019, sử dụng hàm DATESINPERIOD chúng ta có thể viết như biểu thức như sau:

= Calculate( SUM(Sales_Table[Units Sold] , DATESINPERIOD(Sales_Table[Ngày], DATE(2019,1,1), 3, MONTH)

Và kết quả mà chúng ta nhận được là:

Cũng là bảng dữ liệu và yêu cầu giống như trên, khi ta thay hàm DATESINPERIOD bằng hàm DATESBETWEEN, ta có thể viết như sau:

DATESBETWEEN = CALCULATE(SUM(Sales_Table[Units Sold]), DATESBETWEEN(Sales_Table[Ngày], DATE(2019,1,1), DATE(2019,3,31)))

Ta thấy , khi thay thế hàm DATESINPERIOD() thành DATESBETWEEN() khi tính tổng số lượng bán theo điều kiện lọc Ngày chúng trả về hai bảng kết quả giống nhau. Vậy hai hàm này khác nhau ở điểm nào? Các bạn hãy cùng dataMAKER phân tích tiếp nhé:

DATESINPERIOD() so với DATESBETWEEN()

Cả hai hàm này đều giống nhau là đều trả về bảng chứa phạm vi ngày, sự khác biệt là:

  • DATESINPERIOD() hỗ trợ trả về ngày trong một khoảng thời gian tùy chỉnh, bao gồm NGÀY, THÁNG, QUÝ và NĂM.
  • DATESBETWEEN() chỉ có thể trả về khoảng thời gian giữa hai ngày được chỉ định.
  • DATESBETWEEN() bao gồm ngày đầu tiên và ngày cuối cùng. Ngày đầu tiên và ngày cuối cùng của DATESINPERIOD() tuân theo cài đặt khoảng thời gian.

Ví dụ:
+ DATESINPERIOD (‘date’ [Date], DATE (2018,2,1), 1, DAY) // trả về ngày 1 tháng 2 năm 2018.
+ DATESINPERIOD (‘date’ [Date], DATE (2018,2,1), 1, MONTH) // trả về từ ngày 1 tháng 2 năm 2018 đến ngày 1 tháng 3 năm 2018.
+ DATESINPERIOD (‘date’ [Date], DATE (2018,2,1), – 1, MONTH) // trả về từ ngày 2 tháng 1 năm 2018 đến ngày 1 tháng 2 năm 2018, trừ ngày 1 tháng 1. (Nếu thông số thứ 3 nhỏ hơn không, ngày bắt đầu sẽ khong được bao gồm).

Leave a Reply

Your email address will not be published. Required fields are marked *