前面已經給大家分享了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。
好啦!今天的內容就講到這里了,還是那句話,如果大家有什么不明白的隨時可以找我溝通!我非常樂意為大家排憂解難。剩下的時間智能函數下節一次搞定,大家敬請關注!感謝!