SSRS返回错误的WW

时间:2019-01-07 12:09:02

标签: reporting-services ssrs-2008-r2 iso week-number dateadd

我有一个SSRS报告(2008R2 3.0),该报告在工作周中使用参数过滤器,格式为YYYYWW。在2018年,基于ISO标准(source)有52个工作周。

对于默认参数值,我使用以下公式选择最后一个WW:

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

由于某种奇怪的原因,它返回了201853。据我了解,应该给出201852的运行日期为20180106

我知道在T-SQL中可以使用ISO_WEEK定义返回类型,但是SSRS中的DateInterval是否等效?

为了简化:

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

从201801-201807运行时返回53,而不是52。

关于为什么返回错误的WeekOfYear值的任何想法?

1 个答案:

答案 0 :(得分:1)

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

enter image description here

如果一周的第一天是星期六,那么2018年有53周。您可以在SQL Server中使用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')

enter image description here

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

MS Docs: DATEFIRST