[知识体系] 日期时间函数

  [复制链接]
查看230249 | 回复173 | 2021-2-21 19:31:18 | 显示全部楼层 |阅读模式
了解日期时间函数


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

DATE
  1. DATE ( <Year>, <Month>, <Day> )
复制代码

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


7136211936391.png

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

DATEVALUE
  1. DATEVALUE ( <DateText> )
复制代码

将文本格式的日期转换为日期时间格式

DAY
  1. DAY ( <Date> )
复制代码

返回一个从 1 到 31 的数字,用来表示日期中的天数

EDATE
  1. EDATE ( <StartDate>, <Months> )
复制代码

返回按指定月数平移后的日期

EOMONTH
  1. EOMONTH ( <StartDate>, <Months> )
复制代码

返回指定月数平移后的月份的最后一天

HOUR
  1. HOUR ( <Datetime> )
复制代码

以数字形式返回从 0(上午 12 点)到 23(下午 11 点)的时间

MONTH
  1. MONTH ( <Date> )
复制代码

从 1(1 月)到 12(12 月)中返回当前日期所在的月份数字

MINUTE
  1. MINUTE ( <Datetime> )
复制代码

返回一个从 0 到 59 的数字,表示分钟

NOW
  1. NOW ( )
复制代码

返回当前日期和时间

QUARTER
  1. QUARTER ( <Date> )
复制代码

从数字 1-4 中返回当前日期所在的季度值,2019 年 12 月加入 Power BI 的新函数。

SECOND
  1. SECOND ( <Datetime> )
复制代码

返回一个从 0 到 59 的数字,代表秒数

TIME
  1. TIME ( <Hour>, <Minute>, <Second> )
复制代码

将数字形式的小时、分钟和秒转换为日期时间格式

TIMEVALUE
  1. TIMEVALUE ( <TimeText> )
复制代码

将文本格式的时间转换为日期时间格式

TODAY
  1. TODAY ( )
复制代码

以日期时间格式返回当前日期

WEEKDAY
  1. WEEKDAY ( <Date>, [<ReturnType>] )
复制代码

返回当前日期对应的星期数,ReturnType=2 以周一为起始

WEEKNUM
  1. WEEKNUM ( <Date>, [<ReturnType>] )
复制代码

返回当前日期位于一年中的周数,ReturnType=2 以周一为起始

YEAR
  1. YEAR ( <Date> )
复制代码

以四位数整数返回日期的年份

YEARFRAC
  1. 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 类型的值中会使该值增加相应的天数。但是,你可能会发现使用转换函数从日期中提取日、月和年更方便。通过下图你可以看到如何从包含日期列表的表中提取此信息:
  1. Day = DAY ( Calendar[Date] )

  2. Month = FORMAT ( Calendar[Date], "mmmm" )

  3. Year = YEAR ( Calendar[Date] )
复制代码

7136211936392.jpeg

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

使用道具 举报

winxp | 2021-4-24 18:01:33 | 显示全部楼层
看起来不错
回复

使用道具 举报

jaoye | 2021-6-10 21:18:38 来自手机 | 显示全部楼层
不错 支持一个了
回复

使用道具 举报

自由仔 | 2021-6-22 19:17:12 | 显示全部楼层
我只是路过,不发表意见
回复

使用道具 举报

MP仔仔 | 2021-7-5 14:53:07 来自手机 | 显示全部楼层
路过的帮顶
回复

使用道具 举报

kuangmao | 2021-7-5 15:39:06 | 显示全部楼层
秀起来~
回复

使用道具 举报

风云仔 | 2021-7-11 10:43:10 | 显示全部楼层
秀起来~
回复

使用道具 举报

珉头 | 2021-8-10 16:53:07 来自手机 | 显示全部楼层
说的不错,学习了
回复

使用道具 举报

天山村夫 | 2021-8-26 14:49:05 | 显示全部楼层
看帖要回,回帖才健康,在踩踩,楼主辛苦了!
回复

使用道具 举报

明月照我心 | 2021-9-26 23:40:26 | 显示全部楼层
珍爱生命,果断回帖。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则