
- Excel DAX 教程
- DAX - 首頁
- DAX - 概述
- DAX - 計算列
- DAX - 計算欄位/度量值
- DAX - 編輯計算欄位
- DAX - 刪除計算欄位
- DAX - 語法
- DAX - 運算子
- DAX - 標準引數
- DAX - 函式
- DAX - 理解DAX函式
- DAX - 評估上下文
- DAX - 公式
- 更新DAX公式的結果
- 更新資料模型中的資料
- DAX - 重新計算DAX公式
- DAX公式重新計算故障排除
- DAX - 公式錯誤
- DAX - 時間智慧
- DAX - 篩選器函式
- DAX - 場景
- 執行復雜計算
- DAX - 使用文字和日期
- 條件值和錯誤測試
- DAX - 使用時間智慧
- DAX - 排名和比較值
- Excel DAX 有用資源
- DAX - 快速指南
- DAX - 有用資源
- DAX - 討論
Excel DAX - 時間智慧
DAX 具有一個重要且強大的功能,稱為時間智慧。時間智慧使您能夠編寫引用時間段以在資料透視表中使用的DAX公式。
DAX 有 35 個專門用於聚合和比較隨時間推移的資料的時間智慧函式。但是,這些 DAX 函式對您需要了解的資料有一些限制,並且需要謹慎使用以避免錯誤。
為什麼時間智慧使 DAX 強大?
時間智慧函式處理不斷變化的資料,具體取決於您在資料透視表和 Power View 視覺化效果中選擇的上下文。如您所知,大多數資料分析都涉及隨時間推移的資料彙總、跨時間段的資料值比較、趨勢理解以及基於未來預測的決策。
例如,您可能希望按產品彙總過去一個月的銷售額,並將總數與財政年度中其他月份的總數進行比較。這意味著您必須將日期用作一種方法來對特定時間段內的銷售交易進行分組和聚合。
在這裡,您可以觀察到 DAX 的強大功能。您可以使用 DAX 時間智慧函式定義計算欄位,以幫助您隨時間推移分析資料,而無需更改資料透視表中的日期選擇。這使您的工作更容易。此外,您可以構建其他方法無法構建的資料透視表。
DAX 時間智慧函式的要求
DAX 時間智慧函式有一定的要求。如果未滿足這些要求,您可能會收到錯誤或它們可能無法正常工作。因此,您也可以將這些要求稱為規則或約束。以下是某些 DAX 時間智慧函式的要求/規則/約束 -
您需要在資料模型中有一個日期表。
日期表必須包含 DAX 認為是日期列的列。您可以根據需要命名該列,但它應符合以下條件:o 日期列應包含連續的一組日期,涵蓋您分析資料的整個時間段。
每個日期在日期列中必須存在且僅存在一次。
您不能跳過任何日期(例如,您不能跳過週末日期)。
DAX 時間智慧函式僅適用於標準日曆,並將每年的開始日期假定為 1 月 1 日,並將每年的結束日期假定為 12 月 31 日,以及一年中的月份和每個月的天數,如日曆年所示。
但是,您可以為不同的財政年度自定義標準日曆。在使用任何時間智慧函式之前,驗證上述要求是一個好習慣。
有關日期表及其在 DAX 公式中的用法的更多詳細資訊,請參閱本教程庫中的教程 = 使用 DAX 進行資料建模。
DAX 時間智慧函式 - 類別
DAX 時間智慧函式可以分類如下 -
- 返回單個日期的 DAX 函式。
- 返回日期表的 DAX 函式。
- 在一段時間內評估表示式的 DAX 函式。
返回單個日期的 DAX 函式
此類別中的 DAX 函式返回單個日期。
此類別中有 10 個 DAX 函式 -
序號 | DAX 函式和返回值 |
---|---|
1 | FIRSTDATE (Date_Column) 返回當前上下文中 Date_Column 中的第一個日期。 |
2 | LASTDATE (Date_Column) 返回當前上下文中 Date_Column 中的最後一個日期。 |
3 | FIRSTNONBLANK (Date_Column, Expression) 返回表示式具有非空白值的第一個日期。 |
4 | LASTNONBLANK (Date_Column, Expression) 返回表示式具有非空白值的最後一個日期。 |
5 | STARTOFMONTH (Date_Column) 返回當前上下文中月份的第一個日期。 |
6 | ENDOFMONTH (Date_Column) 返回當前上下文中月份的最後一個日期。 |
7 | STARTOFQUARTER (Date_Column) 返回當前上下文中季度的第一個日期。 |
8 | ENDOFQUARTER (Date_Column) 返回當前上下文中季度的最後一個日期。 |
9 | STARTOFYEAR (Date_Column, [YE_Date]) 返回當前上下文中年份的第一個日期。 |
10 | ENDOFYEAR (Date_Column, [YE_Date]) 返回當前上下文中年份的最後一個日期。 |
返回日期表的 DAX 函式
此類別中的 DAX 函式返回日期表。這些函式大多將用作 DAX 函式 - CALCULATE 的 SetFilter 引數。
此類別中有 16 個 DAX 函式。其中 8 個 DAX 函式是“上一個”和“下一個”函式。
“上一個”和“下一個”函式從當前上下文中的日期列開始,並計算上一個或下一個日期、月份、季度或年份。
“上一個”函式從當前上下文中的第一個日期向後工作,“下一個”函式從當前上下文中的最後一個日期向前移動。
“上一個”和“下一個”函式以單列表的形式返回結果日期。
序號 | DAX 函式和返回值 |
---|---|
1 | PREVIOUSDAY (Date_Column) 返回一個表,該表包含一列表示當前上下文中 Date_Column 中第一個日期之前一天的所有日期。 |
2 | NEXTDAY (Date_Column) 返回一個表,該表包含一列從下一天開始的所有日期,基於當前上下文中 Date_Column 中指定的第一個日期。 |
3 | PREVIOUSMONTH (Date_Column) 返回一個表,該表包含一列來自上個月的所有日期,基於當前上下文中 Date_Column 中的第一個日期。 |
4 | NEXTMONTH (Date_Column) 返回一個表,該表包含一列來自下個月的所有日期,基於當前上下文中 Date_Column 中的第一個日期。 |
5 | PREVIOUSQUARTER (Date_Column) 返回一個表,該表包含一列來自上一季度的所有日期,基於當前上下文中 Date_Column 中的第一個日期。 |
6 | NEXTQUARTER (Date_Column) 返回一個表,該表包含一列下一季度的所有日期,基於當前上下文中 Date_Column 中指定的第一個日期。 |
7 | PREVIOUSYEAR (Date_Column, [YE_Date]) 返回一個表,該表包含一列來自上一年的所有日期,給定當前上下文中 Date_Column 中的最後一個日期。 |
8 | NEXTYEAR (Date_Column, [YE_Date]) 返回一個表,該表包含一列下一年的所有日期,基於當前上下文中 Date_Column 中的第一個日期。 |
四個 (4) DAX 函式計算一段時間內的一組日期。這些函式使用當前上下文中的最後一個日期執行計算。
序號 | DAX 函式和返回值 |
---|---|
1 | DATESMTD (Date_Column) 返回一個表,該表包含一列當前上下文中日期到本月的日期。 |
2 | DATESQTD (Date_Column) 返回一個表,該表包含一列當前上下文中日期到本季度的日期。 |
3 | DATESYTD (Date_Column, [YE_Date]) 返回一個表,該表包含一列當前上下文中日期到本年的日期。 |
4 | SAMEPERIODLASTYEAR (Date_Column) 返回一個表,該表包含一列日期,這些日期從當前上下文中指定的 Date_Column 中的日期向後移動一年。 注意- SAMEPERIODLASTYEAR 要求當前上下文包含一組連續的日期。 如果當前上下文不是一組連續的日期,則 SAMEPERIODLASTYEAR 將返回錯誤。 |
四個 (4) DAX 函式用於從當前上下文中的日期集轉移到一組新的日期。
這些 DAX 函式比之前的函式更強大。
DAX 函式 - DATEADD、DATESINPERIOD 和 PARALLELPERIOD 從當前上下文中偏移一些時間間隔。間隔可以是天、月、季度或年,分別由關鍵字 - DAY、MONTH、QUARTER 和 YEAR 表示。
例如
向後移動 2 天。
向前移動 5 個月。
從今天起向前移動一個月。
回到上一年的同一季度。
DAX 函式 - DATESBETWEEN 計算指定開始日期和結束日期之間的日期集。
如果函式引數 - 間隔數(整數值)為正,則偏移為向前,如果為負,則偏移為向後。
序號 | DAX 函式和返回值 |
---|---|
1 | DATEADD (Date_Column, Number_of_Intervals, Interval) 返回一個表,該表包含一列日期,這些日期從當前上下文中的日期向前或向後移動指定數量的間隔。 |
2 | DATESINPERIOD (Date_Column, Start_Date, Number_of_Intervals, Interval) 返回一個表,該表包含一列日期,這些日期從 start_date 開始,持續指定數量的間隔。 |
3 | PARALLELPERIOD (Date_Column, Number_of_Intervals, Interval) 返回一個表,該表包含一列日期,這些日期表示與當前上下文中指定的 Date_Column 中的日期平行的時期,日期向前或向後移動一定數量的間隔。 |
4 | DATESBETWEEN (Date_Column, Start_Date, End_Date) 返回一個表,該表包含一列日期,這些日期從 start_date 開始,一直持續到 end_date。 |
在一段時間內評估表示式的 DAX 函式
此類別中的 DAX 函式在指定的時間段內評估表示式。
此類別中有九 (9) 個 DAX 函式 -
此類別中的三個 (3) DAX 函式可用於在指定的時間段內評估任何給定的表示式。
序號 | DAX 函式和返回值 |
---|---|
1 | TOTALMTD (Expression, Date_Column, [SetFilter]) 評估當前上下文中日期到本月的表示式的值。 |
2 | TOTALQTD (Expression, Date_Column, [SetFilter]) 評估當前上下文中日期到本季度的表示式的值。 |
3 | TOTALYTD (Expression, Date_Column, [SetFilter], [YE_Date]) 評估當前上下文中日期到本年的表示式的值 |
此類別中的六 (6) 個 DAX 函式可用於計算期初餘額和期末餘額。
任何時期的期初餘額與上一時期的期末餘額相同。
期末餘額包括整個時期結束的所有資料,而期初餘額不包括當前時期內的任何資料。
這些 DAX 函式始終返回在特定時間點評估的表示式的值。
我們關心的時間點始終是日曆期間的最後一個可能的日期值。
期初餘額基於上一時期的最後一天,而期末餘額基於當前時期的最後一天。
當前時期始終由當前日期上下文中的最後一天確定。
序號 | DAX 函式和返回值 |
---|---|
1 | OPENINGBALANCEMONTH (Expression, Date_Column, [SetFilter]) 在當前上下文中評估當月第一天的表示式。 |
2 | CLOSINGBALANCEMONTH (Expression, Date_Column, [SetFilter]) 在當前上下文中評估當月最後一天的表示式。 |
3 | OPENINGBALANCEQUARTER (Expression, Date_Column, [SetFilter]) 在當前上下文中評估當季第一天的表示式。 |
4 | CLOSINGBALANCEQUARTER (Expression, Date_Column, [SetFilter]) 在當前上下文中評估當季最後一天的表示式。 |
5 | OPENINGBALANCEYEAR (Expression, Date_Column, [SetFilter], [YE_Date]) 在當前上下文中評估當年第一天的表示式。 |
6 | CLOSINGBALANCEYEAR (Expression, Date_Column, [SetFilter], [YE_Date]) 在當前上下文中評估當年最後一天的表示式。 |