Contrainte de paramètre Reporting Services
-
03-07-2019 - |
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.
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:
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.
- Créez un nouveau paramètre text / string (je l'ai appelé CheckDateRange)
- Autoriser les valeurs vides et le masquer
- Valeurs disponibles = aucune
- Avancé = Utiliser les valeurs par défaut
- 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
-
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.