Partager via


Utilisation de paramètres à valeur unique et à valeurs multiples (Générateur de rapports version 2.0)

Les paramètres peuvent inclure une seule valeur ou plusieurs valeurs. Un paramètre à valeurs multiples peut être défini à plusieurs valeurs. Lorsque vous définissez une liste de valeurs disponibles pour un paramètre à valeurs multiples, une option Sélectionner tout apparaît automatiquement dans la liste déroulante de la barre d'outils Rapports. Vous pouvez utiliser cette option pour sélectionner et désélectionner toutes les valeurs de la liste.

Dans les zones de texte sur l'aire de conception, les paramètres à une valeur unique aussi bien que les paramètres à plusieurs valeurs apparaissent sous la forme d'expressions simples qui commencent par le symbole @. Par exemple, un paramètre nommé Store apparaît sous la forme [@Store]. Pour plus d'informations, consultez Présentation des expressions simples et complexes (Générateur de rapports version 2.0).

Pour définir la propriété à valeurs multiples d'un paramètre, sélectionnez l'option Autoriser les valeurs multiples dans la boîte de dialogue Propriétés du paramètre de rapport. Vous pouvez définir tout type de paramètre à plusieurs valeurs, à l'exception des valeurs Boolean.

Les paramètres à plusieurs valeurs sont principalement utilisés pour autoriser une clause de restriction de requête (par exemple, la clause WHERE Transact-SQL ou la clause Filtre MDX) pour tester l'inclusion dans un ensemble de valeurs au lieu de l'égalité à une valeur unique. Pour plus d'informations sur la création de paramètres à valeurs multiples, consultez Didacticiel : ajout de paramètres pour filtrer les données d'un rapport (Générateur de rapports version 2.0) et Création de paramètres de rapport et définition des propriétés des paramètres de rapport (Générateur de rapports version 2.0).

Remarque relative à la sécuritéRemarque relative à la sécurité

Dans un rapport qui inclut un paramètre de type String, veillez à utiliser une liste de valeurs disponibles (également appelée liste de valeurs valides) et assurez-vous que l'utilisateur qui exécute le rapport dispose uniquement des autorisations qui sont nécessaires à l'affichage des données du rapport. Lorsque vous définissez un paramètre de type Chaîne, la zone de texte qui apparaît vous permet d'entrer n'importe quelle valeur. Une liste de valeurs disponibles limite les valeurs susceptibles d'être entrées. Si le paramètre de rapport est lié à un paramètre de requête et vous n'utilisez pas une liste de valeurs disponibles, l'utilisateur d'un rapport peut taper la syntaxe SQL dans la zone de texte, ce qui peut exposer le rapport et votre serveur de rapports au risque d'une attaque par injection SQL. Si l'utilisateur dispose d'autorisations suffisantes pour exécuter la nouvelle instruction SQL, cela risque de générer des résultats indésirables sur le serveur.

Si un paramètre de rapport n'est pas lié à un paramètre de requête et les valeurs de paramètre sont incluses dans le rapport, l'utilisateur d'un rapport peut taper une URL ou la syntaxe de l'expression dans la valeur de paramètre et restituer le rapport au format Excel ou HTML. Si un autre utilisateur affiche ensuite le rapport et clique sur le contenu du paramètre de rendu, il peut exécuter involontairement le lien ou le script malveillant.

Pour réduire le risque d'exécution involontaire de scripts malveillants, ouvrez les rapports rendus uniquement à partir de sources approuvées. Pour plus d'informations sur la sécurisation des rapports, consultez « Sécurisation des rapports et des ressources » dans la documentation Reporting Services de la documentation en ligne de SQL Server.

Écriture de requêtes pour des paramètres de rapport à valeurs multiples

Vous pouvez définir un paramètre à valeurs multiples pour n'importe quel paramètre de rapport que vous créez. Toutefois, si vous souhaitez retransmettre plusieurs valeurs de paramètres à une source de données à l'aide de la requête, les conditions suivantes doivent être réunies :

  • La source de données doit être SQL Server, Oracle, Analysis Services, SAP BI NetWeaver ou Hyperion Essbase.

  • La source de données ne peut pas être une procédure stockée. Reporting Services ne prend pas en charge la transmission d'un tableau de paramètres à valeurs multiples à une procédure stockée.

  • La requête doit utiliser une clause IN pour spécifier le paramètre.

L'exemple suivant décrit l'utilisation d'un mot clé IN dans la clause WHERE d'une instruction Transact-SQL. Pour plus d'informations sur le mot clé IN ou sur les résultats renvoyés par cette requête, consultez « IN (Transact-SQL) » dans la documentation SQL Server 2008 de la documentation en ligne de SQL Server.

SELECT FirstName, LastName, e.Title
FROM HumanResources.Employee AS e
    JOIN Person.Contact AS c 
    ON e.ContactID = c.ContactID
WHERE e.Title IN (@Title)

Pour mettre cela en pratique dans un rapport, définissez un dataset à l'aide de cette requête. Modifiez les propriétés du titre du paramètre de rapport créé automatiquement comme suit :

  • Sélectionnez l'option Valeurs multiples.

  • Dans la zone Valeurs disponibles, sélectionnez l'option Sans requête. Entrez la liste suivante dans la colonne Valeur (laissez la colonne Étiquette vide) : Design Engineer, Buyer, Marketing Assistant.

  • Dans la zone Valeurs par défaut, entrez Buyer.

  • Exécutez l'aperçu. Sélectionnez différentes combinaisons de valeurs pour Titre et vérifiez que vous obtenez les résultats attendus.

[!REMARQUE]

Le serveur de rapports réécrit les requêtes pour les sources de données qui ne peuvent pas traiter les paramètres en tant que tableau. La réécriture de la requête est nécessaire pour produire le résultat souhaité. Cette opération est déclenchée lorsqu'un paramètre est défini en tant que paramètre à valeurs multiples et que la requête utilise une instruction IN pour spécifier le paramètre. Si vous créez une requête qui ne comporte pas l'instruction IN, vous devez savoir que vous passez outre la logique fournie par le serveur de rapports pour la prise en charge des paramètres à valeurs multiples.

Les expressions de filtre pour les datasets, les régions de données et les groupes sont définies sur la page Filtre de la boîte de dialogue Propriétés correspondantes. Si vous avez défini une expression de filtre qui fait référence à un paramètre à valeurs multiples, vous devez utiliser l'opérateur IN dans l'expression de filtre. Les expressions de filtre qui utilisent des opérateurs autres que l'opérateur IN génèrent des erreurs de traitement. Pour plus d'informations, consultez Procédure : ajouter un filtre (Générateur de rapports version 2.0).

Écriture d'expressions qui font référence à des paramètres à valeurs multiples

Lorsque vous faites référence à un paramètre dans une expression, vous utilisez la collection Parameters intégrée. Lorsque vous utilisez des paramètres à valeurs multiples dans les expressions, vous devez comprendre comment adresser une valeur unique ainsi que l'ensemble complet de valeurs. Le tableau suivant contient des exemples et des descriptions de propriétés de paramètres pour des paramètres qui sont définis pour autoriser les valeurs multiples.

Exemple

Description

Parameters!<ParameterName>.Value

Tableau de valeurs de données de type variant pour le paramètre.

Parameters!<ParameterName>.Label

Tableau de chaînes qui sont des étiquettes du paramètre.

Parameters!<ParameterName>.IsMultiValue

Propriété booléenne indiquant si l'option Autoriser les valeurs multiples du paramètre a été sélectionnée.

Parameters!<ParameterName>.Count

Nombre de valeurs dans le tableau.

Parameters!<ParameterName>.Value(0)

Première valeur dans un tableau à valeurs multiples.

Parameters!<ParameterName>.Label(0)

Première étiquette dans un tableau à valeurs multiples.

Parameters!<ParameterName>.Value(Parameters! <ParameterName>.Count-1)

Dernière valeur dans un tableau à valeurs multiples.

Parameters!<ParameterName>.Label(Parameters! <ParameterName>.Count-1)

Dernière étiquette dans un tableau à valeurs multiples.

=Join(Parameters!<ParameterName>.Value,", ")

Expression qui concatène, dans le tableau, toutes les valeurs d'un paramètre à valeur multiples de type String en une chaîne.

=Split("Value1, Value2, Value3",",")

Prend une chaîne et crée un tableau d'objets pouvant être utilisé pour la transmission à un sous-rapport ou un rapport d'extraction qui attend un paramètre à valeurs multiples.

Vous pouvez utiliser les fonctions SPLIT et JOIN pour séparer ou associer des valeurs du tableau dans une expression. Vous pouvez utiliser les fonctions STRING et CINT pour convertir les valeurs en chaînes ou en entiers.

Pour plus d'informations et pour obtenir des exemples de paramètres à valeurs multiples et à une seule valeur dans des expressions, consultez Utilisation de références à la collection Parameters dans des expressions (Générateur de rapports version 2.0).