数据分析表达式 (DAX) 具有 35 个专门用于一段时间内聚合和比较数据的函数。 与 DAX 的日期和时间函数不同,时间智能函数在 Excel 中实际上没有任何类似功能。 这是因为时间智能函数可以处理不断变化的数据,具体取决于你在数据透视表和 Power View 可视化效果中选择的上下文。
为了使用时间智能函数,您需要在数据模型中包含一个日期表。 日期表必须包含一列,其中一行表示数据中包含的每年的每一天。 此列被视为“日期”列 (,但可以) 任意命名。 许多时间智能函数都需要日期列,以便根据您在报表中选择作为字段的日期进行计算。 例如,如果你有一个度量值,它使用 CLOSINGBALANCEQTR 函数计算期末季度末余额,为了让 Power Pivot 知道该季度的真正结束时间,它必须引用日期表中的日期列来了解该季度的开始和结束时间。 若要了解有关日期表的详细信息,请参阅 了解 Excel 中的 Power Pivot 中创建日期表。
函数
返回单个日期的函数
此类别中的函数返回单个日期。 然后,结果可以用作其他函数的参数。
此类别中的前两个函数返回当前上下文中Date_Column的第一个或最后一个日期。 当您想要查找进行特定类型交易的第一个或最后一个日期时,这会很有用。 这些函数仅接受一个参数,即日期表中日期列的名称。
此类别中的接下来两个函数将查找表达式具有非空值) 的第一个或最后一个日期 (或任何其他列值。 这最常用于库存等情况,您想获得最后的库存金额,但不知道最后一次库存是什么时候进行的。
- FIRSTNONBLANK (Date_Column, Expression)
- LASTNONBLANK (Date_Column, Expression)
另外六个返回单个日期的函数是在计算的当前上下文中返回月、季度或年的第一个或最后一个日期的函数。
- STARTOFMONTH (Date_Column)
- STARTOFQUARTER (Date_Column)
- STARTOFYEAR (Date_Column [,YE_Date])
- ENDOFMONTH (Date_Column)
- ENDOFQUARTER (Date_Column)
- ENDOFYEAR (Date_Column [,YE_Date])
返回日期表的函数
有 16 个时间智能函数返回日期表。 通常,这些函数将用作 CALCULATE 函数的 SetFilter 参数。 与 DAX 中的所有时间智能函数一样,每个函数都采用日期列作为其参数之一。
此类别中的前八个函数以当前上下文中的日期列开头。 例如,如果在数据透视表中使用度量值,则列标签或行标签上可能显示月或年。 net 效果是将筛选日期列以仅包含当前上下文的日期。 然后,从当前上下文开始,这八个函数计算上 (或下) 的天、月、季度或年,并以单列表的形式返回这些日期。 “pre”函数从当前上下文中的第一个日期向后工作,“next”函数从当前上下文中的最后一个日期向前移动。
- PREVIOUSDAY (Date_Column)
- PREVIOUSMONTH (Date_Column)
- 上一页 季度 (Date_Column)
- PREVIOUSYEAR (Date_Column [,YE_Date])
- NEXTDAY (Date_Column)
- NEXTMONTH (Date_Column)
- 下一季度 (Date_Column)
- NEXTYEAR (Date_Column [,YE_Date])
此类别中接下来的四个函数类似,但不是计算上一个 (或下一个) 期间,而是计算“本月至今”期间、 (季度至今、年初至今或上一年同期) 的日期集。 这些函数都使用当前上下文中的最后一个日期执行其计算。 请注意,SAMEPERIODLASTYEAR 要求当前上下文包含一组连续的日期。 如果当前上下文不是一组连续的日期,则 SAMEPERIODLASTYEAR 将返回一个错误。
- DATESMTD (Date_Column)
- DATESQTD (Date_Column)
- DATESYTD (Date_Column [,YE_Date])
- SAMEPERIODLASTYEAR (Date_Column)
此类别中的最后四个函数稍微复杂一些,也更强大一些。 这些函数用于从当前上下文中的日期集转换为新的日期集。
- DATEADD (Date_Column, Number_of_Intervals, Interval)
- DATESBETWEEN (Date_Column、Start_Date End_Date)
- DATESINPERIOD (Date_Column、Start_Date、Number_of_Intervals、间隔)
- PARALLELPERIOD (Date_Column、Number_of_Intervals、间隔)
DATESBETWEEN 计算指定开始日期和结束日期之间的日期集。 其余三个函数从当前上下文移动一定数量的时间间隔。 间隔可以是天、月、季度或年。 通过这些函数,可通过以下任一方式轻松转移计算的时间间隔:
- 返回两年
- 返回一个月
- 向前推进三个季度
- 返回 14 天
- 前进 28 天
在每种情况下,只需指定要移位的间隔数以及其中多少个间隔。 正区间将在时间上向前移动,而负区间将在时间上向后移动。 间隔本身由关键字 (keyword) DAY、MONTH、QUARTER 或 YEAR 指定。 这些关键字不是字符串,因此不应放在引号中。
在一段时间内计算表达式的函数
此类函数计算指定时间段内的表达式。 您可以使用 CALCULATE 和其他时间智能函数来完成同样的事情。 例如,
= TOTALMTD (Expression, Date_Column [, SetFilter])
与:
= CALCULATE (表达式, DATESMTD (Date_Column) [, SetFilter])
但是,当这些时间智能函数非常适合需要解决的问题时,使用它们会更容易:
- TOTALMTD (Expression, Date_Column [, SetFilter])
- TOTALQTD (Expression, Date_Column [, SetFilter])
- TOTALYTD (Expression, Date_Column [, SetFilter] [,YE_Date]) *
此类别中还有一组计算期初和期末余额的函数。 对于这些特定函数,您应该了解某些概念。 首先,正如您可能认为显而易见的那样,任何时期的期初余额都与上一时期的期末余额相同。 期末余额包括截至期末的所有数据,而期初余额不包括当前期间内的任何数据。
这些函数始终返回针对特定时间点计算的表达式的值。 我们关心的时间点始终是日历期间中最后一个可能的日期值。 期初余额基于上一期间的最后日期,而期末余额基于当前期间的最后日期。 当前期间始终由当前日期上下文中的最后一个日期确定。
- OPENINGBALANCEMONTH (Expression, Date_Column [,SetFilter])
- OPENINGBALANCEQUARTER 四分之一 (表达式, Date_Column [,SetFilter])
- OPENINGBALANCEYEAR (表达式,Date_Column [,SetFilter] [,YE_Date])
- CLOSINGBALANCEMONTH (表达式,Date_Column [,SetFilter])
- CLOSINGBALANCEQUARTER (Expression, Date_Column [,SetFilter])
- CLOSINGBALANCEYEAR (表达式,Date_Column [,SetFilter] [,YE_Date])
其他资源
文章: 了解 Excel 中的 Power Pivot 并创建日期表
参考:Office.com 上的 DAX 函数参考