DAX学习笔记2

2018-11-24  本文已影响0人  35212c1e23f9

八 、 时间智能函数

CALENDARAUTO 函数用于自动生成一张日期表。该函数可以自动扫描获得整个模型中的所有日期字段(计算字段除外),并得到这些日期字段的最大年份和最小年份,然后生成二者之间的所有日期列表。

CALENDARAUTO函数可以指定一个参数。例如CALENDARAUTO(6)表示年的结束月份是6月。默认是从1月开始。

如果你不想从模型所有的表中获取日期范围,也可以用CALENDAR函数来实现。例如下面这段代码,表示只从Sales表的Order Date字段获取年份范围。

利用这种方法,可以通过下面的代码生成一张日期维表

结果表:

现在已经有一张日期维表了,但是如果你的主表有多个日期字段的话,也就是主表和日期维表之间会有多条关联,但实际在DAX中同时只会有一条线是active的。那么USERELATIONSHIP函数就派上用场了,它可以指定本次计算使用的关联线。例如下面两个度量,虽然表达式相同,但是由于使用不同的关联线,实际的度量完全不同。

这个问题的另外一种解法是,对主表的每个日期字段,创建单独的日期维表。

时间区间函数:DATESYTD,DATESMTD,DATESQTD

以DATESYTD为例:

如果上面的度量作用于 2007年3月这个日期值时,等价的表达式是:

由于YTD类型的日期函数非常常用,也可以简写为:

时间函数也支持自定义年开始日期,例如以6月30日为年最后一天:

日期推移函数:SAMEPERIODLASTYEAR 获取一年前的同比值

等价于

DAX还有一个特殊的日期偏移函数 PARALLELPERIOD 。它跟DATAADD的区别是偏移之后是取偏移后指定粒度的完整周期。

日期偏移函数可以自由组合,但是需要考虑不同的顺序对结果的影响。例如下面两个表达式:

乍一看觉得是等价的,实际上在某些特殊边界值时是不等价的,比如最后日期如果是 2011年12月31号,前者输出2011年1月2号,后者输出2011年1月1号。

上一篇下一篇

猜你喜欢

热点阅读