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.

War es hilfreich?

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:

Von MSDN

Von SQLDev

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.

  1. Erstellen Sie einen neuen Text / String-Parameter (Ich nannte es CheckDateRange)
  2. Lassen Sie leere Werte und machen es versteckte
  3. Verfügbare Werte = none
  4. Erweitert = Standardwerte verwenden
  5. 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
  6. 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top