了解日期时间函数
对于所有类型的数据分析而言,时间和日期的处理都是一项重要内容。DAX 提供了大量此类功能的函数,其中一些与 Excel 中的函数类似,可以对 DateTime 数据类型进行简单的转换,这类时间和日期的函数是:
DATE- DATE ( <Year>, <Month>, <Day> )
复制代码
返回日期时间格式的日期值,注意:当年份在 0-99 之间,DATE 返回的年份会此在基础上自动加上 1900。超过 99,直接将值用作年份
DATE 日期函数与 Excel 同名函数的区别 图片@东军
DATEVALUE
将文本格式的日期转换为日期时间格式
DAY
返回一个从 1 到 31 的数字,用来表示日期中的天数
EDATE- EDATE ( <StartDate>, <Months> )
复制代码
返回按指定月数平移后的日期
EOMONTH- EOMONTH ( <StartDate>, <Months> )
复制代码
返回指定月数平移后的月份的最后一天
HOUR
以数字形式返回从 0(上午 12 点)到 23(下午 11 点)的时间
MONTH
从 1(1 月)到 12(12 月)中返回当前日期所在的月份数字
MINUTE
返回一个从 0 到 59 的数字,表示分钟
NOW
返回当前日期和时间
QUARTER
从数字 1-4 中返回当前日期所在的季度值,2019 年 12 月加入 Power BI 的新函数。
SECOND
返回一个从 0 到 59 的数字,代表秒数
TIME- TIME ( <Hour>, <Minute>, <Second> )
复制代码
将数字形式的小时、分钟和秒转换为日期时间格式
TIMEVALUE
将文本格式的时间转换为日期时间格式
TODAY
以日期时间格式返回当前日期
WEEKDAY- WEEKDAY ( <Date>, [<ReturnType>] )
复制代码
返回当前日期对应的星期数,ReturnType=2 以周一为起始
WEEKNUM- WEEKNUM ( <Date>, [<ReturnType>] )
复制代码
返回当前日期位于一年中的周数,ReturnType=2 以周一为起始
YEAR
以四位数整数返回日期的年份
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] )
复制代码
使用日期和时间函数提取日期信息的示例 |