Partager via


Exemples d'expressions (Reporting Services)

Les expressions sont fréquemment utilisées dans les rapports pour en contrôler le contenu et l'apparence. Les expressions sont écrites en MicrosoftVisual Basic et peuvent utiliser des fonctions intégrées, du code personnalisé, des variables globales, des variables de rapport et de groupe, et des variables définies par l'utilisateur.

Cette rubrique propose des exemples d'expressions qu'il est possible d'utiliser pour des tâches courantes dans un rapport.

  • Fonctions Visual Basic   Exemples pour les fonctions Visual Basic de date, de chaîne, de conversion et conditionnelles.

  • Fonctions de rapport   Exemples pour les agrégats et autres fonctions de rapport intégrées.

  • Apparence des données d'un rapport   Exemples pour la modification de l'apparence d'un rapport.

  • Propriétés   Exemples pour la définition des propriétés d'élément de rapport permettant de contrôler le format ou la visibilité.

  • Paramètres   Exemples pour l'utilisation de paramètres dans une expression.

  • Code personnalisé   Exemples de code personnalisé incorporé.

Pour obtenir des exemples d'expressions pour des utilisations spécifiques, consultez les rubriques suivantes :

Pour plus d'informations sur les expressions simples et complexes, l'endroit où vous pouvez utiliser des expressions et les types de références que vous pouvez inclure dans une expression, consultez les rubriques sous Utilisation des expressions de rapport. Pour plus d'informations sur le contexte dans lequel les expressions sont évaluées pour calculer des agrégats, consultez Calcul de totaux et autres agrégats (Reporting Services).

De plus, l'éditeur d'expressions inclut une vue hiérarchique des fonctions intégrées. Lorsque vous sélectionnez la fonction, un exemple de code apparaît dans le volet de valeurs. Pour plus d'informations, consultez Boîte de dialogue Expression.

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 MicrosoftVisual Basic Runtime 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 Microsoft.NET Framework, notamment System.Text.RegularExpressions. Pour plus d'informations sur les fonctions Visual Basic, consultez « Visual Basic Run-Time Library » (en anglais) sur le site Web msdn.microsoft.com.

Le .NET Framework offre de nombreux moyens de spécifier des formats personnalisés, par exemple pour des formats de date spécifiques. Pour plus d'informations, consultez Mise en forme des types sur MSDN.

Fonctions Visual Basic

Vous pouvez utiliser des fonctions 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 qui décrivent certaines de ces fonctions. Ces exemples spécifient des constantes Visual Basic comme valeurs d'énumération, par exemple DateInterval.Month. Bien que l'éditeur d'expressions ne prenne pas en charge Intellisense pour ces valeurs, la compilation est correcte dans une expression.

Pour plus d'informations sur les fonctions Visual Basic, consultez la documentation de Visual Basic.

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()
    
  • 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 d'un paramètre de type System..::..DateTime nommé StartDate.

    =DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)
    
  • La fonction Year 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 client. 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.

    =Year(Fields!OrderDate.Value)
    

Fonctions de chaîne

  • Vous pouvez combiner plusieurs champs en utilisant 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 retourner une sous-chaîne, par exemple en coupant DOMAINE\nom_utilisateur pour ne récupérer que le nom de l'utilisateur. L'expression suivante 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 suivante retourne la même valeur que précédemment, en utilisant des membres de la classe .NET FrameworkSystem..::..String 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)
    
  • Les fonctions Regex de l'espace de noms .NET FrameworkRegularExpressions sont utiles si vous souhaitez modifier le format de chaînes existantes (par exemple, le format d'un numéro de téléphone). L'expression suivante 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")
    

    [!REMARQUE]

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

Fonctions de conversion

Vous pouvez utiliser des fonctions Visual Basic pour convertir un champ en un type de données différent de celui qu'il avait au départ. Les fonctions de conversion peuvent être utilisées pour convertir le type de données par défaut d'un champ en celui qui sera demandé pour certains calculs ou une combinaison avec du texte. 

  • L'expression suivante convertit la constante 500 en type Decimal afin de la comparer à un type de données money Transact-SQL dans le champ Valeur 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 sur les deux possibles, laquelle dépend du fait que l'expression est vraie ou fausse. L'expression ci-dessous utilise la fonction Iif pour retourner la valeur booléenne True si la valeur de LineTotal est supérieure à 100. Sinon, elle retourne False :

    =IIF(Fields!LineTotal.Value > 100, True, False)
    
  • Vous pouvez utiliser des fonctions IIF (également appelées « IIF imbriqués ») pour retourner une valeur sur les trois possibles, laquelle dépend de 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, celles qui sont comprises entre 1 et 9 avec un arrière-plan bleu et les valeurs inférieures à 1 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, celles qui sont comprises entre 1 et 9 avec un arrière-plan bleu, les valeurs égales à 1 s'affichent avec un arrière-plan jaune et celles qui sont égales ou inférieures à 0 avec un arrière-plan rouge.

  • Une troisième méthode pour obtenir la même fonctionnalité consiste à utiliser la fonction Choose. La fonction Choose utilise le premier paramètre comme un index de l'un des paramètres de fonction restants. Le premier paramètre doit être un entier. Si la couleur d'arrière-plan d'une zone de texte dans une table a cette expression pour valeur, la valeur de MyIndex contrôle la couleur.

    =Choose(Fields!MyIndex.Value,"Red","Green","Yellow")
    

    Par exemple, lorsque MyIndex est égal à 1, la couleur d'arrière-plan est « Rouge ». Dans le jeu de résultats de la requête, vérifiez que les données pour MyIndex ne dépassent pas la plage de la liste de paramètres.

  • 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 » 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")
    
  • L'expression ci-dessous teste la valeur du champ PhoneNumber et retourne « No Value » si la valeur est null (Nothing en Visual Basic) ou le numéro de téléphone dans le cas contraire. 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 ci-dessous teste la valeur du champ Department et retourne le nom d'un sous-rapport ou null (Nothing en 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] s'affiche uniquement si la valeur du champ n'est pas Null.

    =IIF(IsNothing(Fields!LargePhoto.Value),True,False)
    

Fonctions de rapport

Reporting Services propose 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 et d'agrégation intégrées dans des expressions (Reporting Services).

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, si un dataset contient un champ nommé State dont les valeurs possibles sont Not Started, Started et Finished, l'expression suivante, lorsqu'elle est placée dans un en-tête de groupe, calcule la somme uniquement pour la valeur Finished :

    =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 Sauts de page, plus loin dans cette rubrique.

    L'étendue que vous spécifiez pour RowNumber détermine quand commence la renumérotation. 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 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. 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 mise en forme .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. Ces exemples supposent l'existence d'une région de données qui contient une zone de texte appelée LastName.

  • L'expression suivante, 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 suivante, 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)
    

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 suivante, 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. 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. Pour ce faire, créez un groupe qui contient les groupes ou enregistrements de détails qui vous intéressent, 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.

    =CInt(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 le paramètre, comme le montre l'expression suivante :

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

    Pour plus d'informations sur la définition de sauts de page pour un groupe, consultez Procédure : ajouter un saut de page (Reporting Services).

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

  • L'expression suivante, 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 suivante, 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")
    

[!REMARQUE]

Les couleurs disponibles proviennent de l'énumération .NET FrameworkKnownColor.

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 suivante, lorsqu'elle est définie dans la propriété Hidden d'une table, affiche la table uniquement si elle compte plus de 12 lignes :

    =IIF(CountRows()>12,true,false)
    

URL

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 ci-dessous, lorsqu'elle est utilisée en tant qu'action pour une zone de texte, génère une URL personnalisée qui spécifie le champ de dataset EmployeeID comme un paramètre d'URL.

    ="http://adventure-works/MyInfo?ID=" & Fields!EmployeeID.Value
    

    Pour plus d'informations, consultez Procédure : ajouter un lien hypertexte à une URL (Reporting Services).

  • 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,"http://adventure-works.com/productcatalog",Nothing)
    

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
    
  • 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. Lorsque 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 modifier 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
    

    Pour plus d'informations, consultez Définition des propriétés de paramètres d'un rapport publié.

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 une méthode de code incorporé appelée 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
    

Une autre façon de créer des constantes personnalisées ou de personnaliser une valeur pour une expression consiste à utiliser une variable de rapport ou une variable de groupe.

Utilisation de 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 Using Group Variables in Reporting Services 2008 for Custom Aggregation (en anglais).

Pour plus d'informations sur les variables, consultez Utilisation de références à des collections de variables de rapport et de groupe dans les expressions (Reporting Services).

Remplacement du texte d'un champ au moment de l'exécution

L'exemple suivant appelle une méthode incorporée appelée FixSpelling, qui substitue « Bicycle » à toutes les occurrences du texte « Bike » dans SubCategory.Value.

=Code.FixSpelling(Fields!SubCategory.Value)

Le code ci-dessous, lorsqu'il est incorporé dans une définition de rapport, affiche une implémentation de la méthode FixSpelling. Cet exemple montre comment faire référence à la classe .NET FrameworkSystem.Text..::..StringBuilder. Pour plus d'informations, consultez Procédure : ajouter du code à un rapport (Reporting Services) et Procédure : ajouter une référence d'assembly à un rapport (Reporting Services).

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")
      Return strBuilder.ToString()
      Else : Return s
   End If
End Function

Suppression de valeurs Null ou zéro au moment de l'exécution

Certaines valeurs d'une expression peuvent prendre la valeur Null ou une valeur indéfinie au moment du traitement du rapport. Des 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 particulièrement sensible à ce comportement, car, 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 :

  • Affectez au numérateur la valeur 0 et au dénominateur la valeur 1 si la valeur du champ B est 0 ou indéfinie ; sinon, affectez au numérateur la valeur du champ A et au dénominateur celle 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. Il peut être utilisé pour calculer la différence entre deux valeurs consécutives quelconques et gère le cas limite de la première comparaison (lorsqu'il n'y a aucune valeur précédente) et les cas où la valeur précédente ou la valeur actuelle est null (Nothing en 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 :

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

Historique des modifications

Mise à jour du contenu

Exemples ajoutés pour la fonction Choose et pour calculer les agrégats personnalisés en utilisant des variables de groupe et du code personnalisé.