Question

J'ai un rapport Reporting Services (SQL 2008) avec deux paramètres Date / Heure - begindate et enddate. Je dois limiter la date de fin au même mois et à la même année. Cela semble être une chose facile à faire, mais je ne peux pas le comprendre.

Actuellement, je vérifie les paramètres transmis à la procédure stockée et génère une erreur si les deux paramètres datetime ne sont pas dans le même mois et dans la même année. Je cherche un moyen plus élégant d'y parvenir.

Était-ce utile?

La solution

Vous pouvez vérifier la valeur EndDate dans l'expression de paramètre et, si elle est incorrecte, définissez-la sur StartDate + 1 Month.
Quelque chose comme:

= IIF(DateDiff(DateInterval.Month, Parameters!StartDate.Value, Parameters!EndDate.Value) = 0, Parameters!EndDate.Value, AddDate(DateInterval.Month, 1, Parameters!StartDate.Value))

Si vous souhaitez simplement notifier l'utilisateur, vous pouvez placer une zone de texte masquée avec le formatage approprié (police de caractères rouge) et un message sur la plage incorrecte des paramètres de date. Dans l'ensemble d'expressions masquées

= (DateDiff(DateInterval.Month, Parameters!StartDate.Value, Parameters!EndDate.Value) <> 0)

Vous pouvez également combiner les deux actions avec un code personnalisé:

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

Ensuite, dans l'expression de valeur de paramètre:

= Code.ValidateDate(Parameters!StartDate.Value, Parameters!EndDate.Value)

Propriété In Value de la zone de texte tbDateParameterMessage:

= Code.DateMessage

Et dans l'expression de propriété masquée:

= String.IsNullOrEmpty(Code.DateMessage)

MODIFIER Mais si vous souhaitez arrêter l'exécution du rapport, utilisez ce code personnalisé:

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

Cela provient du forum SQLServerCentral .

Autres conseils

Très souvent, l'utilisation de la fonction Msgbox dans un rapport SSRS pose des problèmes de déploiement. Ils fonctionnent bien sur nos machines de développement, mais peuvent être difficiles à faire fonctionner lorsqu'ils sont effectivement déployés. Voici quelques liens expliquant les problèmes:

à partir de MSDN

De SQLDev

Ma solution était une implémentation TRÈS simpliste dans laquelle le rapport a été arrêté, mais affiche simplement une erreur de rapport avec le message affiché à l'utilisateur à partir du visualiseur de rapport.

  1. Créez un nouveau paramètre text / string (je l'ai appelé CheckDateRange)
  2. Autoriser les valeurs vides et le masquer
  3. Valeurs disponibles = aucune
  4. Avancé = Utiliser les valeurs par défaut
  5. Valeurs par défaut = spécifier les valeurs - Dans Valeur, utilisez le bouton de fonction et utilisez les éléments suivants: = CODE.CheckDateParameters (Paramètres! BeginDate.Value, Paramètres! EndDate.Value) - notez que vous pouvez voir mes noms de paramètres pour les les dates sont BeginDate et EndDate
  6. Enfin, pour le code de rapport, entrez l'extrait de code suivant:

    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
    

Rien d'extraordinaire, mais répond à vos besoins.

Bonne chance!

J’ai utilisé l’idée de la zone de texte masquée, car c’était mieux que de laisser le rapport planter. Ce que j’espérais accomplir était de forcer l’utilisateur à modifier ses paramètres avant l’exécution du rapport.

BTW, la syntaxe n'a pas fonctionné. J'ai utilisé ceci à la place:

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

Merci, coldice pour cette idée.

>     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

Sauf s'ils ont apporté des modifications, la fonction MsgBox () ne fonctionnera pas sur SSRS. Cela ne fonctionne pas sur SSRS 2010. Je crois que c'est une fonction Windows, donc ne peut pas être utilisé sur une page Web rendue.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top