前面已经给大家分享了4组时间智能函数,那今天继续接着前面的内容来讲。今天讲的这些函数可能不像之前那样都是一组一组的,都是一些个体户,如果大家仔细阅读,发现他们之间其实也还是有许多相似之处,甚至有些不同的函数可以满足相同的功能。
还是那句话,如果大家想把PBI掌握好,时间智能函数这关是必须要过的。话不多说,咱们开始吧!
1、DATEADD 返回一个单列的日期表,将当前筛选上下文中的日期按指定的间隔向未来或者过去平移。
相对与前面的函数,我个人觉得这个函数的使用频率可能会更大一些,如果一定要给它加一个星级,我觉得一定是五星。为啥能给到五星,那大家可以跟着我的步伐来瞧瞧。
语法:
DATEADD ( <日期列>, <偏移量>, Day/Month/ Quarter/Year )
注意:这里的偏移量是正整数时则时往正方向偏移,为0时则表示当天,为负整数时则表示往反方向偏移。
平常我们的工作中会碰到很多需要求环比、同比的需求,那这对于这个函数来讲就是小case了。例如我们需要做个业务量日环比的数据,只需要将偏移量写成-1,第三参数写成DAY就可以了。
DATEADD = CALCULATE(sum(‘业务表‘[件量]),DATEADD(‘业务表‘[日期],-1,DAY))
大家可以看到,DATEADD返回的都是上1天的值,表里没有上一天的则返回的为空。如果我们想和前2天的对比,那是不是只需要将第二参数改成-2就可以了啊,同理如果要跟上一年或者上一个月的数据比较,是不是只需要将第三参数改成相对应的年或者月就可以了啊。当然如果上1年或者上月没有数据,那返回的肯定是空值了。怎么样这个函数相对于来说是不是既简单又实用呢。
2、DATESBETWEEN 返回一个表,其中包含两个给定日期之间的所有日期。
语法:
DATESBETWEEN ( <日期列>, <起始日期>, <截止日期> )
那如果我想要求某一段时间的业务量该如何解决呢?比如我想要知道6月26到6月30日这5天的业务量。
DATESBETWEEN = CALCULATE(sum(‘业务表‘[件量]),DATESBETWEEN(‘业务表‘[日期],DATE(2021,6,26),DATE(2021,6,30)))
从上面案例大家可以看到湖北在这5天里只有2天,上海有4天,那返回的结果时根据实际有的天数进行的汇总。
3、DATESINPERIOD 返回给定区间中的所有日期组成的单列形式的表
其实这个函数跟DATESBETWEEN有异曲同工之妙。只是语法不一样而已
语法:
DATESINPERIOD ( <日期列>, <起始日期>, <偏移量>,Day/Month/ Quarter/Year)
按照上面的案例要求用DATESINPERIOD来实现,结果肯定时一模一样。
DATESBETWEEN是直接指定日期起始到结束区间,DATESINPERIOD则是指定起始日期,然后再指定一个区间长度。
4、DATESMTD 返回一个表,其中包含当前筛选上下文中该月份至今的所有日期
与DATESMTD同组的函数还有DATESQTD、DATESYTD。都是累积函数。它们的区别无非就是月初至今,季初至今还有年初至今,在这里我就用月初至今来讲解,其余两个大家可以下去尝试,用法一模一样。
语法:
DATESMTD ( <日期列> )
还是用上面的数据做案例说明
DATESMTD = CALCULATE(sum(‘业务表‘[件量]),DATESMTD(‘业务表‘[日期]))
大家不难从上面案例看出就是各省份按照各月从最小的日期一直累加到各月最大的日期,到了下一个月又会从头开始累加。
5、FIRSTDATE 返回指定日期列在当前上下文中的第一个非空日期
这里大家一定要注意了,该函数返回的是一个日期,如果还像上面那些函数一样嵌套在CALCULATE里面就会返回与上下文里条件的交集,说白了也就是会返回自身结果。那与这个函数相类似的还有一个LASTDATE。
语法:
FIRSTDATE ( <日期列> )
案例:
上面表格里大家一眼就可以看出湖北最早产生的日期是2021年6月20日,上海最早产生日期是2021年6月27日,整体最早产生的日期是湖北产生的2021年6月20日,那如何将这个日期找出来呢,这里就需要用到FIRSTDATE
FIRSTDATE = FIRSTDATE(‘业务表‘[日期])
如果想要单独看上海或者湖北的最早产生日期,我们可以通过加一个省份的筛选器,具体如下:
那LASTDATE返回的是指定日期列在当前上下文中的最后一个非空日期。语法与FIRSTDATE相同,这里我就不再赘述了。
6、FIRSTNONBLANK 为表的每行计值表达式,返回结果不为空的第一个列值。
说人话:就是通过计算某个结果,而这个结果不为空时的第一个相对应的列名。
语法:
FIRSTNONBLANK ( <列名>, <表达式> )
上案例:大家都知道上面销售表中件量不为空的情况,湖北是6月20日,上海是6月27日,总的来说是湖北的6月20日。那如何找出这个湖北,或者是6月20日呢
大家有没有发现这里找第一个日期的时候跟FIRSTDATE产生的效果是一样的,但是FIRSTNONBLANK似乎更加强大,它还可以找出对应的省份来,返回文本数据。
那么同样道理它也可以增加一个省份的筛选器,不过这里看来似乎没有什么必要。与之相类似的函数当然就是LASTNONBLANK了,这里不用讲想必大家也该知道怎么用了吧!要是有还有不知道的请先自己打自己三个嘴巴,然后再来问我吧!当然我只是开个玩笑啦!可别真自己打自己哦!被人笑了我可不负责。
7、FIRSTNONBLANKVALUE 为表的每行计值表达式,返回结果不为空的第一个列值所对应的表达式的值。
这个函数更上面那个家伙是不是长得很像啊!就是后面多了个VALUE,大家可千万别被它给骗了哦,它就是一头披着羊皮的狼。虽然长得像,可用法却天差地别。这里返回的是表达式的值。
语法:
FIRSTNONBLANKVALUE ( <列名>, <表达式> )
直接上案例吧!
大家看好了,我这里第一参数用的是日期,返回的是湖北的6月20号,是不是没有毛病,那如果我将它改成省份又是什么样呢
结果是不是出乎了你的意料,那这个42343又是个什么东西呢,我们返回原表去瞧一瞧就知道了。
这个42343居然是湖北的所有件量加起来的值。大家知道为什么会是这样吧。因为我们第一参数改成了省份,首先它找到了最早日期对应的省份,也就是湖北,然后再找到湖北后把所有湖北的件量相加,也就是通过SUM(‘业务表‘[件量])反馈出来。讲到这里,是不是让你怦然心动了,又开始浮想翩翩了,我们日常工作中会有哪些需求可以通过它来满足了呢。
最后同样一百遍了,它也有个同父异母的兄弟LASTNONBLANKVALUE,用法也是和它一模一样。就是一个最早,一个最晚的事,这里就留给大家自己去摸索吧。
8、NEXTDAY 返回当前日期的下一天。
NEXTDAY ( <日期列> )
前面已经讲了那么多高大上的时间智能函数,这个弟弟摆在这里想必对大家来说就是个小屁孩了,闭着眼睛就知道它是什么个情况!我都不想讲它了,实在太简单了。不过在这里给大家留个小思考题:钱买你讲个的那些函数中,哪些也可以实现这个函数的功能?最后还是要提一下的是它还有3个同父同母的兄弟:NEXTMONTH、NEXTQUARTER、NEXTYEAR。只能说它爸真厉害!
9、PREVIOUSDAY 返回当前日期的前一天。
PREVIOUSDAY ( <日期列> )
同上面的函数一样,再讲这个函数就有点侮辱大家了。同样我只提一下,它的三个兄弟分别是:PREVIOUSMONTH、PREVIOUSQUARTER、PREVIOUSYEAR。
好啦!今天的内容就讲到这里了,还是那句话,如果大家有什么不明白的随时可以找我沟通!我非常乐意为大家排忧解难。剩下的时间智能函数下节一次搞定,大家敬请关注!感谢!