最近幾個(gè)月,我悠閑得仿佛不像一個(gè)剛?cè)肼毜男率郑瓜袷且粋€(gè)混了大半輩子,兩手一攤就等著油燈枯盡的“那位同志”。
不同的是,“那位同志”活得心安理得,隨波漂流,或深淵或淺溪,從不擔(dān)心明天是否還會(huì)看見(jiàn)太陽(yáng)升起。而我嘛,還拖著半濕不干的咸魚(yú)身軀,期待著被貼上商標(biāo),等待著被人選中、屠宰、消化、排泄。
可惜海岸太高,我看不到人們的表情,聽(tīng)不到人們的聲音,不知道他們何時(shí)才來(lái)打撈,而我,何時(shí)才能成為人們的盤(pán)中餐,口中食。
空閑之際,我將把DAX函數(shù)分為日期和時(shí)間函數(shù)、篩選器函數(shù)、信息函數(shù)、邏輯函數(shù)、數(shù)學(xué)函數(shù)、統(tǒng)計(jì)函數(shù)、文本函數(shù)7大模塊來(lái)進(jìn)行逐步介紹。

本篇詳細(xì)介紹日期和時(shí)間函數(shù)。
1.DATE(YEAR,MONTH,DAY)
函數(shù)作用:拼接年、月、天,返回datetime格式的日期。
示例:DATE(2019,5,22)=2015/5/22。
應(yīng)用場(chǎng)景:將非datetime的日期轉(zhuǎn)化為datetime格式。
比如要將20190522這種非標(biāo)準(zhǔn)的日期格式轉(zhuǎn)化為datetime格式,可先用left、mid、right函數(shù)將20190522拆為2019(年),05(月),22(天),再使用DATE函數(shù)將其轉(zhuǎn)換為datetime格式的2019/5/22。
注意事項(xiàng):
年份<100時(shí),自動(dòng)加上1900,比如,如果年份為99,那么將加上1900,返回值為1999。
月份>12或月份<1時(shí),自動(dòng)向后一年順延或向前一年倒推,比如20151501的返回值為2016/3/1,2015-120的返回值為2014/11/20。
天份>當(dāng)月最大天或天份<1時(shí),自動(dòng)向后一月順延或向前一月倒推,比如20150232的返回值為2015/3/4,201502-1的返回值為2015/1/30。
2.YEAR(DATE),MONTH(DATE),DAY(DATE)
函數(shù)作用:以 1900-9999 范圍的四位整數(shù)形式返回日期的年份,以1-12范圍的整數(shù)形式返回日期的月份,以1-31范圍的整數(shù)形式返回日期的天份。
示例:YEAR(2019/5/22)=2019,MONTH(2019/5/22)=5,DAY(2019/5/22)=22。
應(yīng)用場(chǎng)景:獲取datetime格式日期的年、月、天。
注意事項(xiàng):該函數(shù)使用客戶端計(jì)算機(jī)的區(qū)域設(shè)置和日期時(shí)間設(shè)置來(lái)理解文本值。比如計(jì)算機(jī)的區(qū)域設(shè)置將日期格式定義為月/日/年,而日期以日/月/年的格式提供,那么22/5/2019將無(wú)法被解釋為2019年5月22日,而是解釋為無(wú)效日期。
3.TIME(HOUR,MINUTE,SECOND)
函數(shù)作用:拼接小時(shí)、分鐘、秒,返回datetime格式的時(shí)間。
示例:TIME(11,16,54)=11:16:54?
注意事項(xiàng):hour:高于23的值將被除以24,余數(shù)被視為小時(shí)值,minute:任何大于59的值都將被轉(zhuǎn)換為小時(shí)和分鐘,second:任何大于59的值都將被轉(zhuǎn)換為小時(shí)、分鐘、秒鐘,比如TIME(27,0,0)=TIME(3,0,0)=3:00 AM,TIME(0,750,0)=TIME(12,30,0)=12:30 PM。
4.HOUR(TIME),MINUTE(TIME),SECOND(TIME)
函數(shù)作用:將datetime格式的時(shí)間返回為小時(shí)、分鐘、秒。
示例:HOUR(11:16:54?)=11,MINIUTE(11:16:54?)=16,SECOND(11:16:54?)=54
5.NOW()和TODAY()
函數(shù)作用:獲取當(dāng)前日期。
示例:NOW()=2019/5/22 16:56:15,TOTAY()=2019/5/22 12:00:00
應(yīng)用場(chǎng)景:應(yīng)用于計(jì)算時(shí)間維度是從過(guò)往某日截止到當(dāng)前的場(chǎng)景。
比如,已知某人出生年份為1995,獲取年齡,YEAR(NOW())-1995。
注意事項(xiàng):NOW 函數(shù)很相似但返回精確時(shí)間,而 TODAY 為所有日期都返回時(shí)間值 12:00:00 PM。
6.EDATE(START_DATE,MONTHS)
函數(shù)作用:返回在開(kāi)始日期之前或之后指示的月數(shù)的日期。
示例:EDATE(2019/5/22,1)=2019/6/22。
應(yīng)用場(chǎng)景:按天同比計(jì)算。
比如,想將后一月每日的銷量與前一月進(jìn)行對(duì)比,就可以用EDATE函數(shù),同比計(jì)算問(wèn)題后面會(huì)用獨(dú)立的篇幅進(jìn)行說(shuō)明,此處不進(jìn)行贅述。
注意事項(xiàng):MONTHS值可正可負(fù),負(fù)值即向前倒推;如果請(qǐng)求的日期過(guò)了相應(yīng)月份的最后一天,則返回該月份的最后一天,比如EDATE(2015/1/28,1),EDATE(2015/1/29,1),EDATE(2015/1/30,1),EDATE(2015/1/31,1)的返回值都為2015/2/28。
7.EOMONTH(START_DATE,MONTHS)
函數(shù)作用:返回指定月份數(shù)之前或之后的月份的最后一天的日期,該日期采用 datetime 格式。
示例:EOMONTH(2019/5/22,1)=2019/6/30。
應(yīng)用場(chǎng)景:庫(kù)存計(jì)算。
比如有一種場(chǎng)景,庫(kù)存按月計(jì)算,今天是2019/5/22,欲計(jì)算當(dāng)前庫(kù)存,需要用4月月底庫(kù)存+5月庫(kù)存變動(dòng)量,庫(kù)存計(jì)算問(wèn)題后面會(huì)用獨(dú)立的篇幅進(jìn)行說(shuō)明,此處不進(jìn)行贅述。
注意事項(xiàng):如果輸入的月份不是整數(shù),則將該數(shù)字向上或向下舍入到最接近的整數(shù),比如EOMONTH("2019/5/22",1.5)的返回值為2019/7/31,因?yàn)?.5四舍五入為2。
8.WEEKDAY(DATE,RETURN_TYPE)
函數(shù)作用:返回用來(lái)標(biāo)識(shí)某一日期是星期幾的 1 到 7 之間的數(shù)字。 默認(rèn)情況下,這個(gè)星期幾的范圍是從 1(星期日)到 7(星期六)。
示例:WEEKDAY(2019/5/22,2)=3。2019/5/22是周三。
應(yīng)用場(chǎng)景:應(yīng)用于按周進(jìn)行數(shù)據(jù)分析的場(chǎng)景。
注意事項(xiàng):RETURN_TYPE=1,周從星期日 (1) 開(kāi)始,到星期六 (7) 結(jié)束;RETURN_TYPE=2,周從星期一 (1) 開(kāi)始,到星期日(7) 結(jié)束;RETURN_TYPE=3,周從星期一 (0) 開(kāi)始,到星期日 (6) 結(jié)束。
9.WEEKNUM(DATE,RETURN_TYPE)
函數(shù)作用:根據(jù)RETURN_TYPE 值返回給定日期和年份的周數(shù)。 周數(shù)指示該周在數(shù)字上屬于一年中的何處。
示例:WEEKNUM(2019/5/22,2)=21。2019/5/22是2019年的第21周。
應(yīng)用場(chǎng)景:應(yīng)用于按周進(jìn)行數(shù)據(jù)分析的場(chǎng)景。
注意事項(xiàng):RETURN_TYPE=1,周從星期日開(kāi)始。 工作日的編號(hào)為 1 到 7;RETURN_TYPE=2,周從星期一開(kāi)始。 工作日的編號(hào)為 1 到 7。
10.YEARFRAC(START_DATE,END_DATE,BASIS)
函數(shù)作用:計(jì)算兩個(gè)日期之間的完整天數(shù)占全年天數(shù)的比例。
示例:YEARFRAC(2019/5/22,2019/6/22,1)=0.8493,這兩個(gè)日期之間的天數(shù)31天占全年天數(shù)365的84.93%。
應(yīng)用場(chǎng)景:計(jì)算要從整年的收益或負(fù)債中分配給特定期限的比例。
注意事項(xiàng):BASIS=0,返回類型為US (NASD) 30/360;BASIS=1,返回類型為實(shí)際/實(shí)際;BASIS=2,返回類型為實(shí)際/360;BASIS=3,返回類型為實(shí)際/365;BASIS=4,返回類型為歐洲 30/360。