[SSRS] Comment utiliser un seul dataset pour remplir un paramètre et sélectionner sa valeur par défaut.
Francois Jehl dans son article « [SSRS] dernière valeur d’un dataset comme valeur par défaut » (cf 1.) nous propose une méthode intéressante pour éviter de dupliquer inutilement des datasets et donc des appels inutiles à la base de données. Bien qu’utile, son article a nécessité quelques adaptations pour fonctionner chez moi.
La méthode consiste donc à créer un nouveau paramètre qui servira à sélectionner la valeur par défaut de votre paramètre principale.
Pour cela, ouvrez votre report data, puis faites un clic droit sur le dossier ‘parameter’ et sélectionnez ‘add parameter’.
Dans ce dossier l’ordre des paramètres est important. Votre nouveau paramètre doit se trouver au-dessus du paramètre pour lequel vous voulez sélectionner une valeur par défaut. Si ce n’est pas le cas vous obtiendrez l’erreur suivante :
An error occurred during local report processing. The defaultValue expression for the report parameter ‘TimeMonthName’ contains an error. The expression references the parameter ‘TimeTop’, which does not exis in the Parameters collection. Letters in the names of parameters must use the correct case. |
C’est logique, puisque vous voulez utiliser la valeur d’un paramètre non encore résolu dans l’ordre de traitement des paramètres.
Déplacez donc votre paramètre à l’aide des petites flèches présente en haut de la fenêtre ‘report data’ pour que celui se retrouve au-dessus de l’autre.
Ouvrez les propriétés de votre nouveau paramètre (clic droit ‘parameter properties’).
Dans l’onglet principal :
– donnez un nom à votre paramètre.
– Cochez la case multiple valeurs ‘Allow multiple values’.
– Et déclarez votre paramètre en interne (Internal).
C’est une donnée interne. Elle ne sert que sur le rapport courant donc autant mettre ‘internal’ plutôt que ‘hidden’ ca évitera de surcharger inutilement vos listes de variables possibles lorsque vous ferrez un lien (action) vers ce rapport. Cela évitera aussi sa modification.
Bien maintenant, il ne nous reste plus qu’à donner à ce nouveau paramètre la même source de données que notre paramètre principal.
Donc dans ses propriétés, dans l’onglet ‘Avaible Values’ et ‘Default Values’ sélectionnez votre dataset.
Notre parametre ‘défaut’ étant créé nous allons maintenant pouvoir l’utiliser pour déclarer la valeur par défaut de notre paramètre principal.
Pour cela, il suffit d’aller dans les propriétés de celui-ci et dans l’onglet ‘Default Values’ de saisir l’expression (bouton ‘fx’) suivante :
<em> =Parameters!Nom_Parametre_default.Value(Parameters!Nom_Parametre_default.Count-1)</em> |
Parameters!Nom_Parametre_default.Count-1 permet d’obtenir le nombre de valeur moins une contenu dans le paramètre.
Parameters!Nom_Parametre_default.Value(X) permet d’obtenir la valeur à la position X de la liste du paramètre.
Et voilà, le résultat.
Alors pourquoi est-on obligé de passer par toute cette manipulation ou par un deuxième dataset, juste pour sélectionner une valeur par défaut ? Tout simplement pour éviter cette erreur :
An error occured during local report processing. The definition of the report ‘/mon rapport’ is invalid. A Value expression used for the report parameter ‘TimeMonthName’ refers to a field. Fields cannot be used in report parameter expressions. |
Ce qui est logique vous essayez de filtrer les valeurs d’un paramètre en fonction des valeurs d’un champ d’un dataset qui est potentiellement lui-même filtré à partir du dit paramètre ce qu’interdit SSRS. (Vous connaissez l’histoire du serpent qui se mord la queue ?)
Pour aller plus loin :
– [SSRS] dernière valeur d’un dataset comme valeur par défaut
– [SSRS] Problème de chargement d’un dataset (et multi requête SQL dans un dataset)
Une réponse pour « [SSRS] Comment utiliser un seul dataset pour remplir un paramètre et sélectionner sa valeur par défaut. »