Exemples d’expressions dans des rapports paginés de Générateur de rapports

S’applique à : Générateur de rapports Microsoft (SSRS) Power BI Report Builder Report Designer dans SQL Server Data Tools

Les expressions sont fréquemment utilisées dans les rapports paginés pour en contrôler le contenu et l’apparence. Les expressions sont écrites en Microsoft Visual Basic et elles peuvent utiliser des fonctions intégrées, du code personnalisé, des variables de rapport et de groupe, et des variables définies par l’utilisateur. Les expressions commencent par un signe égal (=). Pour plus d’informations sur l’éditeur d’expressions et les types de références que vous pouvez inclure, consultez Utilisation d’expressions dans les rapports paginés (Générateur de rapports et SSRS), et Ajouter une expression au rapport paginé (Générateur de rapports).

Important

Lorsque le sandboxing RDL est activé, vous pouvez uniquement utiliser certains types et membres dans le texte de l'expression au moment de la publication des rapports. Pour plus d’informations, consultez Activer et désactiver le sandboxing RDL pour Reporting Services en mode intégré SharePoint.

Pour obtenir des exemples d'expressions pour des utilisations spécifiques, consultez les éléments suivants :

Pour plus d’informations sur les expressions simples et complexes, où vous pouvez utiliser des expressions et les types de références que vous pouvez inclure dans une expression, consultez les éléments dans Expressions dans un rapport paginé (Générateur de rapports). Pour plus d’informations sur le contexte dans lequel les expressions sont évaluées pour calculer des agrégats, consultez Étendue des expressions pour les totaux, les agrégats et les collections intégrées dans un rapport paginé (Générateur de rapports).

Pour apprendre à écrire des expressions qui utilisent plusieurs fonctions et opérateurs également utilisés par les exemples d'expressions dans cet élément, consultez Tutorial: Introduce Expressions.

Functions

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 de runtime Microsoft Visual Basic et des espaces de noms Convert et 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.

fonctions Visual Basic

Vous pouvez utiliser des fonctions Visual Basic pour manipuler les données qui s’affichent dans les zones de texte ou vos paramètres, propriétés ou d’autres zones de votre rapport. Cette section fournit des exemples décrivant certaines de ces fonctions. Pour plus d’informations, consultez Membres de la bibliothèque runtime Visual Basic.

Le .NET Framework fournit de nombreuses options de format personnalisé, par exemple pour les formats de date spécifiques.

Fonctions mathématiques

  • La fonction Round permet d'arrondir des nombres à l'entier le plus proche. L’expression suivante arrondit 1,3 à 1 :

    = Round(1.3)  
    

    Vous pouvez également écrire une expression pour arrondir une valeur à un multiple de votre choix, de manière semblable à la fonction MRound dans Excel. Avec cette fonction, vous pouvez multiplier la valeur par un facteur qui crée un entier, arrondir le nombre, puis le diviser par le même facteur. Par exemple, pour arrondir 1,3 au multiple le plus proche de 0,2 (1,4), utilisez l'expression suivante :

    = Round(1.3*5)/5  
    

Fonctions de date

  • La fonction Today 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()  
    
  • Utilisez la fonction DateInterval pour extraire une partie spécifique d’une date. Voici différents paramètres DateInterval valides :

    • DateInterval.Second

    • DateInterval.Minute

    • DateInterval.Hour

    • DateInterval.Weekday

    • DateInterval.Day

    • DateInterval.DayOfYear

    • DateInterval.WeekOfYear

    • DateInterval.Month

    • DateInterval.Quarter

    • DateInterval.Year

      Par exemple, cette expression affiche le numéro de la semaine dans l’année en cours pour la date du jour :

      =DatePart(DateInterval.WeekOfYear, 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 six mois après la date provenant du paramètre nommé StartDate :

    =DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)  
    
  • La fonction Year affiche l'année pour une date particulière. Vous pouvez utiliser cette fonction 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 client. La fonction Month et d'autres fonctions peuvent également être utilisées pour manipuler des dates :

    =Year(Fields!OrderDate.Value)  
    
  • Vous pouvez combiner des fonctions dans une expression pour personnaliser le format. L'expression suivante modifie le format d'une date écrite sous la forme mois-jour-année en mois-semaine-numéro de semaine. Par exemple, 12/23/2009 à December Week 3 :

    =Format(Fields!MyDate.Value, "MMMM") & " Week " &   
    (Int(DateDiff("d", DateSerial(Year(Fields!MyDate.Value),   
    Month(Fields!MyDate.Value),1), Fields!FullDateAlternateKey.Value)/7)+1).ToString  
    

    Lorsque cette expression est utilisée comme champ calculé dans un dataset, vous pouvez vous en servir dans un graphique pour agréger les valeurs par semaine dans chaque mois.

  • L'expression suivante affiche la valeur SellStartDate au format MMM-YY. Le champ SellStartDate comprend des données de type Datetime :

    =FORMAT(Fields!SellStartDate.Value, "MMM-yy")  
    
  • L’expression suivante met en forme la valeur SellStartDate au format jj/MM/aaaa. Le champ SellStartDate comprend des données de type Datetime :

    =FORMAT(Fields!SellStartDate.Value, "dd/MM/yyyy")  
    
  • La fonction CDate convertit la valeur en date. La fonction Now retourne une valeur de Date contenant la date et l'heure actuelles en fonction de votre système. DateDiff retourne une valeur longue spécifiant le nombre d'intervalles de temps entre deux valeurs de date.

    L'exemple suivant affiche la date de début de l’année en cours :

    =DateAdd(DateInterval.Year,DateDiff(DateInterval.Year,CDate("01/01/1900"),Now()),CDate("01/01/1900"))  
    
  • L'exemple suivant affiche la date de début du mois précédent en fonction du mois actuel :

    =DateAdd(DateInterval.Month,DateDiff(DateInterval.Month,CDate("01/01/1900"),Now())-1,CDate("01/01/1900"))  
    
  • L’expression suivante génère l’intervalle en années entre SellStartDate et LastReceiptDate. Ces champs sont compris dans deux datasets différents, DataSet1 et DataSet2. Les fonctions du Générateur de rapports - La première fonction est un rapport paginé (Report Builder), qui est une fonction d’agrégation, renvoie la première valeur de SellStartDate dans DataSet1 et la première valeur de LastReceiptDate dans DataSet2.

    =DATEDIFF("yyyy", First(Fields!SellStartDate.Value, "DataSet1"), First(Fields!LastReceiptDate.Value, "DataSet2"))  
    
  • La fonction DatePart retourne une valeur de type Integer contenant le composant spécifié d’une valeur Date donnée. L’expression suivante retourne l’année pour la première valeur de SellStartDate dans DataSet1. L'étendue du dataset est spécifiée, car le rapport contient plusieurs datasets dans le rapport :

    =Datepart("yyyy", First(Fields!SellStartDate.Value, "DataSet1"))  
    
    
  • La fonction DateSerial renvoie une valeur Date qui représente une année, un mois et un jour spécifiés, avec l'heure définie sur minuit. L'exemple suivant affiche la date de fin du mois précédent en fonction du mois actuel :

    =DateSerial(Year(Now()), Month(Now()), "1").AddDays(-1)  
    
  • Les expressions suivantes affichent plusieurs dates basées sur une valeur de paramètre de date sélectionnée par l'utilisateur :

Description de l'exemple Exemple
hier =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)-1)
Il y a deux jours =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)-2)
Il y a un mois =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value)-1,Day(Parameters!TodaysDate.Value))
Il y a deux mois =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value)-2,Day(Parameters!TodaysDate.Value))
Il y a un an =DateSerial(Year(Parameters!TodaysDate.Value)-1,Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value))
Il y a deux ans =DateSerial(Year(Parameters!TodaysDate.Value)-2,Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value))

Fonctions de chaînes

  • Combiner plusieurs champs avec des opérateurs de concaténation et des constantes Visual Basic. L'expression suivante retourne 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 suivante 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 renvoyer une sous-chaîne, par exemple en réduisant DOMAIN\username au seul nom d’utilisateur. L’expression suivante retourne la partie de la chaîne à droite d’une barre oblique inverse (\) à partir d’un paramètre nommé User :

    =Right(Parameters!User.Value, Len(Parameters!User.Value) - InStr(Parameters!User.Value, "\"))  
    

    L’expression suivante retourne la même valeur que la précédente, mais en utilisant des membres de la classe String du .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 suivant 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)  
    

    L’exemple suivant fait la même chose que l’exemple précédent et affiche une chaîne de texte avant la liste de valeurs sélectionnées :

    ="Report for " & JOIN(Parameters!MySelection.Value, " & ")  
    
    
  • Les fonctions Regex de System.Text.RegularExpressions du .NET Framework sont utiles pour la modification du format de chaînes existantes, par exemple pour la mise en forme d’un numéro de téléphone. L’expression suivante utilise la fonction Replace pour modifier dans un champ le format d’un numéro de téléphone 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")  
    

    Remarque

    Vérifiez que la valeur de Fields!Phone.Value n’a pas d’espaces supplémentaires et est de type String.

Recherche

  • En spécifiant un champ clé, vous pouvez utiliser la fonction Lookup pour récupérer une valeur à partir d’un dataset pour une relation un-à-un, par exemple une paire clé-valeur. L’expression suivante affiche le nom de produit d’un dataset appelé Product, compte tenu de l’identificateur de produit qui doit être mis en correspondance :

    =Lookup(Fields!PID.Value, Fields!ProductID.Value, Fields!ProductName.Value, "Product")  
    

LookupSet

  • En spécifiant un champ clé, vous pouvez utiliser la fonction LookupSet pour récupérer un jeu de valeurs à partir d’un dataset pour une relation un-à-plusieurs. Par exemple, une personne peut avoir plusieurs numéros de téléphone. Dans l'exemple suivant, supposons que le dataset PhoneList contient un identificateur de personne et un numéro de téléphone sur chaque ligne. LookupSet retourne un tableau de valeurs. L’expression suivante combine les valeurs de retour en une seule chaîne et affiche la liste des numéros de téléphone de la personne spécifiée par ContactID :

    =Join(LookupSet(Fields!ContactID.Value, Fields!PersonID.Value, Fields!PhoneNumber.Value, "PhoneList"),",")  
    

Fonctions de conversion

Vous pouvez utiliser des fonctions Visual Basic pour convertir un champ d’un type de données en un autre type de données. Vous pouvez utiliser les fonctions de conversion pour convertir le type de données par défaut d'un champ en type qui sera nécessaire pour certains calculs ou pour combiner du texte.

  • L’expression suivante convertit la constante 500 en type Decimal pour la comparer à un type de données de devise Transact-SQL dans le champ Value d’une expression de filtre :

    =CDec(500)  
    
  • 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

  • La fonction IIF retourne une valeur parmi deux, selon que l’expression est vraie ou non. L’expression suivante utilise la fonction IIF pour retourner une valeur booléenne True si la valeur de LineTotal est supérieure à 100. Sinon, elle renvoie une valeur « False » :

    =IIF(Fields!LineTotal.Value > 100, True, False)  
    
  • Utilisez plusieurs fonctions IIF (on parle alors d’« instruction IIFimbriqués ») pour retourner une valeur parmi trois selon la valeur de PctComplete. L'expression ci-dessous peut être placée dans la couleur de remplissage d'une zone de texte afin de changer la couleur d'arrière-plan selon la valeur contenue dans la zone de texte :

    =IIF(Fields!PctComplete.Value >= 10, "Green", IIF(Fields!PctComplete.Value >= 1, "Blue", "Red"))  
    

    Les valeurs supérieures ou égales à 10 s’affichent avec un arrière-plan vert. Valeurs comprises entre un et neuf affichages avec un arrière-plan bleu. valeurs inférieures à un affichage avec un arrière-plan rouge.

  • Une autre méthode pour obtenir la même fonctionnalité consiste à utiliser la fonction Switch . La fonction Switch est utile lorsque vous avez au moins trois conditions à tester. La fonction Switch retourne la valeur associée à la première expression d'une série qui remplit la condition :

    =Switch(Fields!PctComplete.Value >= 10, "Green", Fields!PctComplete.Value >= 1, "Blue", Fields!PctComplete.Value = 1, "Yellow", Fields!PctComplete.Value <= 0, "Red")  
    

    Les valeurs supérieures ou égales à 10 s’affichent avec un arrière-plan vert. Valeurs comprises entre un et neuf affichages avec un arrière-plan bleu. Valeurs égales à un affichage avec un arrière-plan jaune. Valeurs 0 ou moins affichées avec un arrière-plan rouge.

  • Tester la valeur du champ ImportantDate, et retourner « Red » si elle est antérieure de plus d’une semaine et « Blue » dans le cas contraire. 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")  
    
  • Tester la valeur du champ PhoneNumber et retourner « No Value » si elle est Null, appelé Nothing dans Visual Basic. Sinon, retournez la valeur du numéro de téléphone. 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)  
    
  • Tester la valeur du champ Department et retourner un nom de sous-rapport ou une valeur null, appelé 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 ci-dessous 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. Dans l’exemple suivant, l’image spécifiée par le champ LargePhoto est affichée seulement si la valeur du champ n’est pas une valeur null.

    =IIF(IsNothing(Fields!LargePhoto.Value),True,False)  
    
  • La fonction MonthName retourne une valeur de chaîne contenant le nom du mois spécifié. L'exemple suivant affiche NA dans le champ Month lorsque le champ contient la valeur 0 :

    IIF(Fields!Month.Value=0,"NA",MonthName(IIF(Fields!Month.Value=0,1,Fields!Month.Value)))  
    
    

Fonctions de rapport

Dans une expression, vous pouvez ajouter une référence à des fonctions supplémentaires de rapport qui manipulent les données dans un rapport. Cette section fournit des exemples pour deux de ces fonctions. Pour plus d’informations sur les exemples et les fonctions de rapport, consultez Fonctions du Générateur de rapports – Informations de référence sur les fonctions d’agrégation dans les rapports paginés (Générateur de rapports).

Sum

  • La fonction Sum peut additionner les valeurs dans un groupe 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. L'expression suivante affiche la somme des données dans la région de données ou le groupe Order :

    =Sum(Fields!LineTotal.Value, "Order")  
    
  • Vous pouvez également utiliser la fonction Sum pour effectuer des calculs d'agrégats conditionnels. Par exemple, imaginez que vous disposez d’un jeu de données qui a un champ nommé State avec les valeurs possibles Not Started, Started et Finished. L’expression suivante, lorsqu’elle est placée dans un en-tête de groupe, calcule la somme agrégée uniquement pour la valeur terminée :

    =Sum(IIF(Fields!State.Value = "Finished", 1, 0))  
    

RowNumber

  • 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 Page breaks.

    L'étendue que vous spécifiez pour RowNumber détermine quand commence la renumérotation. Le mot clé Nothing indique que la fonction démarre à 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 imbriquées, utilisez le nom de la région de données. Pour commencer à compter dans un groupe, utilisez le nom du groupe :

    =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. 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. L’heure est mise en forme avec la chaîne de mise en forme du .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  
    

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. L’exemple suppose qu’il existe une région de données contenant une zone de texte nommée LastName.

  • L’expression suivante, placée dans une zone de texte sur le côté gauche de l’en-tête de page, fournit la première valeur de la zone de texte LastName sur la page :

    =First(ReportItems("LastName").Value)  
    
  • L’expression suivante, placée dans une zone de texte sur le côté droit de l’en-tête de page, fournit la dernière valeur de la zone de texte LastName sur la page :

    =Last(ReportItems("LastName").Value)  
    
  • L'exemple suivant décrit comment afficher un total pour une page. L’exemple suppose qu’il existe une région de données contenant une zone de texte nommée Cost. Lorsque vous placez cette expression dans l’en-tête de page ou le pied de page, elle fournit la somme des valeurs de 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. Vous pouvez aussi faire référence au nom de la zone de texte, mais pas à l'expression de données elle-même, dans les expressions d'en-tête et de 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. Créez un groupe qui contient les groupes ou les enregistrements de détails souhaités. Ajoutez un saut de page au groupe, puis ajoutez une expression de groupe à 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 :

    =Ceiling(RowNumber(Nothing)/25)  
    

    Pour permettre à l’utilisateur de définir une valeur pour le nombre de lignes par page, créez un paramètre nommé RowsPerPage et basez l’expression de groupe sur ce paramètre, comme le montre l’expression suivante :

    =Ceiling(RowNumber(Nothing)/Parameters!RowsPerPage.Value)  
    

    Pour plus d’informations sur la définition de sauts de page pour un groupe, consultez Ajouter un saut de page à un rapport paginé (Générateur de rapports).

Propriétés

Les expressions ne sont pas seulement 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

  • L’expression suivante, quand elle est utilisée dans la propriété Color d’une zone de texte, change la couleur du texte en fonction de la valeur du champ Profit :

    =Iif(Fields!Profit.Value < 0, "Red", "Black")  
    

    Vous pouvez aussi utiliser la variable d’objet Visual Basic Me. Cette variable constitue un autre moyen de faire référence à la valeur d'une zone de texte.

    =Iif(Me.Value < 0, "Red", "Black")

  • L’expression suivante, quand 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 le vert pâle et le blanc :

    =Iif(RowNumber(Nothing) Mod 2, "PaleGreen", "White")  
    

    Si vous utilisez une expression pour une étendue spécifiée, il peut être nécessaire d’indiquer le jeu de données pour la fonction d’agrégation :

    =Iif(RowNumber("Employees") Mod 2, "PaleGreen", "White")  
    

Remarque

Les couleurs disponibles proviennent de l’énumération KnownColor du .NET Framework.

Couleurs des graphiques

Pour spécifier les couleurs d'un graphique à base de Formes, vous pouvez utiliser du code personnalisé pour contrôler l'ordre dans lequel les couleurs sont mappées aux valeurs de point de données. Ce code personnalisé vous permet d'utiliser des couleurs cohérentes dans le cadre de plusieurs graphiques possédant les mêmes groupes de catégories. Pour plus d’informations, consultez Spécifier des couleurs cohérentes pour plusieurs graphiques à base de formes dans un rapport paginé (Générateur de rapports).

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, quand elle est utilisée pour la visibilité initiale des lignes de détails dans un groupe, affiche les lignes de détails pour toutes les ventes supérieures à 90 % dans le champ PctQuota :

    =Iif(Fields!PctQuota.Value>.9, False, True)  
    
  • L’expression suivante, quand elle est définie dans la propriété Hidden d’un tableau, affiche le tableau seulement s’il a plus de 12 lignes :

    =IIF(CountRows()>12,false,true)  
    
  • L'expression suivante, lorsqu'elle est définie dans la propriété Hidden d'une colonne, affiche la colonne uniquement si le champ existe dans le dataset du rapport après que les données ont été récupérées de la source de données :

    =IIF(Fields!Column_1.IsMissing, true, false)  
    

Vous pouvez personnaliser des URL à l'aide de données de rapport, mais aussi contrôler de manière conditionnelle si les URL sont ajoutées en tant qu'action pour une zone de texte.

  • L’expression suivante, quand elle est utilisée en tant qu’action sur une zone de texte, génère une URL personnalisée qui spécifie le champ EmployeeID du jeu de données comme paramètre d’URL :

    ="https://contoso/MyInfo?ID=" & Fields!EmployeeID.Value  
    

    Pour plus d’informations, consultez Ajouter un lien hypertexte à une URL dans dans un rapport paginé (Générateur de rapports).

  • L'expression ci-dessous contrôle de manière conditionnelle si une URL doit être ajoutée à une zone de texte. Cette expression dépend d’un paramètre nommé IncludeURLs, qui permet à un utilisateur de décider s’il faut inclure des URL actives dans un rapport. Cette expression est définie en tant qu'action pour une zone de texte. En affectant au paramètre la valeur FALSE, puis en consultant le rapport, vous pouvez exporter le rapport vers Microsoft Excel sans liens hypertexte :

    =IIF(Parameters!IncludeURLs.Value,"https://contoso.com/productcatalog",Nothing)  
    

données de rapport

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  
    
  • Pour faire référence à un paramètre dans un paramètre de requête, une expression de filtre, une zone de texte ou une autre zone du rapport, utilisez la collection globale Parameters . Cet exemple suppose que le paramètre est appelé Department:

    =Parameters!Department.Value  
    
  • Des paramètres peuvent être créés dans un rapport, mais définis comme étant masqués. Quand le rapport s’exécute sur le serveur de rapports, le paramètre n’apparaît pas dans la barre d’outils et le lecteur du rapport ne peut pas changer la valeur par défaut. Vous pouvez utiliser un paramètre masqué auquel est affectée une valeur par défaut en tant que constante personnalisée. Vous pouvez utiliser cette valeur dans n'importe quelle expression, y compris une expression de champ. L'expression suivante identifie le champ spécifié par la valeur de paramètre par défaut pour le paramètre nommé ParameterField:

    =Fields(Parameters!ParameterField.Value).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 Code personnalisé et références d’assembly dans les expressions dans un rapport paginé du Concepteur de rapports (SSRS).

Utiliser des variables de groupe pour une agrégation personnalisée

Vous pouvez initialiser la valeur pour une variable de groupe qui est locale à une étendue de groupe particulière, puis inclure une référence à cette variable dans les expressions. L'une des façons d'utiliser une variable de groupe avec du code personnalisé consiste à implémenter un agrégat personnalisé. Pour plus d'informations, consultez Use Group Variables in Reporting Services 2008 for Custom Aggregation (en anglais).

Pour plus d’informations sur les variables, consultez Références à des variables de rapport et de groupe dans un rapport paginé (Générateur de rapports).

Supprimer des valeurs null ou zéro à l’exécution

Certaines valeurs d'une expression peuvent prendre la valeur Null ou une valeur indéfinie au moment du traitement du rapport. Ces erreurs d’exécution peuvent alors se produire et provoquer l’affichage de « #Erreur » au lieu de l’expression évaluée dans la zone de texte. La fonction IIF est sensible à ce comportement. Contrairement à une instruction If-Then-Else, chaque partie de l’instruction IIF est évaluée (y compris les appels de fonction) avant d’être passée à la routine de test TRUE ou FALSE. L’instruction =IIF(Fields!Sales.Value is NOTHING, 0, Fields!Sales.Value) génère « #Erreur » dans le rapport rendu si Fields!Sales.Value a la valeur Nothing.

Pour éviter de vous trouver dans cette situation, utilisez l'une des stratégies qui suivent :

  • Définissez le numérateur sur 0 et le dénominateur sur 1 si la valeur du champ B est 0 ou non définie. Sinon, définissez le numérateur sur la valeur du champ A et le dénominateur sur la valeur du champ B :

    =IIF(Field!B.Value=0, 0, Field!A.Value / IIF(Field!B.Value =0, 1, Field!B.Value))  
    
  • Utilisez une fonction de code personnalisé pour retourner la valeur de l'expression. L'exemple ci-dessous retourne la différence, exprimée en pourcentage, entre une valeur actuelle et une valeur précédente. Cette valeur peut être utilisée pour calculer la différence entre deux valeurs successives. Il gère le cas de périphérie de la première comparaison lorsqu’il n’y a pas de valeur précédente et fonctionne dans les cas où la valeur précédente ou la valeur actuelle est une valeur Null, appelée Nothing dans Visual Basic :

    Public Function GetDeltaPercentage(ByVal PreviousValue, ByVal CurrentValue) As Object  
        If IsNothing(PreviousValue) OR IsNothing(CurrentValue) Then  
            Return Nothing  
        Else if PreviousValue = 0 OR CurrentValue = 0 Then  
            Return Nothing  
        Else   
            Return (CurrentValue - PreviousValue) / CurrentValue  
        End If  
    End Function  
    

    L’expression suivante montre comment appeler ce code personnalisé à partir d’une zone de texte, pour le conteneur « ColumnGroupByYear », un groupe ou une région de données :

    =Code.GetDeltaPercentage(Previous(Sum(Fields!Sales.Value),"ColumnGroupByYear"), Sum(Fields!Sales.Value))  
    

    Ce code permet d’éviter les exceptions à l’exécution. Vous pouvez maintenant utiliser une expression comme =IIF(Me.Value < 0, "red", "black") dans la propriété Color de la zone de texte pour afficher de manière conditionnelle un texte selon que les valeurs sont supérieures ou inférieures à 0.