美文网首页
DAX学习笔记2

DAX学习笔记2

作者: 35212c1e23f9 | 来源:发表于2018-11-24 10:37 被阅读0次

    八 、 时间智能函数

    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号。

    相关文章

      网友评论

          本文标题:DAX学习笔记2

          本文链接:https://www.haomeiwen.com/subject/dxmeqqtx.html