Reporting Services Parameter Constraint
-
03-07-2019 - |
Frage
Ich habe einen Reporting Service (SQL 2008) Bericht mit zwei Datum / Zeit-Parametern - Begindate und enddate. Ich brauche enddate zum gleichen Monat und Jahr als Begindate zu beschränken. Dies scheint, wie es eine einfache Sache zu tun sein sollte, aber ich kann es nicht herausgefunden.
Derzeit bin ich die Parameter überprüft auf die gespeicherte Prozedur übergeben und Anheben einen Fehler, wenn die beiden Datetime-Parameter nicht im selben Monat und Jahr. Ich suche eine elegantere Art und Weise, dies zu erreichen.
Lösung
können Sie überprüfen den EndDate Wert im Parameter Ausdruck, und wenn es falsch ist, setzen Sie ihn auf Startdate + 1 Monat.
So etwas wie:
= IIF(DateDiff(DateInterval.Month, Parameters!StartDate.Value, Parameters!EndDate.Value) = 0, Parameters!EndDate.Value, AddDate(DateInterval.Month, 1, Parameters!StartDate.Value))
Wenn Sie nur Benutzer benachrichtigen möchten, können Sie einige versteckte Textfeld mit entsprechenden Formatierung platzieren (red große Schrift) und Meldung über Datum Parameter falsche Bereich. In versteckten Ausdruck Satz
= (DateDiff(DateInterval.Month, Parameters!StartDate.Value, Parameters!EndDate.Value) <> 0)
Sie können aber auch beide Aktionen mit benutzerdefinierten Code kombinieren:
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
Dann in Parameterwert Ausdruck:
= Code.ValidateDate(Parameters!StartDate.Value, Parameters!EndDate.Value)
In Value-Eigenschaft tbDateParameterMessage Textbox:
= Code.DateMessage
Und in Versteckt Eigenschaft Ausdruck:
= String.IsNullOrEmpty(Code.DateMessage)
Bearbeiten Aber wenn Sie möchten Bericht laufen stoppen, benutzen Sie diese benutzerdefinierten Code:
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
Es ist genommen von SQLServerCentral Forum .
Andere Tipps
Sehr oft gibt es Bereitstellung Probleme mit der MsgBox-Funktion in einem SSRS-Bericht verwenden. Sie arbeiten an unserer Entwicklung Maschinen in Ordnung, kann aber schwierig sein, zum Laufen zu bringen, wenn sie tatsächlich im Einsatz. Hier sind ein paar Links, um die Probleme zu erklären:
Meine Lösung war eine sehr einfache Implementierung, bei der der Bericht gestoppt wurde, aber es zeigt einfach einen Bericht Fehler mit der für den Benutzer aus dem Report Viewer angezeigten Meldung.
- Erstellen Sie einen neuen Text / String-Parameter (Ich nannte es CheckDateRange)
- Lassen Sie leere Werte und machen es versteckte
- Verfügbare Werte = none
- Erweitert = Standardwerte verwenden
- Standardwerte = geben Sie Werte - in Wert, verwenden Sie die Funktionstaste und verwenden Sie die folgende: = CODE.CheckDateParameters - beachten Sie, dass Sie meine Paramter Namen für die überprüft sehen können (Parameter BeginDate.Value, Parameter EndDate.Value!) Termine sind Begindate und EndDate
-
Schließlich wird für den Bericht Code geben Sie die folgende Code-Snippet:
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
Nichts Besonderes, aber vollbringt, was Sie brauchen.
Viel Glück!
habe ich die versteckte Textfeld Idee, weil es besser war, als der Bericht Absturz im Stich gelassen. Was ich habe gehofft, war zu erreichen, um den Benutzer zu zwingen, ihre Parameter vorne vor dem Bericht ausgeführt zu ändern.
BTW, hat die Syntax nicht funktionieren. Ich habe diese Stelle:
= Month(Parameters!begindate.Value) = Month(Parameters!enddate.Value) and Year(Parameters!begindate.Value) = Year(Parameters!enddate.Value)
Danke ColdIce für die Idee.
> 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
Es sei denn, sie haben Änderungen vorgenommen die MsgBox () Funktion auf SSRS nicht funktionieren. Es funktioniert nicht auf SSRS 2010. Ich glaube, es ist eine Windows-Funktion ist so nicht auf einer gerenderten Webseite verwendet werden.