注意
不建议在视觉对象计算中使用此函数,因为它可能会返回无意义的结果。
对于日期列输入,返回一个表,该表包含一列日期从当前上下文中指定 dates 列中的日期移回一年的时间。
对于日历输入,返回一个表,该表根据日历从当前上下文中的日期移回一年。 该表包含所有主标记列和所有时间相关列。
语法
SAMEPERIODLASTYEAR(<dates> or <calendar>)
parameters
| 术语 | 定义 |
|---|---|
dates or calendar |
包含日期或日历引用的列 |
返回值
对于日期列输入,返回日期值的单列表。
对于日历输入,返回包含所有主标记列和所有时间相关列的表。
备注
dates参数可以是以下任一参数:- 对日期/时间列的引用,
- 返回日期/时间值的单个列的表表达式,
- 一个布尔表达式,用于定义日期/时间值的单列表。
主题 CALCULATE介绍了对布尔表达式的约束。
返回的日期和等效公式
DATEADD(dates, -1, year)返回的日期相同在计算列或行级别安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。
示例
以下示例公式创建一个度量值,用于计算经销商销售额的上一年销售额。
= CALCULATE(SUM(ResellerSales_USD[SalesAmount_USD]), SAMEPERIODLASTYEAR(DateTime[DateKey]))
特殊行为
当所选内容包括过去两天的月份时,SAMEPERIODLASTYEAR 将使用“扩展”语义,并将包含到月底的天数。 例如,当 2009 年 2 月 27 日和 28 日包含在所选内容中时,SAMEPERIODLASTYEAR 将在 2008 年 2 月 27 日至 29 日返回。
仅当选定内容包含过去两天的月份时,才会发生此行为。 如果仅选择了 2 月 27 日,它将转到 2 月 27 日。
= SAMEPERIODLASTYEAR(DateTime[DateKey])
基于日历的时间智能示例
以下示例公式创建一个度量值,用于计算经销商销售额的上一年销售额。
= CALCULATE(SUM(ResellerSales_USD[SalesAmount_USD]), SAMEPERIODLASTYEAR(FiscalCalendar))
经典时间智能和日历时间智能之间的行为差异
某些方案在比较经典和日历时间智能时可能会产生不同的结果。 例如,在农历年份中,SamePeriodLastYear 将在日期粒度上产生不同的结果。 在基于日历的时间智能中,2008年2月29日改回一年的结果是2007年3月1日,因为它被视为今年的第60天。 在经典时间智能中,同一班次返回 2007 年 2 月 28 日。 解决方法是使用 DATEADD(日历, -<年>、月数)。 例如,如果一年在日历中具有 13 个月,请使用 DATEADD(Calendar, -13, month)。 这种方法将逐月转移,因此 2008 年 2 月将转到 2007 年 2 月。