Ограничение параметра служб отчетов - PullRequest
8 голосов
/ 03 марта 2009

У меня есть отчет служб отчетов (SQL 2008) с двумя параметрами даты / времени - begindate и enddate. Мне нужно ограничить конечную дату тем же месяцем и годом, что и у новичка. Кажется, это должно быть легко, но я не могу понять это.

В настоящее время я проверяю параметры, переданные хранимой процедуре, и выявляю ошибку, если два параметра datetime не находятся в одном и том же месяце и году. Я ищу более элегантный способ сделать это.

Ответы [ 4 ]

6 голосов
/ 03 марта 2009

Вы можете проверить значение EndDate в выражении параметра, и если оно неверно, установите для него значение StartDate + 1 Month.
Что-то вроде:

= IIF(DateDiff(DateInterval.Month, Parameters!StartDate.Value, Parameters!EndDate.Value) = 0, Parameters!EndDate.Value, AddDate(DateInterval.Month, 1, Parameters!StartDate.Value))

Если вы просто хотите уведомить пользователя, вы можете разместить скрытое текстовое поле с соответствующим форматированием (красный большой шрифт) и сообщение о неверном диапазоне параметров даты. В скрытом наборе выражений

= (DateDiff(DateInterval.Month, Parameters!StartDate.Value, Parameters!EndDate.Value) <> 0)

Также вы можете комбинировать оба действия с пользовательским кодом:

Public DateMessage As String

Public Function ValidateDate(StartDate As DateTime, EndDate As DateTime) As DateTime
  Dim ResultDate As DateTime
  If (DateDiff(DateInterval.Month, StartDate, EndDate) <> 0) Then
    ResultDate = AddDate(DateInterval.Month, 1, StartDate)
    DateMessage = String.Format("End Date parameter value {0} 
      was out of range and was changed to {1}", EndDate, ResultDate)
  Else
    ResultDate = EndDate
  End If
End Function

Затем в выражении значения параметра:

= Code.ValidateDate(Parameters!StartDate.Value, Parameters!EndDate.Value)

Свойство In Value текстового поля tbDateParameterMessage:

= Code.DateMessage

А в выражении Hidden property:

= String.IsNullOrEmpty(Code.DateMessage)

EDIT Но если вы хотите остановить запуск отчета, используйте этот код:

Public Function CheckDate(SDate as Date, EDate as Date) as Integer
    Dim msg as String
    msg = ""
    If (SDate > EDate)  Then
        msg="Start Date should not be later than End Date"
    End If
    If msg <> "" Then
        MsgBox(msg, 16, "Parameter Validation Error")
        Err.Raise(6,Report) 'Raise an overflow
    End If
End Function

взято с форума SQLServerCentral .

1 голос
/ 23 мая 2011

Очень часто возникают проблемы с использованием функции Msgbox в отчете SSRS. Они отлично работают на наших машинах для разработки, но при их развертывании может быть сложно начать работать. Вот несколько ссылок, объясняющих проблемы:

От MSDN

Из SQLDev

Моим решением была ОЧЕНЬ упрощенная реализация, в которой отчет был остановлен, но он просто показывает ошибку отчета с сообщением, отображаемым пользователю из средства просмотра отчетов.

  1. Создать новый текстовый / строковый параметр (я назвал его CheckDateRange)
  2. Разрешить пустые значения и сделать их скрытыми
  3. Доступные значения = нет
  4. Дополнительно = Использовать значения по умолчанию
  5. Значения по умолчанию = указать значения - в поле Значение используйте функциональную кнопку и используйте следующее: = CODE.CheckDateParameters (Параметры! BeginDate.Value, Параметры! EndDate.Value) - обратите внимание, что вы можете видеть имена моих параметров для проверенных даты: BeginDate и EndDate
  6. Наконец, для кода отчета введите следующий фрагмент кода:

    Function CheckDateParameters(StartDate as Date, EndDate as Date) as Integer
    Dim msg as String
    msg = ""
    If (StartDate > EndDate) Then
      msg="Start Date should not be later than End Date"
      Err.Raise(22000, "VBCore.Utility", msg)
    End If
    End Function
    

Ничего особенного, но выполняет то, что вам нужно.

Удачи!

0 голосов
/ 02 июля 2013
>     Public Function CheckDate(SDate as Date, EDate as Date) as Integer Dim msg as String
>      msg = ""
>      If (SDate > EDate)  Then msg="Start Date should not be later than End Date"
>      End If
>      If msg <> "" Then MsgBox(msg, 16, "Parameter Validation Error") Err.Raise(6,Report)                    'Raise an overflow
>      End If End Function

Если они не внесли изменения, функция MsgBox () не будет работать в SSRS. Он не работает в SSRS 2010. Я считаю, что это функция Windows, поэтому ее нельзя использовать на отображаемой веб-странице.

0 голосов
/ 03 марта 2009

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

Кстати, синтаксис не работает. Я использовал это вместо:

= Month(Parameters!begindate.Value) = Month(Parameters!enddate.Value) and Year(Parameters!begindate.Value) = Year(Parameters!enddate.Value)

Спасибо Coldice за идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...