最近几个月,我悠闲得仿佛不像一个刚入职的新手,倒像是一个混了大半辈子,两手一摊就等着油灯枯尽的“那位同志”。
不同的是,“那位同志”活得心安理得,随波漂流,或深渊或浅溪,从不担心明天是否还会看见太阳升起。而我嘛,还拖着半湿不干的咸鱼身躯,期待着被贴上商标,等待着被人选中、屠宰、消化、排泄。
可惜海岸太高,我看不到人们的表情,听不到人们的声音,不知道他们何时才来打捞,而我,何时才能成为人们的盘中餐,口中食。
空闲之际,我将把DAX函数分为日期和时间函数、筛选器函数、信息函数、逻辑函数、数学函数、统计函数、文本函数7大模块来进行逐步介绍。
本篇详细介绍日期和时间函数。
1.DATE(YEAR,MONTH,DAY)
函数作用:拼接年、月、天,返回datetime格式的日期。
示例:DATE(2019,5,22)=2015/5/22。
应用场景:将非datetime的日期转化为datetime格式。
比如要将20190522这种非标准的日期格式转化为datetime格式,可先用left、mid、right函数将20190522拆为2019(年),05(月),22(天),再使用DATE函数将其转换为datetime格式的2019/5/22。
注意事项:
年份<100时,自动加上1900,比如,如果年份为99,那么将加上1900,返回值为1999。
月份>12或月份<1时,自动向后一年顺延或向前一年倒推,比如20151501的返回值为2016/3/1,2015-120的返回值为2014/11/20。
天份>当月最大天或天份<1时,自动向后一月顺延或向前一月倒推,比如20150232的返回值为2015/3/4,201502-1的返回值为2015/1/30。
2.YEAR(DATE),MONTH(DATE),DAY(DATE)
函数作用:以 1900-9999 范围的四位整数形式返回日期的年份,以1-12范围的整数形式返回日期的月份,以1-31范围的整数形式返回日期的天份。
示例:YEAR(2019/5/22)=2019,MONTH(2019/5/22)=5,DAY(2019/5/22)=22。
应用场景:获取datetime格式日期的年、月、天。
注意事项:该函数使用客户端计算机的区域设置和日期时间设置来理解文本值。比如计算机的区域设置将日期格式定义为月/日/年,而日期以日/月/年的格式提供,那么22/5/2019将无法被解释为2019年5月22日,而是解释为无效日期。
3.TIME(HOUR,MINUTE,SECOND)
函数作用:拼接小时、分钟、秒,返回datetime格式的时间。
示例:TIME(11,16,54)=11:16:54
注意事项:hour:高于23的值将被除以24,余数被视为小时值,minute:任何大于59的值都将被转换为小时和分钟,second:任何大于59的值都将被转换为小时、分钟、秒钟,比如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)
函数作用:将datetime格式的时间返回为小时、分钟、秒。
示例:HOUR(11:16:54 )=11,MINIUTE(11:16:54 )=16,SECOND(11:16:54 )=54
5.NOW()和TODAY()
函数作用:获取当前日期。
示例:NOW()=2019/5/22 16:56:15,TOTAY()=2019/5/22 12:00:00
应用场景:应用于计算时间维度是从过往某日截止到当前的场景。
比如,已知某人出生年份为1995,获取年龄,YEAR(NOW())-1995。
注意事项:NOW 函数很相似但返回精确时间,而 TODAY 为所有日期都返回时间值 12:00:00 PM。
6.EDATE(START_DATE,MONTHS)
函数作用:返回在开始日期之前或之后指示的月数的日期。
示例:EDATE(2019/5/22,1)=2019/6/22。
应用场景:按天同比计算。
比如,想将后一月每日的销量与前一月进行对比,就可以用EDATE函数,同比计算问题后面会用独立的篇幅进行说明,此处不进行赘述。
注意事项:MONTHS值可正可负,负值即向前倒推;如果请求的日期过了相应月份的最后一天,则返回该月份的最后一天,比如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)
函数作用:返回指定月份数之前或之后的月份的最后一天的日期,该日期采用 datetime 格式。
示例:EOMONTH(2019/5/22,1)=2019/6/30。
应用场景:库存计算。
比如有一种场景,库存按月计算,今天是2019/5/22,欲计算当前库存,需要用4月月底库存+5月库存变动量,库存计算问题后面会用独立的篇幅进行说明,此处不进行赘述。
注意事项:如果输入的月份不是整数,则将该数字向上或向下舍入到最接近的整数,比如EOMONTH("2019/5/22",1.5)的返回值为2019/7/31,因为1.5四舍五入为2。
8.WEEKDAY(DATE,RETURN_TYPE)
函数作用:返回用来标识某一日期是星期几的 1 到 7 之间的数字。 默认情况下,这个星期几的范围是从 1(星期日)到 7(星期六)。
示例:WEEKDAY(2019/5/22,2)=3。2019/5/22是周三。
应用场景:应用于按周进行数据分析的场景。
注意事项:RETURN_TYPE=1,周从星期日 (1) 开始,到星期六 (7) 结束;RETURN_TYPE=2,周从星期一 (1) 开始,到星期日(7) 结束;RETURN_TYPE=3,周从星期一 (0) 开始,到星期日 (6) 结束。
9.WEEKNUM(DATE,RETURN_TYPE)
函数作用:根据RETURN_TYPE 值返回给定日期和年份的周数。 周数指示该周在数字上属于一年中的何处。
示例:WEEKNUM(2019/5/22,2)=21。2019/5/22是2019年的第21周。
应用场景:应用于按周进行数据分析的场景。
注意事项:RETURN_TYPE=1,周从星期日开始。 工作日的编号为 1 到 7;RETURN_TYPE=2,周从星期一开始。 工作日的编号为 1 到 7。
10.YEARFRAC(START_DATE,END_DATE,BASIS)
函数作用:计算两个日期之间的完整天数占全年天数的比例。
示例:YEARFRAC(2019/5/22,2019/6/22,1)=0.8493,这两个日期之间的天数31天占全年天数365的84.93%。
应用场景:计算要从整年的收益或负债中分配给特定期限的比例。
注意事项:BASIS=0,返回类型为US (NASD) 30/360;BASIS=1,返回类型为实际/实际;BASIS=2,返回类型为实际/360;BASIS=3,返回类型为实际/365;BASIS=4,返回类型为欧洲 30/360。