Найти дату начала недели с прошлого года в SSRS - PullRequest
0 голосов
/ 08 мая 2018

Мы предполагаем, что неделя начинается с понедельника и заканчивается в воскресенье.Пытаясь сравнить с прошлым годом, как мы можем получить правильные даты?Например, если я хочу сравнить эту неделю (с 23.10.2017 по 29.10.2017) с годом на той же неделе (с 24.10.2016 по 30.10.2016)

Я задаю 2параметры в SSRS BeginDate и BeginDateLastYear.Значение BeginDate = 23.10.2017 Как я могу принять значение BeginDateLastYear в качестве значения с точностью до понедельника того же номера недели в прошлом году (в данном случае это должно быть 24.10.2016)?

В настоящее время я пытаюсь установить значение StartDate в прошлом году, как

BeginDateLastYear =DATEADD(DateInterval.Year,-1,Parameters!BeginDate.Value)

Также я пытался использовать

 =DATEADD(DateInterval.Week,-52,Parameters!BeginDate.Value) , but not very sure will this work precisely to same week start date of last year

1 Ответ

0 голосов
/ 08 мая 2018

В службах отчетов вы можете использовать следующее выражение для BeginDateLastYear

= DATEADD(
    DateInterval.WeekOfYear, 
    IIF( 
        DATEPART(DateInterval.WeekOfYear,DATEADD(DateInterval.WeekOfYear, -52   ,  Parameters!BeginDate.Value))<> DATEPART(DateInterval.WeekOfYear, Parameters!BeginDate.Value) , 
        -53, 
        -52 
        ) ,  
    Parameters!BeginDate.Value
    )

Кодовая логика:

Если при возвращении на 52 недели двухнедельные числа не совпадают, возвращаются на 53 недели, в противном случае возвращаются на 52 недели

В случае, если вы хотите реализовать его в SQL без использования второго параметра (SSRS имеет некоторые проблемы с каскадными параметрами)

SET @BeginDateLastYear = 
    DATEADD(
        wk, 
        CASE WHEN DATEPART(wk,DATEADD(wk, -52   , @BeginDate))<> DATEPART(wk,@BeginDate) 
            THEN -53 
            ELSE -52 END, 
        @BeginDate
            )
...