了解日期时间函数
对于所有类型的数据分析而言,时间和日期的处理都是一项重要内容。DAX 提供了大量此类功能的函数,其中一些与 Excel 中的函数类似,可以对 DateTime 数据类型进行简单的转换,这类时间和日期的函数是:
DATE
DATE ( <Year>, <Month>, <Day> )
返回日期时间格式的日期值,注意:当年份在 0-99 之间,DATE 返回的年份会此在基础上自动加上 1900。超过 99,直接将值用作年份
DATEVALUE
DATEVALUE ( <DateText> )
将文本格式的日期转换为日期时间格式
DAY
DAY ( <Date> )
返回一个从 1 到 31 的数字,用来表示日期中的天数
EDATE
EDATE ( <StartDate>, <Months> )
返回按指定月数平移后的日期
EOMONTH
EOMONTH ( <StartDate>, <Months> )
返回指定月数平移后的月份的最后一天
HOUR
HOUR ( <Datetime> )
以数字形式返回从 0(上午 12 点)到 23(下午 11 点)的时间
MONTH
MONTH ( <Date> )
从 1(1 月)到 12(12 月)中返回当前日期所在的月份数字
MINUTE
MINUTE ( <Datetime> )
返回一个从 0 到 59 的数字,表示分钟
NOW
NOW ( )
返回当前日期和时间
QUARTER
QUARTER ( <Date> )
从数字 1-4 中返回当前日期所在的季度值,2019 年 12 月加入 Power BI 的新函数。
SECOND
SECOND ( <Datetime> )
返回一个从 0 到 59 的数字,代表秒数
TIME
TIME ( <Hour>, <Minute>, <Second> )
将数字形式的小时、分钟和秒转换为日期时间格式
TIMEVALUE
TIMEVALUE ( <TimeText> )
将文本格式的时间转换为日期时间格式
TODAY
TODAY ( )
以日期时间格式返回当前日期
WEEKDAY
WEEKDAY ( <Date>, [<ReturnType>] )
返回当前日期对应的星期数,ReturnType=2 以周一为起始
WEEKNUM
WEEKNUM ( <Date>, [<ReturnType>] )
返回当前日期位于一年中的周数,ReturnType=2 以周一为起始
YEAR
YEAR ( <Date> )
以四位数整数返回日期的年份
YEARFRAC
YEARFRAC ( <StartDate>, <EndDate>, [<Basis>] )
以年的分数形式表示<StartDate>和<EndDate>之间的天数。YEARFRAC 在计算日期差值,比如年龄的时候比 DATEDIFF 更精确,但某些特殊情况下可能会导致错误结果,详见这篇文章
为了对日期进行更复杂的操作,比如年度汇总值之间的比较或计算某个度量值年初至今的累计值,我们会使用称为时间智能函数的函数,这部分内容将在时间智能函数系列文章中介绍。
闰年错误
1983 年发布的流行电子表格程序 Lotus 1-2-3 在处理 DateTime 数据类型时出现了一个错误。它认为 1900 年是闰年,尽管事实并非如此(一个世纪的最后一年是闰年,前提是前两位数字除以 4 没有余数)。当时,Excel 第一版的开发团队故意复制了这个 bug,以保持与 Lotus 1-2-3 的兼容性。从那以后,出于兼容性考虑,Excel 的每一个新版本都把这个 bug 作为一个特性来维护。
为了保持与 Excel 的向后兼容,目前这个 bug 仍然在 DAX 中。Bug 的存在(或者我们应该称之为特性吗?)可能会导致 1900 年 3 月 1 日之前出现错误。因此,根据设计,DAX 的第一个官方支持的日期是 1900 年 3 月 1 日。在此日期之前执行的日期计算可能会导致错误,应该被认为是不准确的。
如果你需要在 1900 年之前进行计算,你应该使用数学方法来将其移动到 1900 年之后的日期,执行计算,然后再平移回去
函数实例
DateTime 数据类型内部使用浮点数,其中整数部分对应于 1899 年 12 月 30 日之后的天数,而小数部分则表示当天的时间。小时、分钟和秒被换算成一天的小数部分。因此,将整数添加到 DateTime 类型的值中会使该值增加相应的天数。但是,你可能会发现使用转换函数从日期中提取日、月和年更方便。通过下图你可以看到如何从包含日期列表的表中提取此信息:
Day = DAY ( Calendar[Date] ) Month = FORMAT ( Calendar[Date], "mmmm" ) Year = YEAR ( Calendar[Date] )
老师,用time(0,0,36000)转为何会报错?
请问老师,比如有一列是时间,那么用什么简单的公式可以返回去年同一天的日期呢?
想问下老师,为什么QUARTER函数在使用时会出错,错误原因:公式中的错误。是因为我的Excel是2016的吗?