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])

在当前上下文中评估当年最后一天的表达式。

广告