Power BI DAX 之日期函数
Power BI DAX 之日期函数
此篇文章描述了日期函数 而非时间智能函数。
日期函数是完成对日期的简单计算,如:某天是星期几。
时间智能函数完成基于日期的分析逻辑计算
1 时间智能函数不是日期函数
2 计算 同比 环比 最近7天 等业务逻辑
日期函数一般常用如下
1.DATE
以日期时间格式返回指定的日期
DATE(<year>, <month>, <day>)
2.DATEVALUE
将文本格式的日期转换为日期时间格式的日期。
DATEVALUE(date_text)
3.DAY
返回月份中的第几天,一个从 1 到 31 的数字。
DAY(<date>)
4.EDATE
返回开始日期之前或之后指定月数的日期。使用 EDATE 计算到期日或到期日,该日期与发行日在当月的同一天。
EDATE(<start_date>, <months>)
<months> 是小数 会四舍五入 例如 1.5->2
EDATE 跟 EMONTH 区别 前者返回+/-之后的日期,后者返回+/-之后的日期 的月份最后一天
例如 2021/3/1 (-1month)-> 2021/2/1
后者 2021/3/1 (-1month)-> 2021/2/28
5.EOMONTH
返回指定月数之前或之后的月份最后一天的日期时间格式的日期。使用 EOMONTH 计算到期日或到期日,该日期是该月的最后一天。
EOMONTH(<start_date>, <months>)
<months> 是小数 会四舍五入 例如 1.5->2
EDATE 跟 EMONTH 区别 前者返回+/-之后的日期,后者返回+/-之后的日期 的月份最后一天
例如 2021/3/1 (-1month)-> 2021/2/1
后者 2021/3/1 (-1month)-> 2021/2/28
6.HOUR
将小时作为从 0 (12:00 AM) 到 23 (11:00 PM) 的数字返回。
HOUR(<datetime>)
7.MINUTE
MINUTE(<datetime>)
给定日期和时间值,以从 0 到 59 的数字返回分钟。
8.MONTH
以从 1(一月)到 12(十二月)的数字返回月份。
MONTH(<datetime>)
9.NOW/TODAY
NOW() 以日期时间格式返回当前日期和时间。
TODAY() 返回当前日期。
二者区别 NOW 返回的当前时间除了日期还有时间(时分秒)
TODAY仅仅返回当前日期
10.SECOND
以 0 到 59 的数字形式返回时间值的秒数。
SECOND(<time>)
11.TIME
将以数字形式给出的小时、分钟和秒转换为日期时间格式的时间。
TIME(hour, minute, second)
12.TIMEVALUE
将文本格式的时间转换为日期时间格式的时间。
TIMEVALUE(time_text)
12.WEEKDAY
返回一个从 1 到 7 的数字,标识日期的星期几。默认情况下,日期范围从 1(星期日)到 7(星期六)。
WEEKDAY(<date>, <return_type>)
默认return_type 1
return_type:1,星期从星期日 (1) 开始,到星期六 (7) 结束。编号为 1 到 7。
return_type:2,一周从星期一 (1) 开始,到星期日 (7) 结束。
return_type:3,周从星期一 (0) 开始,到星期日 (6) 结束。编号为 1 到 7。
案例weekday日期函数1 WEEKDAY('表 2'[Date],1)
weekday日期函数2 WEEKDAY('表 2'[Date],2)
weekday日期函数3 WEEKDAY('表 2'[Date],3)
return_type 1 是从周日开始算 1 往后计算到 7(周六)
return_type 2 是从周一开始算1 往后计算到7(周日)
return_type 3 是从周一开始算0 往后计算到6(周日)
13.WEEKNUM
根据return_type值返回给定日期的周数。周数表示一周在一年内的数字位置。
有两个系统用于此功能:
- 系统 1 - 包含 1 月 1 日的那一周是一年中的第一周,编号为第 1 周。
- 系统 2 - 包含一年中第一个星期四的那一周是一年中的第一周,编号为第 1 周。该系统是 ISO 8601 中指定的方法,通常称为欧洲周编号系统。
WEEKNUM(<date>[, <return_type>])
-
默认情况下,WEEKNUM 函数使用日历约定,其中包含 1 月 1 日的一周被视为一年中的第一周。然而,在欧洲广泛使用的 ISO 8601 日历标准将第一周定义为新年中大部分天数(四天或更多天)的那一周。这意味着,如果return_type是 21 以外的任何有效值,那么对于 1 月的第一周有 3 天或更短时间的任何年份,WEEKNUM 函数将返回不同于 ISO 8601 定义的周数。
-
对于return_type,除 21 外,某些 DirectQuery 数据源可能不支持以下有效值:
WEEKNUM日期函数1 = WEEKNUM('表 2'[Date],1)
WEEKNUM日期函数2 = WEEKNUM('表 2'[Date],2)
WEEKNUM日期函数21 = WEEKNUM('表 2'[Date],21)
1 跟 2 区别在于周开始于周日 跟周一
不同于21 是因为21 采用了系统2 (四天或更多天)的那一周才会成为第一周) 所以1.1 1.2 没有超过四天不算作为第一周
14.YEAR
以 1900-9999 范围内的四位整数形式返回日期的年份。
YEAR(<date>)
15.YEARFRA
返回两个日期之间的天数与全年天数的占比
YEARFRAC(<start_date>, <end_date>, <basis>)
学期 | 定义 |
---|---|
开始日期 | 日期时间格式的开始日期。 |
结束日期 | 日期时间格式的结束日期。 |
基础 | (可选)要使用的天数基础类型。所有参数都被截断为整数。 基础 - 描述 0 - 美国 (NASD) 30/360 1 - 实际/实际 2 - 实际/360 3 - 实际/365 4 - 欧洲 30/360 |
你也许经常用DATEDIFF,但DATEDIFF只能返回大概的差异,而这个函数会精确到时间占全年的比例,并返回任意精度的小数位数,在需要精确年度差异的时候很好用,并且可以控制全年是按360天还是365天来计算。
16.DATEDIFF
返回两个日期之间的间隔边界数。
DATEDIFF(<Date1>, <Date2>, <Interval>)
学期 | 定义 |
---|---|
日期1 | 标量日期时间值。 |
日期2 | 标量日期时间值。 |
间隔 | 比较日期时使用的间隔。该值可以是以下之一: - SECOND - MINUTE - HOUR - DAY - WEEK - MONTH - QUARTER - YEAR |
17.CALENDAR
返回一个表,其中包含一个名为“Date”的单列,其中包含一组连续的日期。日期范围是从指定的开始日期到指定的结束日期,包括这两个日期。
CALENDAR(<start_date>, <end_date>)
18.CALENDARAUTO
返回一个表,其中包含名为“Date”的单个列,其中包含一组连续的日期。日期范围是根据模型中的数据自动计算的。
CALENDARAUTO([fiscal_year_end_month])
-
日期范围计算如下:
- 模型中不在计算列或计算表中的最早日期作为 MinDate。
- 模型中不在计算列或计算表中的最新日期作为 MaxDate。
- 返回的日期范围是与 MinDate 关联的会计年度开始和与 MaxDate 关联的会计年度结束之间的日期
在此示例中,数据模型中的 MinDate 和 MaxDate 分别为 2010 年 7 月 1 日和 2011 年 6 月 30 日。
CALENDARAUTO()
将返回 2010 年 1 月 1 日至 2011 年 12 月 31 日之间的所有日期。
CALENDARAUTO(3)
将返回 2010 年 3 月 1 日至 2012 年 3 月 31 日之间的所有日期。
更多推荐
所有评论(0)