SSRS 返回不正确的 WW

SSRS Returning incorrect WW

我有一个 SSRS 报告 (2008R2 3.0),它使用 YYYYWW 格式的工作周参数过滤器。 2018 年,根据 ISO 标准 (source) 有 52 个工作周。

对于默认参数值我select最后WW使用下面的公式:

DATEPART(DateInterval.Year, DATEADD("d", -7, now())) & FORMAT(DATEPART(DateInterval.WeekOfYear, DATEADD("d", -7, now())), "00")

出于某种奇怪的原因,return编辑了 201853。据我了解,给定 运行 是 20180106.

的日期应该是 201852

我知道在 T-SQL 中我可以使用 ISO_WEEK 定义 return 类型但是在 SSRS 中是否有 DateInterval 的等价物?

简化:

DATEPART(DateInterval.WeekOfYear, DATEADD("d",-7,now()))

Returns 53 instead of 52 when ran from 201801-201807.

知道为什么这是 return 错误的 WeekOfYear 值吗?

我认为这可能是由于您的服务器上的区域一周的第一天设置所致。

如果你的一周的第一天是星期六,那么2018年有53周。你可以在SQL服务器中使用DATEFIRST设置来设置一周的第一天。

使用 SELECT @@DATEFIRST 确定您的服务器设置。

此示例代码将显示差异。

SET DATEFIRST 7
SELECT @@DATEFIRST
SELECT DATEPART(WEEK, '2018-12-30')
SET DATEFIRST 1
SELECT @@DATEFIRST
SELECT DATEPART(WEEK, '2018-12-30')

对于您的查询,您可能需要使用 SET DATEFIRST 1 将一周的第一天设置为星期日。

MS Docs: DATEFIRST