从数据到信息
从信息到洞察

日期时间函数

了解日期时间函数

对于所有类型的数据分析而言,时间和日期的处理都是一项重要内容。DAX 提供了大量此类功能的函数,其中一些与 Excel 中的函数类似,可以对 DateTime 数据类型进行简单的转换,这类时间和日期的函数是:

DATE

DATE ( <Year>, <Month>, <Day> )

返回日期时间格式的日期值,注意:当年份在 0-99 之间,DATE 返回的年份会此在基础上自动加上 1900。超过 99,直接将值用作年份

DATE 日期函数与 Excel 同名函数的区别  图片@东军

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] )

使用日期和时间函数提取日期信息的示例

6
说点什么

1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
4 评论数
5 被回复的评论
6 订阅评论的人数
 
查看最近回复
查看最热评论
  订阅本文评论  
最新 最旧 得票最多
提醒
游客
小海葵

老师,用time(0,0,36000)转为何会报错?

成员
spongebill

请问老师,比如有一列是时间,那么用什么简单的公式可以返回去年同一天的日期呢?

成员
阳光洒在泡泡里

想问下老师,为什么QUARTER函数在使用时会出错,错误原因:公式中的错误。是因为我的Excel是2016的吗?

DAX 圣经

导读

初识 DAX

DAX 基础知识

DAX 原理

DAX 高级原理

基础函数类型

迭代函数

CALCULATE 函数

CALCULATE 调节器

基础表函数

条件判断函数

查找匹配函数

时间智能函数

统计类函数

投影函数

分组/连接函数

集合函数

其他函数