代码之家  ›  专栏  ›  技术社区  ›  jhale

Reporting Services参数约束

  •  8
  • jhale  · 技术社区  · 17 年前

    4 回复  |  直到 17 年前
        1
  •  6
  •   KyleMit Steven Vachon    11 年前

    您可以检查参数表达式中的EndDate值,如果不正确,请将其设置为StartDate+1个月。

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

    在tbDateParameterMessage文本框的Value属性中:

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

        2
  •  1
  •   Catchops    15 年前

    通常,在SSRS报告中使用Msgbox函数会出现部署问题。它们在我们的开发机器上工作得很好,但在实际部署时很难工作。以下是几个解释问题的链接:

    From MSDN

    From SQLDev

    我的解决方案是一个非常简单的实现,其中报告被停止,但它只是显示一个报告错误,并从报告查看器向用户显示消息。

    1. 允许空白值并将其隐藏
    2. 可用值=无
    3. 默认值=指定值-在值中,使用函数按钮并使用以下命令:=CODE.CheckDateParameters(Parameters!BeginDate.Value,Parameters!EndDate.Value)-请注意,您可以看到已检查日期的参数名为BeginDate和EndDate
    4. 最后,输入以下代码片段作为报告代码:

      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
      

    祝你好运

        3
  •  0
  •   jhale    17 年前

    我使用了隐藏文本框的想法,因为这比让报告崩溃要好。我希望实现的是在执行报告之前强制用户提前更改参数。

    顺便说一句,语法不起作用。我用了这个:

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

    谢谢coldice的建议。

        4
  •  0
  •   ErickTreetops    13 年前
    >     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()函数将无法在SSR上工作。它在SSRS 2010上不起作用。我相信这是一个windows函数,所以不能在呈现的网页上使用。

    推荐文章