Excel 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 函数 –

Sr.No. 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 函数。这些 DAX 函数中的八 (8) 个是“上一个”和“下一个”函数。

  • “上一个”和“下一个”函数以当前上下文中的日期列开始,并计算前一天或后一天、一个月、一个季度或一年。

  • “上一个”函数从当前上下文中的第一个日期开始向后工作,“下一个”函数从当前上下文中的最后一个日期向前移动。

  • “上一个”和“下一个”函数以单列表的形式返回结果日期。

Sr.No. 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 函数计算一个时期内的一组日期。这些函数使用当前上下文中的最后日期执行计算。

Sr.No. 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 计算指定开始日期和结束日期之间的日期集。

Sr.No. DAX 函数和返回值
1

DATEADD (Date_Column, Number_of_Intervals, Interval)

返回一个包含一列日期的表,从当前上下文中的日期向前或向后移动指定数量的时间间隔。

2

DATESINPERIOD (Date_Column, Start_Date, Number_of_Intervals, Interval)

返回一个表,其中包含以 start_date 开始并继续指定 number_of_intervals 的日期列。

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 函数可用于评估指定时间段内的任何给定表达式。

Sr.No. DAX 函数和返回值
1

TOTALMTD (Expression, Date_Column, [SetFilter])

在当前上下文中计算本月至今日期的表达式值。

2

TOTALQTD (Expression, Date_Column, [SetFilter])

在当前上下文中计算季度至今日期的表达式值。

3

TOTALYTD (Expression, Date_Column, [SetFilter], [YE_Date])

在当前上下文中计算年初至今日期的表达式值

  • 此类别中的六 (6) 个 DAX 函数可用于计算期初和期末余额。

    • 任何期间的期初余额与上一期间的期末余额相同。

    • 期末余额包括期末的所有数据,而期初余额不包括本期的任何数据。

    • 这些 DAX 函数始终返回针对特定时间点计算的表达式的值。

  • 我们关心的时间点始终是日历周期中最后一个可能的日期值。

  • 期初余额基于上一期间的最后日期,而期末余额则基于当前期间的最后日期。

  • 当前期间始终由当前日期上下文中的最后一个日期确定。

Sr.No. 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])

在当前上下文中计算一年中最后一个日期的表达式。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁