Excel DAX - Thông minh về thời gian
DAX có một tính năng quan trọng và mạnh mẽ, được gọi là Time Intelligence. Thông minh về thời gian cho phép bạn viết công thức DAX tham chiếu đến khoảng thời gian để sử dụng trong PivotTables.
DAX có 35 chức năng thông minh thời gian đặc biệt để tổng hợp và so sánh dữ liệu theo thời gian. Tuy nhiên, các hàm DAX này có một số ràng buộc đối với dữ liệu mà bạn cần hiểu và làm việc thận trọng để tránh lỗi.
Tại sao Trí tuệ thời gian lại làm cho DAX trở nên mạnh mẽ?
Chức năng thông minh thời gian hoạt động với dữ liệu liên tục thay đổi, tùy thuộc vào ngữ cảnh bạn chọn trong hình ảnh hóa PivotTables và Power View. Như bạn đã biết, hầu hết các phân tích dữ liệu bao gồm việc tóm tắt dữ liệu theo các khoảng thời gian, so sánh các giá trị dữ liệu trong các khoảng thời gian, hiểu xu hướng và đưa ra quyết định dựa trên các dự báo trong tương lai.
Ví dụ: bạn có thể muốn tính tổng số tiền bán hàng cho tháng trước theo sản phẩm và so sánh tổng số với các tháng khác trong năm tài chính. Điều này có nghĩa là bạn phải sử dụng ngày tháng như một cách để nhóm và tổng hợp các giao dịch bán hàng trong một khoảng thời gian cụ thể.
Đây là nơi bạn có thể quan sát sức mạnh của DAX. Bạn có thể sử dụng các hàm thông minh thời gian DAX để xác định các trường được tính toán giúp bạn phân tích dữ liệu theo thời gian mà không phải thay đổi lựa chọn ngày trong bảng tổng hợp. Điều này làm cho công việc của bạn dễ dàng hơn. Hơn nữa, bạn có thể xây dựng PivotTable mà không thể theo bất kỳ cách nào khác.
Yêu cầu đối với các chức năng thông minh thời gian DAX
Các chức năng thông minh thời gian DAX có một số yêu cầu nhất định. Nếu các yêu cầu này không được đáp ứng, bạn có thể gặp lỗi hoặc chúng có thể không hoạt động bình thường. Do đó, bạn cũng có thể coi các yêu cầu này là quy tắc hoặc ràng buộc. Sau đây là một số yêu cầu / quy tắc / ràng buộc chức năng thông minh thời gian DAX:
Bạn cần có một bảng ngày trong Mô hình Dữ liệu của mình.
Bảng ngày phải bao gồm một cột được DAX coi là cột Ngày. Bạn có thể đặt tên cột theo cách bạn muốn, nhưng nó phải tuân thủ các điều kiện sau: o Cột ngày phải chứa một tập hợp ngày liền kề bao gồm mỗi ngày trong khoảng thời gian bạn đang phân tích dữ liệu.
Mỗi ngày phải tồn tại một lần và chỉ một lần trong cột ngày.
Bạn không thể bỏ qua bất kỳ ngày nào (Ví dụ: bạn không thể bỏ qua các ngày cuối tuần).
Các chức năng thông minh thời gian của DAX chỉ hoạt động trên một lịch chuẩn và giả sử bắt đầu của năm là ngày 1 tháng 1 và cuối năm là ngày 31 tháng 12, với các tháng trong năm và các ngày trong mỗi tháng theo năm dương lịch.
Tuy nhiên, bạn có thể tùy chỉnh lịch chuẩn cho các năm tài chính khác nhau. Một thực tiễn tốt là xác minh các yêu cầu trên trước khi sử dụng chức năng thông minh bất kỳ lúc nào.
Để biết thêm chi tiết về bảng ngày và cách sử dụng chúng trong công thức DAX, hãy tham khảo hướng dẫn = Lập mô hình dữ liệu với DAX trong thư viện hướng dẫn này.
Chức năng thông minh thời gian DAX - Danh mục
Các chức năng của DAX Time Intelligence có thể được phân loại như sau:
- Các hàm DAX trả về một ngày duy nhất.
- Hàm DAX trả về bảng ngày tháng.
- Hàm DAX đánh giá các biểu thức trong một khoảng thời gian.
Các chức năng DAX trả về một ngày duy nhất
Các hàm DAX trong danh mục này trả về một ngày duy nhất.
Có 10 hàm DAX trong danh mục này -
Sr.No. | Hàm DAX & Giá trị trả về |
---|---|
1 | FIRSTDATE (Date_Column) Trả về ngày đầu tiên trong Date_Column trong ngữ cảnh hiện tại. |
2 | LASTDATE (Date_Column) Trả về ngày cuối cùng trong Date_Column trong ngữ cảnh hiện tại. |
3 | FIRSTNONBLANK (Date_Column, Expression) Trả về ngày đầu tiên trong đó biểu thức có giá trị không trống. |
4 | LASTNONBLANK (Date_Column, Expression) Trả về ngày cuối cùng nơi biểu thức có giá trị không trống. |
5 | STARTOFMONTH (Date_Column) Trả về ngày đầu tiên của tháng trong ngữ cảnh hiện tại. |
6 | ENDOFMONTH (Date_Column) Trả về ngày cuối cùng của tháng trong ngữ cảnh hiện tại. |
7 | STARTOFQUARTER (Date_Column) Trả về ngày đầu tiên của một phần tư trong ngữ cảnh hiện tại. |
số 8 | ENDOFQUARTER (Date_Column) Trả về ngày cuối cùng của một phần tư trong ngữ cảnh hiện tại. |
9 | STARTOFYEAR (Date_Column, [YE_Date]) Trả về ngày đầu tiên của năm trong ngữ cảnh hiện tại. |
10 | ENDOFYEAR (Date_Column, [YE_Date]) Trả về ngày cuối cùng của một năm trong ngữ cảnh hiện tại. |
Các hàm DAX trả về một bảng ngày tháng
Các hàm DAX trong danh mục này trả về một bảng ngày tháng. Các hàm này chủ yếu sẽ được sử dụng làm đối số SetFilter cho hàm DAX - CALCULATE.
Có 16 hàm DAX trong danh mục này. Tám (8) trong số các hàm DAX này là các hàm “trước đó” và “tiếp theo”.
Các hàm “trước đó” và “tiếp theo” bắt đầu bằng cột ngày trong ngữ cảnh hiện tại và tính ngày, tháng, quý hoặc năm trước đó hoặc tiếp theo.
Các chức năng “trước đó” hoạt động ngược lại so với ngày đầu tiên trong ngữ cảnh hiện tại và các chức năng “tiếp theo” chuyển tiếp từ ngày cuối cùng trong ngữ cảnh hiện tại.
Các hàm “trước đó” và “tiếp theo” trả về ngày kết quả dưới dạng một bảng cột duy nhất.
Sr.No. | Hàm DAX & Giá trị trả về |
---|---|
1 | PREVIOUSDAY (Date_Column) Trả về một bảng có chứa một cột gồm tất cả các ngày đại diện cho ngày trước ngày đầu tiên trong Date_Column trong ngữ cảnh hiện tại. |
2 | NEXTDAY (Date_Column) Trả về một bảng chứa một cột gồm tất cả các ngày từ ngày hôm sau, dựa trên ngày đầu tiên được chỉ định trong Date_Column trong ngữ cảnh hiện tại. |
3 | PREVIOUSMONTH (Date_Column) Trả về một bảng có chứa một cột gồm tất cả các ngày từ tháng trước, dựa trên ngày đầu tiên trong Date_Column trong ngữ cảnh hiện tại. |
4 | NEXTMONTH (Date_Column) Trả về một bảng chứa một cột gồm tất cả các ngày trong tháng tiếp theo, dựa trên ngày đầu tiên trong Date_Column trong ngữ cảnh hiện tại. |
5 | PREVIOUSQUARTER (Date_Column) Trả về một bảng có chứa một cột của tất cả các ngày từ quý trước, dựa trên ngày đầu tiên trong Date_Column trong ngữ cảnh hiện tại. |
6 | NEXTQUARTER (Date_Column) Trả về một bảng chứa một cột gồm tất cả các ngày trong quý tiếp theo, dựa trên ngày đầu tiên được chỉ định trong Date_Column trong ngữ cảnh hiện tại. |
7 | PREVIOUSYEAR (Date_Column, [YE_Date]) Trả về một bảng có chứa một cột của tất cả các ngày từ năm trước, cho ngày cuối cùng trong Date_Column trong ngữ cảnh hiện tại. |
số 8 | NEXTYEAR (Date_Column, [YE_Date]) Trả về một bảng chứa một cột của tất cả các ngày trong năm tiếp theo, dựa trên ngày đầu tiên trong Date_Column trong ngữ cảnh hiện tại. |
Bốn (4) hàm DAX tính toán một tập hợp các ngày trong một khoảng thời gian. Các hàm này thực hiện các phép tính bằng cách sử dụng ngày cuối cùng trong ngữ cảnh hiện tại.
Sr.No. | Hàm DAX & Giá trị trả về |
---|---|
1 | DATESMTD (Date_Column) Trả về một bảng có chứa một cột ngày của tháng cho đến nay, trong ngữ cảnh hiện tại. |
2 | DATESQTD (Date_Column) Trả về một bảng có chứa một cột ngày của quý cho đến nay, trong ngữ cảnh hiện tại. |
3 | DATESYTD (Date_Column, [YE_Date]) Trả về một bảng có chứa một cột ngày của năm tính đến thời điểm hiện tại, trong ngữ cảnh hiện tại. |
4 | SAMEPERIODLASTYEAR (Date_Column) Trả về một bảng chứa một cột ngày được dịch chuyển ngược một năm so với các ngày trong Date_Column được chỉ định, trong ngữ cảnh hiện tại. Note- SAMEPERIODLASTYEAR yêu cầu ngữ cảnh hiện tại phải chứa một nhóm ngày liền kề. Nếu ngữ cảnh hiện tại không phải là một tập hợp ngày liền nhau, thì SAMEPERIODLASTYEAR sẽ trả về một lỗi. |
Bốn (4) Hàm DAX được sử dụng để chuyển từ nhóm ngày trong ngữ cảnh hiện tại sang một nhóm ngày mới.
Các hàm DAX này mạnh hơn các hàm trước đó.
Các hàm DAX - DATEADD, DATESINPERIOD và PARALLELPERIOD thay đổi một số khoảng thời gian so với ngữ cảnh hiện tại. Khoảng thời gian có thể là ngày, tháng, quý hoặc năm, được biểu thị bằng các từ khóa - NGÀY, THÁNG, QUÝ và NĂM tương ứng.
Ví dụ:
Dịch chuyển lùi 2 ngày.
Tiến tới 5 tháng.
Tiến lên một tháng kể từ hôm nay.
Quay trở lại cùng một quý trong năm ngoái.
Hàm DAX - DATESBETWEEN tính toán bộ ngày giữa ngày bắt đầu và ngày kết thúc được chỉ định.
Nếu đối số hàm - số khoảng (giá trị nguyên) là dương, thì shift là tiến và nếu là âm, shift là lùi.
Sr.No. | Hàm DAX & Giá trị trả về |
---|---|
1 | DATEADD (Date_Column, Number_of_Intervals, Interval) Trả về một bảng có chứa một cột ngày tháng, được dịch chuyển về phía trước hoặc lùi về phía sau theo số khoảng thời gian được chỉ định từ các ngày trong ngữ cảnh hiện tại. |
2 | DATESINPERIOD (Date_Column, Start_Date, Number_of_Intervals, Interval) Trả về một bảng có chứa một cột ngày bắt đầu bằng ngày bắt đầu và tiếp tục cho số_ khoảng_thời gian đã chỉ định. |
3 | PARALLELPERIOD (Date_Column, Number_of_Intervals, Interval) Trả về một bảng có chứa một cột ngày biểu thị một khoảng thời gian song song với các ngày trong Date_Column được chỉ định trong ngữ cảnh hiện tại, với các ngày được dịch chuyển một số khoảng tiến hoặc lùi theo thời gian. |
4 | DATESBETWEEN (Date_Column, Start_Date, End_Date) Trả về một bảng có chứa một cột ngày bắt đầu bằng start_date và tiếp tục cho đến end_date. |
Các hàm DAX đánh giá các biểu thức trong một khoảng thời gian
Các hàm DAX trong danh mục này đánh giá một biểu thức trong một khoảng thời gian cụ thể.
Có chín (9) hàm DAX trong danh mục này -
Ba (3) hàm DAX trong danh mục này có thể được sử dụng để đánh giá bất kỳ biểu thức nhất định nào trong một khoảng thời gian xác định.
Sr.No. | Hàm DAX & Giá trị trả về |
---|---|
1 | TOTALMTD (Expression, Date_Column, [SetFilter]) Đánh giá giá trị của biểu thức cho các ngày trong tháng cho đến nay, trong ngữ cảnh hiện tại. |
2 | TOTALQTD (Expression, Date_Column, [SetFilter]) Đánh giá giá trị của biểu thức cho các ngày trong quý cho đến nay, trong bối cảnh hiện tại. |
3 | TOTALYTD (Expression, Date_Column, [SetFilter], [YE_Date]) Đánh giá giá trị của biểu thức cho các ngày trong năm cho đến nay, trong bối cảnh hiện tại |
Sáu (6) hàm DAX trong danh mục này có thể được sử dụng để tính toán số dư đầu kỳ và số dư cuối kỳ.
Số dư đầu kỳ của bất kỳ kỳ nào cũng giống như số dư cuối kỳ của kỳ trước.
Số dư cuối kỳ bao gồm tất cả dữ liệu đến cuối kỳ, trong khi số dư đầu kỳ không bao gồm bất kỳ dữ liệu nào trong kỳ hiện tại.
Các hàm DAX này luôn trả về giá trị của một biểu thức được đánh giá cho một thời điểm cụ thể.
Thời điểm chúng tôi quan tâm luôn là giá trị ngày cuối cùng có thể có trong một khoảng thời gian theo lịch.
Số dư đầu kỳ dựa trên ngày cuối cùng của kỳ trước, trong khi số dư cuối kỳ dựa trên ngày cuối cùng trong kỳ hiện tại.
Khoảng thời gian hiện tại luôn được xác định bởi ngày cuối cùng trong bối cảnh ngày hiện tại.
Sr.No. | Hàm DAX & Giá trị trả về |
---|---|
1 | OPENINGBALANCEMONTH (Expression, Date_Column, [SetFilter]) Đánh giá biểu thức vào ngày đầu tiên của tháng trong ngữ cảnh hiện tại. |
2 | CLOSINGBALANCEMONTH (Expression, Date_Column, [SetFilter]) Đánh giá biểu thức vào ngày cuối cùng của tháng trong ngữ cảnh hiện tại. |
3 | OPENINGBALANCEQUARTER (Expression, Date_Column, [SetFilter]) Đánh giá biểu hiện vào ngày đầu tiên của quý, trong bối cảnh hiện tại. |
4 | CLOSINGBALANCEQUARTER (Expression, Date_Column, [SetFilter]) Đánh giá biểu thức vào ngày cuối cùng của quý trong bối cảnh hiện tại. |
5 | OPENINGBALANCEYEAR (Expression, Date_Column, [SetFilter], [YE_Date]) Đánh giá biểu thức vào ngày đầu tiên của năm trong bối cảnh hiện tại. |
6 | CLOSINGBALANCEYEAR (Expression, Date_Column, [SetFilter], [YE_Date]) Đánh giá biểu thức vào ngày cuối cùng của năm trong bối cảnh hiện tại. |