Exemples d'expressions dans Reporting Services
Certaines expressions sont fréquemment employées dans les rapports. Elles comprennent notamment des expressions pour modifier l'apparence des données dans un rapport, pour changer les propriétés d'éléments de rapport et pour affecter la façon dont les données sont récupérées. Cette rubrique décrit quelques expressions qu'il est possible d'utiliser pour des tâches courantes dans un rapport. Pour plus d'informations, consultez Création d'expressions dans Reporting Services.
Fonctions
Dans un rapport, beaucoup d'expressions contiennent des fonctions. Vous pouvez mettre en forme des données, appliquer une logique et accéder aux métadonnées du rapport en utilisant ces fonctions. Vous pouvez écrire des expressions qui utilisent des fonctions de la bibliothèque d'exécutables Visual Basic et des fonctions des espaces de noms System.Convert et System.Math. Vous pouvez ajouter des références à des fonctions issues d'autres assemblys ou du code personnalisé. Vous pouvez également utiliser des classes de Microsoft .NET Framework, notamment System.Text.RegularExpressions. Pour plus d'informations sur les fonctions Visual Basic prises en charge dans les expressions, consultez « Visual Basic Run-Time Library » (en anglais) sur le site Web msdn.microsoft.com.
Fonctions Visual Basic
Vous pouvez utiliser des fonctions Microsoft Visual Basic pour manipuler les données affichées dans des zones de texte ou utilisées pour des paramètres, des propriétés et d'autres zones du rapport. Cette section fournit des exemples décrivant certaines de ces fonctions. Pour plus d'informations sur les fonctions Visual Basic, consultez la documentation de Visual Basic.
Fonctions de date
Vous pouvez utiliser les fonctions Visual Basic pour fournir des informations de date dans votre rapport.
L'expression ci-dessous contient la fonction Today qui fournit la date actuelle. Cette expression peut être utilisée dans une zone de texte pour afficher la date sur le rapport ou bien, dans un paramètre pour filtrer les données basées sur la date actuelle.
=Today()
La fonction DateAdd est utile pour fournir une plage de dates basées sur un seul paramètre. L'expression ci-dessous indique une date qui se situe six mois après la date provenant du paramètre nommé StartDate.
=DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)
L'expression suivante contient la fonction Year qui affiche l'année pour une date particulière. Vous pouvez l'utiliser pour grouper des dates ou pour afficher l'année en tant que libellé d'un ensemble de dates. Cette expression affiche l'année pour un groupe donné de dates de commande. La fonction Month et d'autres fonctions peuvent également être utilisées pour manipuler des dates. Pour plus d'informations, consultez la documentation de Visual Basic .NET.
=Year(Fields!OrderDate.Value)
Fonctions de chaîne
Vous pouvez utiliser les fonctions Visual Basic pour manipuler des chaînes dans votre rapport.
Vous pouvez combiner plusieurs champs en utilisant des opérateurs de concaténation et des constantes Visual Basic. L'expression suivante renvoie deux champs, chacun sur une ligne séparée dans la même zone de texte.
=Fields!FirstName.Value & vbCrLf & Fields!LastName.Value
Vous pouvez mettre en forme des dates et des nombres dans une chaîne avec la fonction Format. L'expression ci-dessous affiche les valeurs des paramètres StartDate et EndDate dans un format de date longue.
=Format(Parameters!StartDate.Value, "D") & " through " & Format(Parameters!EndDate.Value, "D")
Si la zone de texte contient uniquement une date ou un nombre, utilisez plutôt la propriété Format de la zone de texte pour appliquer la mise en forme, plutôt que la fonction Format dans la zone de texte.
Les fonctions Right, Len et InStr sont utiles pour retourner une sous-chaîne, par exemple en coupant DOMAIN\username pour ne récupérer que le nom de l'utilisateur. L'expression ci-dessous retourne la partie de la chaîne à droite de la barre oblique inverse (\) à partir d'un paramètre nommé User :
=Right(Parameters!User.Value, Len(Parameters!User.Value) - InStr(Parameters!User.Value, "\"))
L'expression ci-dessous retourne la même valeur que précédemment, en utilisant des membres de la classe String de .NET Framework au lieu des fonctions Visual Basic :
=Parameters!User.Value.Substring(Parameters!User.Value.IndexOf("\")+1, Parameters!User.Value.Length-Parameters!User.Value.IndexOf("\")-1)
Vous pouvez afficher les valeurs sélectionnées à partir d'un paramètre à valeurs multiples. L'exemple ci-dessous utilise la fonction Join pour concaténer les valeurs sélectionnées du paramètre MySelection en une chaîne unique qu'il est possible de définir en tant qu'expression de la valeur d'une zone de texte dans un élément de rapport.
= Join(Parameters!MySelection.Value)
Si la zone de texte contient uniquement une date ou un nombre, utilisez plutôt la propriété Format de la zone de texte pour appliquer la mise en forme, plutôt que la fonction Format dans la zone de texte.
Les fonctions Regex de l'espace de noms System.Text.RegularExpressions de .NET Framework sont utiles si vous souhaitez modifier le format des chaînes existantes (par exemple, le format d'un numéro de téléphone). L'expression ci-dessous utilise la fonction Replace pour modifier le format d'un numéro de téléphone à dix chiffres dans un champ et le faire passer du format nnn-nnn-nnnn au format (nnn) nnn-nnnn :
=System.Text.RegularExpressions.Regex.Replace(Fields!Phone.Value, "(\d{3})[ -.]*(\d{3})[ -.]*(\d{4})", "($1) $2-$3")
Fonctions de conversion
Vous pouvez utiliser des fonctions Visual Basic pour convertir, si nécessaire, des types de données dans votre rapport.
Vous pouvez utiliser des fonctions Visual Basic pour convertir, si besoin est, des types de données. Les fonctions de conversion sont fréquemment employées pour éliminer ou mettre en forme des messages #Erreur dans un rapport. L'expression ci-dessous affiche le nombre de valeurs sélectionnées pour le paramètre à valeurs multiples MySelection.
=CStr(Parameters!MySelection.Count)
Fonctions de décision
Vous pouvez utiliser les fonctions Visual Basic pour évaluer une valeur d'entrée et retourner une autre valeur en fonction du résultat.
La fonction Iif retourne une valeur sur deux, laquelle dépend du fait que l'expression évaluée est vraie ou fausse. L'expression ci-dessous utilise la fonction Iif pour retourner une valeur booléenne True si la valeur de LineTotal est supérieure à 100. Sinon, elle retourne False :
=Iif(Fields!LineTotal.Value > 100, True, False)
L'expression ci-dessous utilise plusieurs fonctions Iif (également appelées « Iifs imbriqués ») pour retourner une valeur sur trois, qui dépend de la valeur de PctComplete.
=Iif(Fields!PctComplete.Value >= .8, "Green", Iif(Fields!PctComplete.Value >= .5, "Amber", "Red"))
L'expression ci-dessous retourne également une valeur sur les trois, basée sur la valeur de PctComplete, mais utilise à la place la fonction Switch, qui retourne la valeur associée à la première expression dans une série qui prend la valeur True :
=Switch(Fields!PctComplete.Value >= .8, "Green", Fields!PctComplete.Value >= .5, "Amber", Fields!PctComplete.Value < .5, "Red")
L'expression ci-dessous teste la valeur du champ ImportantDate et retourne la valeur « Red » si elle a plus d'une semaine et la valeur « Blue » autrement. Cette expression peut être utilisée pour contrôler la propriété Color d'une zone de texte dans un élément de rapport.
=IIF(DateDiff("d",Fields!ImportantDate.Value, Now())>7,"Red","Blue")
L'expression ci-dessous teste la valeur d'un champ PhoneNumber pour savoir s'il est null (Nothing dans Visual Basic), puis retourne la mention « Aucune valeur » à la place de la valeur NULL. Cette expression peut être utilisée pour contrôler la valeur d'une zone de texte dans un élément de rapport.
=IIF(Fields!PhoneNumber.Value Is Nothing,"No Value",Fields!PhoneNumber.Value)
L'expression suivante teste la valeur du champ Department et retourne un nom de sous-rapport ou null (Nothing dans Visual Basic). Cette expression peut être utilisée pour des sous-rapports d'extraction conditionnelle.
=Iif(Fields!Department.Value = "Development", "EmployeeReport", Nothing)
L'expression suivante teste si la valeur d'un champ est NULL. Cette expression peut être utilisée pour contrôler la propriété Hidden d'un élément de rapport de type image.
=Iif(IsNothing(Fields!LargePhoto.Value),True,False)
Fonctions de rapport
Reporting Services comprend des fonctions de rapport supplémentaires que vous pouvez utiliser pour manipuler des données dans un rapport. Cette section fournit des exemples pour deux de ces fonctions. Pour plus d'informations sur les fonctions et les exemples de rapport, consultez Utilisation de fonctions de rapport dans des expressions (Reporting Services).
La fonction Sum peut additionner les valeurs dans un groupement ou une région de données. Cette fonction peut être utile dans l'en-tête ou le pied de page d'un groupe de tableaux. L'expression suivante affiche la somme des données dans la région de données ou le regroupement Order :
=Sum(Fields!LineTotal.Value, "Order")
Une expression contenant la fonction RowNumber, quand elle est utilisée dans une zone de texte au sein d'une région de données, affiche le numéro de ligne de chaque instance de la zone de texte dans laquelle l'expression apparaît. Cette fonction peut être utile pour numéroter les lignes dans un tableau. Elle peut également servir à l'accomplissement de tâches plus complexes, telles que l'insertion de sauts de page en fonction du nombre de lignes. Pour plus d'informations, consultez « Sauts de page » plus loin dans cette rubrique.
L'expression suivante affiche le numéro de ligne à partir de la première ligne et jusqu'à la dernière, dans la région de données la plus à l'extérieur. Le mot clé Nothing indique que la fonction démarrera à compter à la première ligne dans la région de données la plus à l'extérieur. Pour commencer à compter dans des régions de données enfants, utilisez le nom de la région de données.=RowNumber(Nothing)
Apparence des données des rapports
Vous pouvez recourir à des expressions pour intervenir sur la façon dont les données apparaissent sur un rapport. Par exemple, vous pouvez afficher les valeurs de deux champs dans une seule zone de texte, afficher des informations sur le rapport ou modifier la façon dont les sauts de page sont insérés dans le rapport.
En-têtes et pieds de page
Lors de la conception d'un rapport, vous pouvez choisir d'afficher son nom et les numéros des pages dans le pied de page. Pour ce faire, vous pouvez utiliser les expressions suivantes :
L'expression suivante fournit le nom du rapport ainsi que les date et heure de son exécution. Elle peut être placée dans une zone de texte du pied de page du rapport ou dans le corps du rapport. Le format des date et heure est déterminé par la chaîne de formatage .NET Framework pour la date courte :
=Globals.ReportName & ", dated " & Format(Globals.ExecutionTime, "d")
L'expression ci-dessous, placée dans une zone de texte du pied de page d'un rapport, indique le numéro de la page actuelle ainsi que le nombre total de pages du rapport :
=Globals.PageNumber & " of " & Globals.TotalPages
Vous pouvez également utiliser des expressions figurant dans l'en-tête ou le pied de page du rapport pour signaler des éléments à partir du corps du rapport. Les exemples suivants décrivent comment afficher la première et la dernière valeur d'une page dans l'en-tête de la page, comme dans le contenu d'un annuaire. Ces exemples supposent l'existence d'une région de données qui contient une zone de texte appelée LastName.
L'expression ci-dessous, placée dans une zone de texte sur la partie gauche de l'en-tête de la page, fournit la première valeur de la zone de texte LastName sur la page :
=First(ReportItems("LastName").Value)
L'expression ci-dessous, placée dans une zone de texte sur la partie droite de l'en-tête de la page, fournit la dernière valeur de la zone de texte LastName sur la page :
=Last(ReportItems("LastName").Value)
Vous pouvez appliquer des agrégats à la référence d'un élément de rapport dans un en-tête ou un pied de page. (En revanche, vous ne pouvez pas appliquer un agrégat à la référence d'un élément de rapport dans le corps du rapport.) L'exemple suivant décrit comment afficher un total pour une page. Cet exemple suppose l'existence d'une région de données qui contient une zone de texte appelée Cost.
L'expression ci-dessous, placée dans l'en-tête ou le pied de page, fournit la somme des valeurs dans la zone de texte Cost pour la page :
=Sum(ReportItems("Cost").Value)
Remarque : Vous ne pouvez faire référence qu'à un seul élément de rapport par expression dans un en-tête ou un pied de page.
Sauts de page
Dans certains rapports, vous pouvez souhaiter placer un saut de page à la fin d'un nombre spécifié de lignes à la place, ou en plus, de groupes ou d'éléments de rapport. Pour ce faire, créez un groupe dans une région de données (un groupe généralement immédiatement en dehors des détails), ajoutez un saut de page au groupe, puis ajoutez une expression de groupe pour regrouper par un nombre spécifié de lignes.
L'expression suivante, quand elle est placée dans l'expression de groupe, affecte un nombre à chaque ensemble de 25 lignes. Quand un saut de page est défini pour le groupe, cette expression insère un saut de page toutes les 25 lignes.
=Int((RowNumber(Nothing)-1)/25)
Propriétés
Les expressions ne sont pas uniquement utilisées pour afficher des données dans des zones de texte. Elles peuvent également servir à modifier la manière dont les propriétés sont appliquées aux éléments de rapport. Vous pouvez modifier les informations de style d'un élément de rapport ou bien modifier sa visibilité.
Mise en forme
Vous pouvez utiliser les expressions pour varier l'apparence des éléments de rapport dans un rapport.
L'expression ci-dessous, lorsqu'elle est utilisée dans la propriété Color d'une zone de texte, modifie la couleur du texte en fonction de la valeur du champ Profit :
=Iif(Fields!Profit.Value < 0, "Red", "Black")
L'expression ci-dessous, lorsqu'elle est utilisée dans la propriété BackgroundColor d'un élément de rapport dans une région de données, fait alterner la couleur d'arrière-plan de chaque ligne entre vert pâle et blanc :
=Iif(RowNumber(Nothing) Mod 2, "PaleGreen", "White")
Si vous utilisez une expression pour une étendue spécifique, vous devrez peut-être indiquer le dataset de la fonction d'agrégation :
=Iif(RowNumber("Employees") Mod 2, "PaleGreen", "White")
Visibilité
Vous pouvez également afficher et masquer des éléments dans un rapport en utilisant les propriétés de visibilité de l'élément de rapport. Dans une région de données comme un tableau, vous pouvez initialement masquer les lignes de détails en fonction de la valeur d'une expression.
L'expression suivante, lorsqu'elle est utilisée pour la visibilité initiale des lignes de détails dans un groupe, affiche les lignes de détails de toutes les ventes supérieures à 90 pour cent dans le champ PctQuota :
=Iif(Fields!PctQuota.Value>.9, False, True)
L'expression ci-dessous, lorsqu'elle est définie dans la propriété Visibilité, Masquée d'une table, affiche la table uniquement si elle compte plus de 12 lignes :
=IIF(CountRows()>12,true,false)
Données des rapports
Les expressions peuvent être utilisées pour manipuler les données utilisées dans les rapports. Vous pouvez faire référence à des paramètres et à d'autres informations de rapport. Vous pouvez même modifier la requête utilisée pour extraire les données du rapport.
Paramètres
Vous pouvez utiliser des expressions dans un paramètre pour faire varier la valeur par défaut du paramètre. Par exemple, vous pouvez utiliser un paramètre pour filtrer les données d'un utilisateur en particulier en fonction de l'ID utilisateur utilisé pour exécuter le rapport.
L'expression ci-dessous, lorsqu'elle est utilisée comme valeur par défaut pour un paramètre, collecte l'ID utilisateur de la personne exécutant le rapport :
=User!UserID
Vous pouvez utiliser l'expression suivante pour faire référence au paramètre dans un paramètre de requête, une expression de filtre, une zone de texte ou d'autres zones du rapport. Cet exemple suppose que le paramètre est appelé User :
=Parameters!User.Value
Code personnalisé
L'usage de code personnalisé au sein d'un rapport est possible. Le code personnalisé est soit incorporé au rapport, soit stocké dans un assembly personnalisé utilisé au sein du rapport. Pour plus d'informations sur le code personnalisé, consultez Utilisation de références de code personnalisé dans des expressions (Reporting Services).
L'exemple de code ci-dessous appelle la méthode du code incorporé ToUSD, qui convertit la valeur du champ StandardCost en une valeur exprimée en dollars :
=Code.ToUSD(Fields!StandardCost.Value)
L'exemple ci-dessous montre comment définir quelques constantes et variables personnalisées.
[Visual Basic]Public Const MyNote = "Authored by Bob" Public Const NCopies As Int32 = 2 Public Dim MyVersion As String = "123.456" Public Dim MyDoubleVersion As Double = 123.456
Bien que les constantes et les variables personnalisées n'apparaissent pas dans la vue Constantes de l'éditeur d'expressions (qui affiche uniquement les constantes intégrées), vous pouvez leur ajouter des références de n'importe quelle expression comme le montrent les exemples suivants. Celles-ci sont traitées en tant que variantes.
[Visual Basic]=Code.MyNote =Code.NCopies =Code.MyVersion =Code.MyDoubleVersion
L'exemple suivant appelle la méthode du code incorporé FixSpelling, qui substitue
Bicycle
à toutes les occurrences du texteBike
dans SubCategory.Value.=Code.FixSpelling(Fields!SubCategory.Value)
Le code suivant, lorsqu'il est incorporé dans une définition de rapport, affiche une implémentation de la méthode FixSpelling. Lors de la première exécution de ce code personnalisé, un MessageBox affiche le texte substitué. Cet exemple montre comment faire référence à la classe .NET Framework StringBuilder et à la classe System.Windows.Forms.MessageBox. Vous devez ajouter une référence aux propriétés de votre rapport pour System.Windows.Forms. Pour plus d'informations, consultez Procédure : ajouter du code à un rapport (Générateur de rapports) et Procédure : ajouter une référence d'assembly à un rapport (Générateur de rapports).
[Visual Basic]Dim firstTime As Boolean = True Public Function FixSpelling(ByVal s As String) As String Dim strBuilder As New System.Text.StringBuilder(s) If s.Contains("Bike") Then strBuilder.Replace("Bike", "Bicycle") If firstTime Then System.Windows.Forms.MessageBox.Show(strBuilder.ToString()) ' or MsgBox(strBuilder.ToString()) firstTime = False End If Return strBuilder.ToString() Else : Return s End If End Function
Voir aussi
Concepts
Utilisation de fonctions de rapport dans des expressions (Reporting Services)
Aide et Informations
Assistance sur SQL Server 2005
Historique des modifications
Version | Historique |
---|---|
14 avril 2006 |
|
5 décembre 2005 |
|