2009-03-03 4 views
8

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

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

ответ

6

Вы можете проверить значение 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)) 

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

= (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) 

В Значение свойства tbDateParameterMessage текстовое поле:

= Code.DateMessage 

И в выражении Hidden собственности:

= 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 forum.

+0

Я думал об этом, но проблема в том, что пользователь может не заметить, что дата была скорректирована. То, что я хотел бы сделать, это нечто вроде отображения диалога, в котором говорится, что даты должны быть в том же месяце. – jhale

0

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

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

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

Спасибо за простуду за идею.

+0

Да, я временно без SSRS и VB IDE :). Оформить заказ. –

+0

И кстати, что касается проверки года, если дата начала = 12/29/2008 и дата окончания = 01/01/2009? –

1

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

From MSDN

From SQLDev

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

  1. Создать новый параметр текст/строка (я назвал его CheckDateRange)
  2. Разрешить пустые значения и сделать его Hidden
  3. Доступные значения = нет
  4. Advanced = Использовать значения по умолчанию
  5. Значения по умолчанию = укажите значения - в поле Значение, используйте функциональную кнопку и используйте следующее: = CODE.CheckDateParameters (Parameters! BeginDate.Value, Parameters! 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
>  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, поэтому ее нельзя использовать на отображаемой веб-странице.

Смежные вопросы