在數(shù)據(jù)分析過程中,經(jīng)常需要從一個(gè)數(shù)據(jù)推到另外一個(gè)數(shù)據(jù),日期數(shù)據(jù)也是如此,需要從一個(gè)日期推到另外一個(gè)相關(guān)的日期,或者從一群日期推到另外一個(gè)相關(guān)的日期/一群相關(guān)的日期。這一期說的就是日期之間彼此推衍的函數(shù),會(huì)比之前復(fù)雜不少。
第一部分
先用?1. DAX 時(shí)間函數(shù)--生成日期表_monthno是什么函數(shù)-CSDN博客?中提到的 CALENDAR 函數(shù)生成日期表。
1) DATEADD 函數(shù):?? ? ? ? ?
返回一個(gè)單列的日期表,將當(dāng)前篩選上下文中的日期按指定的間隔向未來或者過去平移。
該函數(shù)一看是一個(gè)非常有用的函數(shù),事實(shí)上它非常雞肋,非常雞肋。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?語法:DATEADD ( <日期列>, <偏移量>, <偏移單位> )? ? ?
日期列:?DATE 格式的數(shù)據(jù)列,請(qǐng)注意網(wǎng)上有一句話 :"如果日期列中的數(shù)據(jù)不是連續(xù)間隔,則函數(shù)回返回錯(cuò)誤"???What,這么設(shè)計(jì)是為啥,我完全不明白!? 現(xiàn)實(shí)世界的數(shù)據(jù)沒有這么完美的!? 以上是微軟官方網(wǎng)站的解釋,不死心的我決定直接試試,我生成了一個(gè)不連續(xù)的數(shù)據(jù)表 sheet1,待會(huì)我們?cè)囋嚒?/span>?? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ?
? ? ???
偏移量: 偏移的數(shù)量,是一個(gè)數(shù)字標(biāo)量。?指定了正數(shù),則日期列中的日期向未來推移;如果指定的數(shù)字為負(fù)數(shù),則日期列中的日期向過去推移 。
偏移單位:可以是年 YEAR、月 MONTH、季度 QUARTER、日? DAY
? 但是請(qǐng)一定注意,下面的用法是錯(cuò)誤的,因?yàn)?DATEADD 返回的是表!??!? DATEADD 返回的是表!?。ATEADD 返回的是表?。?!,不能產(chǎn)生新列!
?這么設(shè)計(jì)是為啥,我也完全不明白!?,生成列比生成表好用多了。? ?? ?
好了,現(xiàn)在我們來試試那個(gè)微軟官方注釋是否正確吧。結(jié)果真的讓我莫名其妙!?
?看官們看出來了沒有,面對(duì)不連續(xù)的數(shù)據(jù),DATEADD沒有報(bào)錯(cuò)啊,那個(gè)微軟官方解釋造謠?!可是我仔細(xì)看了下,更悲傷了,因?yàn)閿?shù)據(jù)丟了!原來sheet1中提供了 7 條日期數(shù)據(jù),但是新生成的表格中只有 5 條數(shù)據(jù)!why?!?。‰y道我一開始的理解有重大誤區(qū)。你還別說,是的!? ? ? ?
我重新試了很多種數(shù)據(jù)組合,搭配 DATEADD,大家瞪大眼睛看吧。第一種sheet1數(shù)據(jù)如下:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
第二種sheet1數(shù)據(jù)如下:?? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
總結(jié):?? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ??? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ?
1)日期列數(shù)據(jù)不連續(xù)不會(huì)報(bào)錯(cuò)!但是會(huì)對(duì)<日期列>重新排序? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
2)DATEADD 不是如我希望的那樣把日期列數(shù)據(jù)依次推遲或推前,它是在現(xiàn)有數(shù)據(jù)中進(jìn)行篩選,現(xiàn)有數(shù)據(jù)中如果有符合日期要求的留下來,不符合日期要求的剔除。怎么算符合日期要求呢?有一個(gè)邏輯:首先使用<日期列>中最早的那個(gè)日期,使用上<偏移量>, <偏移單位> 得到一個(gè)新的日期<新日期>。?
比如sheet1第二部分?jǐn)?shù)據(jù)中<日期列>?最早的日期是20240120,當(dāng)<偏移量>, <偏移單位>是 2,DAY 時(shí)候,得到? <新日期> 即?20240122,那么原來的<日期列>中大于等于20240122的日期則形成了新表。
當(dāng)<偏移量>, <偏移單位>是 1,QUARTER 時(shí)候,得到? <新日期> 即?202404,請(qǐng)注意是202404,即只要大于等于20240401即可,而不是一定要大于202420,那么原來的<日期列>中大于等于20240401的日期則形成了新表。
當(dāng)<偏移量>, <偏移單位>是 1,MONTH 時(shí)候,得到? <新日期> 即?202402,那么原來的<日期列>中大于等于202404的日期則形成了新表。
說實(shí)話,我覺得這個(gè)用法好奇特!后來我想明白了,DATEADD 這個(gè)名字起錯(cuò)了,如果使用 DATEFILTER 或者 DATECHOOSE,感覺就會(huì)好多了。??? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
2) DATEDIFF 函數(shù):返回兩個(gè)日期之間指定的間隔數(shù)。? ? ? ? ??
語法:DATEDIFF ( <日期 1>, <日期 2>, <間隔單位> )? ? ? ? ??
<日期 1>, <日期 2>,? ? ? 都是日期格式的數(shù)據(jù),<間隔單位> 則是有YEAR、MONTH、DAY、QUARTER、WEEK、HOUR、MINUTE、SECOND 8 個(gè)枚舉變量。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 我準(zhǔn)備了一組數(shù)據(jù),分別使用了這個(gè)8個(gè)枚舉變量,結(jié)果如下: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ?
總結(jié)一下詳細(xì)用法:
a) 針對(duì)? YEAR、MONTH、DAY、QUARTER、WEEK、HOUR、MINUTE、SECOND 8 個(gè)枚舉變量,DATEDIFF 比較的是其枚舉量對(duì)應(yīng)的值,如 YEAR,只比較年份,比如 20240528 和 20250109, 實(shí)際時(shí)間不到半年,但是DATEDIFF的結(jié)果是1。
b) <日期 1>早于 <日期 2>,則值為正值,相等為 0,反之為負(fù)值。
這個(gè)函數(shù)挽救了我被 DATEADD 傷害到的脆弱心靈。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
3) DATESBETWEEN?函數(shù)
返回一個(gè)表,返回一個(gè)包含一列日期的表,這些日期以指定開始日期,一直持續(xù)到指定的結(jié)束日期。其實(shí)這就是一種篩選,這次名字起得比較好,比 DATEADD 強(qiáng)多了。
語法:DATESBETWEEN ( <日期列>, <起始日期>, <截止日期> )? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
給大家看一個(gè)用法: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
??
4) DATESINPERIOD 函數(shù) ?
返回一個(gè)表,此表包含一列日期,日期以指定的開始日期開始,并按照指定的日期間隔一直持續(xù)到指定的數(shù)字。
DATESINPERIOD ( <日期列>, <起始日期>, <偏移量>, <間隔單位>? ? ? ?
這個(gè)函數(shù)又一次傷到了我!它和DATEADD函數(shù)非常類似,也是篩選日期,區(qū)別在于它增加了一個(gè)<起始日期>,使邏輯更加復(fù)雜(或者說高效?)。但是在計(jì)算新日期時(shí)候兩者有很大區(qū)別,DATEADD 是按照自然月、年等來計(jì)算,而 DATESINPERIOD 是按照周期月、年來計(jì)算。
總結(jié)一下用法:
a)如果<偏移量>是正值,
首先要在<日期列> 找出大于等于? <起始日期>?的所有值, 如沒有則返回空表,結(jié)束。
接著在找到的值中尋找出最早的日期值<最早日期值>,然后根據(jù)<偏移量>, <間隔單位>得到一個(gè)新的日期值<最晚日期值>;
比如<偏移量>, <間隔單位>是2,DAY,從下面的數(shù)據(jù)中,篩選出<最早日期值>20240225和<最晚日期值>?20240226;
比如<偏移量>, <間隔單位>是1,MONTH,從下面的數(shù)據(jù)中,篩選出<最早日期值>20240225和<最晚日期值>?20240324;
最后使用<最早日期值>和?<最晚日期值>來篩選區(qū)間內(nèi)的日期值。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ?
b)如果<偏移量>是負(fù)值,
首先要在<日期列> 找出小于等于? <起始日期>?的所有值, 如沒有則返回空表,結(jié)束。
接著在找到的值中尋找出最晚的日期值<最晚日期值>,然后根據(jù)<偏移量>, <間隔單位>得到一個(gè)新的日期值<最早日期值>;
比如<偏移量>, <間隔單位>是 -4,DAY,從下面的數(shù)據(jù)中,篩選出<最早日期值>20240328和<最晚日期值>?20240325;
比如<偏移量>, <間隔單位>是-1,MONTH,從下面的數(shù)據(jù)中,篩選出<最早日期值>20240228和<最晚日期值>?20240127;
最后使用<最早日期值>和?<最晚日期值>來篩選區(qū)間內(nèi)的日期值。? ? ? ? ? ? ? ? ? ? ? ? ?
5) DATESMTD 函數(shù)??
返回一個(gè)表,此表包含當(dāng)前上下文中該月份至今的一列日期。
?語法:DATESMTD ( <日期列> )?? ? ? ? ?? ?
還用下面語句生成的日期表
日期表 = CALENDAR( DATE( 2024 , 2, 25) ,
DATE( 2024 , 5 , 10 )
)
? ?
此時(shí)可以看出它是找出最晚的一個(gè)月的所有日期表。
6) DATESQTD? 函數(shù)?
函數(shù)返回一個(gè)表,此表包含當(dāng)前上下文中該季度至今的一列日期。
語法:DATESQTD ( <日期列> ),這個(gè)從月?lián)Q成季度,不再贅述
7) DATESYTD?函數(shù)
函數(shù)返回一個(gè)表,其中包含當(dāng)前篩選上下文中當(dāng)前年份至今的所有日期。
語法:DATESYTD ( <日期列> , [年截止日期] );?
這個(gè)和DATESMTD、DATESQTD的區(qū)別在于新增了一個(gè)可選的參數(shù)[年截止日期] ;有了這個(gè)[年截止日期] 則不是默認(rèn)篩選出來整年的日期,而是到了[年截止日期] 就可以了。
8) LASTDATE?函數(shù)?
返回指定日期列在當(dāng)前上下文中的最后一個(gè)非空日期。
語法:LASTDATE ( <日期列> )? ??
還用該語句生成:日期表 = CALENDAR( DATE( 2024 , 2, 25) ,DATE( 2024 , 5 , 10 )?)
9) FIRSTDATE?函數(shù)??? ? ?
返回指定日期列在當(dāng)前上下文中的最前一個(gè)非空日期。
語法:FIRSTDATE?( <日期列> )? ? ? ? ?? ?
還用該語句生成:日期表 = CALENDAR( DATE( 2024 , 2, 25) ,DATE( 2024 , 5 , 10 )?)?文章來源:http://www.zghlxwxcb.cn/news/detail-851361.html
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·~~~~~~這篇博客寫了 3 天,麻煩點(diǎn)個(gè)贊或者收藏再走吧!謝謝同學(xué)!~~~~~~~~~~~~~~~~文章來源地址http://www.zghlxwxcb.cn/news/detail-851361.html
到了這里,關(guān)于3. DAX 時(shí)間函數(shù)-- DATE 日期--一生二,二生三,三生萬物的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!