SSRS возвращает неверный WW - PullRequest
0 голосов
/ 07 января 2019

У меня есть отчет SSRS (2008R2 3.0), который использует фильтры параметров для рабочей недели в формате YYYYWW. В 2018 году было 52 рабочих недели по стандарту ISO ( источник ).

Для значения параметра по умолчанию я выбираю последний WW, используя следующую формулу:

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

По какой-то странной причине это вернулось 201853. Из того, что я понимаю, это должно быть 201852 с учетом даты запуска 20180106.

Я знаю, что в T-SQL я могу определить тип возврата, используя ISO_WEEK, но есть ли эквивалент для DateInterval в SSRS?

Для упрощения:

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

Возвращает 53 вместо 52 при запуске с 201801-201807.

Есть идеи, почему это возвращает неправильное значение WeekOfYear?

1 Ответ

0 голосов
/ 09 января 2019

Я думаю, это может быть связано с вашей региональной настройкой Первый день недели на вашем сервере.

enter image description here

Если ваш первый день недели субботний, в 2018 году будет 53 недели. Первый день недели можно установить с помощью параметра DATEFIRST в SQL Server.

Используйте 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

...