Службы Reporting Ограничения Параметра
У меня есть отчет служб reporting services (SQL 2008) с двумя параметрами даты/времени - begindate и enddate. Мне нужно ограничить enddate тем же месяцем и годом, что и begindate. Кажется, это должно быть легко сделать, но я не могу понять.
В настоящее время я проверяю параметры, переданные хранимой процедуре, и вызываю ошибку, если два параметра datetime не находятся в одном месяце и Году. Я ищу более элегантный способ решения этот.
4 ответов
вы можете проверить значение EndDate в выражении параметра, и если оно неверно, установите его в StartDate + 1 месяц.
Что-то вроде:
= IIF(DateDiff(DateInterval.Month, Parameters!StartDate.Value, Parameters!EndDate.Value) = 0, Parameters!EndDate.Value, AddDate(DateInterval.Month, 1, Parameters!StartDate.Value))
если вы просто хотите уведомить Пользователя, вы можете разместить скрытое текстовое поле с соответствующим форматированием (красный большой шрифт) и сообщение о неправильном диапазоне параметров даты. В скрытом выражении set
= (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)
в свойстве Value текстового поля tbDateParameterMessage:
= Code.DateMessage
и в выражении скрытого свойства:
= String.IsNullOrEmpty(Code.DateMessage)
редактировать Но если вы хотите остановить выполнение отчета, используйте этот пользовательский код:
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.
очень часто возникают проблемы с развертыванием с использованием функции Msgbox в отчете SSRS. Они отлично работают на наших машинах разработки, но могут быть трудными для работы при фактическом развертывании. Вот несколько ссылок, объясняющих проблемы:
мое решение было очень упрощенной реализацией, где отчет был остановлен, но он просто показывает ошибку отчета с сообщением отображается пользователю из средства просмотра отчетов.
- создайте новый параметр text / string (я назвал его CheckDateRange)
- разрешить пустые значения и сделать его скрытым
- доступные значения = нет
- Advanced = использовать значения по умолчанию
- значения по умолчанию = укажите значения-в значении, используйте кнопку функции и используйте следующее: =код.CheckDateParameters (Параметры!BeginDate.Значение, Параметры!Параметр enddate.Value) - обратите внимание, что вы можете видеть мой имена параметров для проверяемых дат: BeginDate и EndDate
-
наконец, для кода отчета введите следующий фрагмент кода:
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
ничего особенного, но выполняет то, что вам нужно.
удачи!
я использовал идею скрытого текстового поля, потому что это было лучше, чем позволить сбою отчета. Я надеялся, что это заставит пользователя изменить свои параметры перед выполнением отчета.
кстати, синтаксис не работает. Я использовал это вместо:
= Month(Parameters!begindate.Value) = Month(Parameters!enddate.Value) and Year(Parameters!begindate.Value) = Year(Parameters!enddate.Value)
спасибо coldice за идею.
> 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, поэтому ее нельзя использовать на отображаемой веб-странице.