我有一個報告服務(SQL 2008)報告與兩個日期/時間參數 - begindate和enddate。我需要限制enddate與begindate相同的月份和年份。這似乎應該是一件容易的事情,但我無法弄清楚。報告服務參數約束
目前,我正在檢查傳遞給存儲過程的參數,並在兩個日期時間參數不在相同的月份和年份中時引發錯誤。我正在尋找一種更完美的方式來完成這一點。
我有一個報告服務(SQL 2008)報告與兩個日期/時間參數 - begindate和enddate。我需要限制enddate與begindate相同的月份和年份。這似乎應該是一件容易的事情,但我無法弄清楚。報告服務參數約束
目前,我正在檢查傳遞給存儲過程的參數,並在兩個日期時間參數不在相同的月份和年份中時引發錯誤。我正在尋找一種更完美的方式來完成這一點。
您可以檢查參數表達式中的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)
在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
我使用隱藏的文本框的想法,因爲它比讓報告崩潰更好。我希望完成的是強制用戶在執行報告之前更改其參數。
順便說一句,語法沒有工作。我用這個代替:
= Month(Parameters!begindate.Value) = Month(Parameters!enddate.Value) and Year(Parameters!begindate.Value) = Year(Parameters!enddate.Value)
感謝coldice這個想法。
是的,我暫時沒有SSRS和VB IDE :)。結帳答案更新。 – 2009-03-03 20:03:04
通常,在SSRS報告中使用Msgbox函數時會出現部署問題。它們在我們的開發機器上運行良好,但在實際部署時可能很難實現。這裏有一對夫婦的說明鏈接的問題:
我的解決方案是一個非常簡單的實現,其中報告被停止,但它只是顯示出與顯示的消息報告錯誤用戶從報表查看器。
最後,對於報告的代碼輸入以下代碼片段:
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
沒有什麼花哨,但完成你所需要的。
祝你好運!
> 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功能,因此無法在渲染的網頁上使用。
我想過這個,但問題是用戶可能沒有注意到日期已被調整。我想要做的就是顯示一個對話框,告訴他們日期必須在同一個月。 – jhale 2009-03-03 15:47:35