PowerBI之时间智能函数详解(一)


  关于时间智能函数,我只能用NB两个字来形容了。如果说CALCULATE是灵魂,那时间智能函数就是PBI的任督二脉了。如果想要练得绝世神功,就必须要将它们打通。它们可以帮你创建使用内置日历和日期有关的知识的计算。通过使用组合与聚合或计算的时间和日期范围,然后在销售、 库存、 可比较的时间段生成多维度的比较。还能支持在年,季,年中,月,周,日等等任意时间周期随意转换调整。

    既然时间智能函数这么强大,那还等什么呢?还不赶紧搞起来

话不多说,咱们直接开干吧!时间智能函数大概有35个,我计划将它们大卸三块,然后慢慢的一层层剥开。今天搞的第一块有12个函数,接下来一个一个的上了。

1、CLOSINGBLANCEMONTH        在当前月份的最后一个日期计值的表达式。

  说人话就是:这个函数可以返回一个值,这个值可以是任意数据类型。这个值是该表中最大日期对应的一个值。如果涉及到行上下文,这个值是该表中该月最大日期对应的一个值

  语法:

CLOSINGBALANCEMONTH ( <表达式>, <日期列>, [<筛选器>] )

  上案例:

 

  上述数据中有6月和7月2个月份上海和湖北的销售件量情况。

  问题1:我想知道最后一个销售日期的省份是谁?(这里肉眼可见是7月1日那天,上海)那如何让PowerBI帮我们找呢?毕竟我这里只是个案例,数据很少。

该月最后一个销售日的销售省份是谁 = CLOSINGBALANCEMONTH(VALUES('业务表'[省份]),'业务表'[日期])

 

 

 

  注意了,这里返回的可是一个文本型哦!是不是非常的神奇。这里Values纯粹只是起到一个充当表达式的作用。第三参数我没有输入。第一参数我还是计算销售件量,这样返回的就是一个数值型

 

  如果我再带上一个筛选条件,那又会是什么样呢?

 

这里说明第二参数与第三参数是一个取交集的关系,很显然7月1日与湖北没有交集,不信咱们把第三参数里的湖北改成上海试试。

 

 

 

 

  问题2:上面是把CLOSINGBALANCEMONTH用在了筛选上下文中,那如果放在行上下文中又是什么个情况呢?

 

这就让人蒙圈了,这里居然显示了两个值。大家是不是忘记了这里实在行上下文中,那6月的最后一个销售日是6月30日,对应是省份是上海。7月只有一个销售日,对应的也是上海。这样为了让大家理解,我把湖北的数据再加一个7月2号试试,看7月的最后一个销售日期的省份会不会变成湖北。

   果然不出所料,7月的最后一个销售日的省份变成了湖北。那看到这里想必大家都CLOSINGBALANCEMONTH应该已经完全理解了吧!那同样的道理CLOSINGBALANCEQUARTER和CLOSINGBALANCEYEAR的用法和该函数的用法肯定完全一致,只不过把时间拉长到了季度和年了而已。

  2、OPENINGBALANCEMONTH  在当前上下文中月份的第一个日期计值的表达式。

  目前全网所有资料对这个函数的解释是返回在当前上下文中月份的第一个日期计值的表达式。但是我计算出来的结果却是返回上一个的最后一天的表达式。而且用法与CLOSINGBALANCEMONTH的用法也是有所区别的。

返回该行上下文里上一个的最后一天的结果 = OPENINGBALANCEMONTH(sum('业务表'[件量]),'业务表'[日期]) 

 

  针对上面全网解释跟实际情况不一致的问题,我已请教过行业专家,结果等待回复中,那在这里对OPENINGBALANCEMONTH、OPENINGBALANCEQUARTR、OPENINGBALANCEYEAR暂时就不多做解释了。后面得到结果会准时跟大家分享。

3、ENDOFMONTH    返回当前月份的最后一天

  语法

ENDOFMONTH ( <日期列> )

 

   通过上面的销售表可以看出该表中最大的日期是2021/7/2,那我们输入该函数必定也是返回这个值了。

该表中最大日期 = ENDOFMONTH('业务表'[日期])

 

那一般的情况我们不会单独使用这个函数,一般会配合CALCULATE对表格中的一些数据进行求和或者计数。例如:

最后一天的业务量 = CALCULATE(sum('业务表'[件量]),ENDOFMONTH('业务表'[日期]))

 

  这样计算出来的结果就可以和某些日期产生的业务量进行一个纵向的比较。

  ENDOFMONTH还可以放在行上下文当中,例如:

  

 

   这里返回的结果通过前面上下文筛选后得出各省个月最后一个日期的结果了。注意:如果该省该月只有1号1天的数据,结果会返回空。

  ENDOFQUARTER、ENDOFYEAR的用法与ENDOFMONTH的用法基本一致,在这里我就不在赘述了。

 4、STARTOFMONTH   返回当前月份的第一天。

  START  和   END 本来就是一对反义词,所以用法想必不会有什么太大的区别。

  语法:

该表中最小日期 = STARTOFMONTH('业务表'[日期])

 

      

 

 

 

 

 

 

其他的案例请参考ENDOFMONT,在这里我也不再啰嗦了。那同样的道理STARTOFQUARTER 和STARTOFYEAR的用法和STARTOFMONTH也是一样的,大家不会的可以参考STARTOFMONTH。

 

本小节内容就讲完了,非常感谢大家的观看,如果有描述的不对的地方还请多多指点。最后还是需要大家多多练习,才能掌握其中的全奥秘。

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM