注意
不建议将此函数用于 视觉计算,因为它可能会返回毫无意义的结果。
对于日期列输入,返回一个表,该表包含以指定开始日期开头的日期列,并一直持续到指定的结束日期。
对于日历输入,返回以指定开始日期开头的表,并一直持续到指定的结束日期。 该表包含所有主标记列和所有时间相关列。
此函数适合作为筛选器传递给 CALCULATE 函数。 使用它按自定义日期范围筛选表达式。
注意
如果使用标准日期间隔(如天、月、季度或年份),建议使用更适合的 DATESINPERIOD 函数。
语法
DATESBETWEEN(<dates> or <calendar>, <StartDate>, <EndDate>)
参数
| 术语 | 定义 |
|---|---|
dates or calendar |
包含日期或日历引用的列 |
StartDate |
日期/天表达式。 如果使用日历语法,请使用与标记为“天”类别的主列相同的数据类型。 |
EndDate |
日期/天表达式。 如果使用日历语法,请使用与标记为“天”类别的主列相同的数据类型。 |
返回值
对于日期列输入,包含单个日期值的列的表。
对于日历输入,包含所有主标记列和所有时间相关列的表。
言论
在最常见的用例中,
dates是对标记日期表的日期列的引用。如果
StartDateBLANK,则StartDate将是dates列中最早的值。 对于日历,它将是标记为日期的列中的第一个值。如果
EndDateBLANK,则EndDate将是dates列中的最新值。 对于日历,它将是标记为日期的列中的最后一个值。用作
StartDate和EndDate的日期是包容性的。 例如,如果StartDate值为 2019 年 7 月 1 日,则该日期将包含在返回的表中(前提是dates列中存在日期)。对于日期列输入,返回的表只能包含存储在列中的
Dates日期。 因此,例如,如果Dates列从 2017 年 7 月 1 日起开始,并且StartDate值为 2016 年 7 月 1 日,则返回的表将从 2017 年 7 月 1 日起开始。对于日历输入,如果在标记的日期列中找不到输入日期,则会将其 BLANK 视为,因此将使用第一个/最后一个值。
对于日历输入,请使用与开始日期和结束日期标记的日期列相同的数据类型和格式。 例如,如果列使用格式 YYYY-Sn-Qn-Mnn-Wnn-Dnn(例如“2014-S2-Q4-M11-W45-D03”),则开始日期和结束日期必须遵循相同的格式(例如,“2015-S2-Q4-M11-W45-D03” )。 否则,行为是未定义的。
在计算列或行级别安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。
例
以下 Sales 表度量值定义使用 DATESBETWEEN 函数生成 最新 (LTD) 计算。 自时间开始以来,生存期表示一段时间的度量值的积累。
请注意,公式使用 MAX 函数。 此函数返回筛选器上下文中的最新日期。 因此,DATESBETWEEN 函数返回从最早日期开始到报告最新日期的日期表。
本文中的示例可用于示例 Adventure Works DW 2020 Power BI Desktop 模型。 若要获取模型,请参阅 DAX 示例模型。
Customers LTD =
CALCULATE (
DISTINCTCOUNT ( Sales[CustomerKey] ),
DATESBETWEEN ( 'Date'[Date], BLANK (), MAX ( 'Date'[Date] ) )
)
假设 日期 表中存储的最早日期是 2017 年 7 月 1 日。 因此,当报表按 2020 年 6 月筛选度量值时,DATESBETWEEN 函数返回日期范围从 2017 年 7 月 1 日到 2020 年 6 月 30 日。
基于日历的时间智能示例
以下 Sales 表度量值定义使用 DATESBETWEEN 函数生成 最新 (LTD) 计算。 自时间开始以来,生存期表示一段时间的度量值的积累。
请注意,公式使用 MAX 函数。 此函数返回筛选器上下文中的最大日期键。 因此,DATESBETWEEN 函数返回从最早日期开始到报告最新日期的日期表。 DateKey 用作示例,用于显示“Day”类别可以使用非日期类型的列进行标记
Customers LTD =
CALCULATE (
DISTINCTCOUNT ( Sales[CustomerKey] ),
DATESBETWEEN ( FiscalCalendar, BLANK (), MAX ( 'Date'[DateKey] ) )
)