web-dev-qa-db-fra.com

Comment passer des caractères à valeurs multiples dans le rapport SSRS?

J'ai un rapport SSRS qui contient 3 ensembles de données alimentant une source de données. Le jeu de données principal est une procédure stockée qui regroupe certaines données sur la base d'un ensemble de paramètres alimenté par les deux autres jeux de données.

La procédure stockée principale qui alimente ce rapport a 4 paramètres. L'un est un ID pour le type de données, deux sont pour les dates de début et de fin et le troisième est juste un paramètre indicateur. Le paramètre indicateur est le paramètre à valeurs multiples dans lequel je souhaite transmettre plusieurs valeurs d'indicateur qui sont également des valeurs VARCHAR.

Dans ma procédure stockée pour mon paramètre @Flag, j'ai le commun:

WHERE [Flag] IN (@Flag)

Ensuite, bien sûr, le paramètre @Flag sur l'ensemble de rapports SSRS pour autoriser les "valeurs multiples" qui sont également remplies à partir d'une requête qui extrait ces valeurs @Flag d'une table de dimension.

Mon problème

Dans la plupart des cas, lorsqu'il s'agit de valeurs INT, l'utilisation de la même technique fonctionne. Cependant, lorsque je traite des valeurs de caractères, cela échoue. Si je choisis un indicateur, le rapport fonctionne comme par magie. Si je sélectionne plusieurs indicateurs, il ne semble pas passer correctement les indicateurs à la procédure stockée et aucun résultat ne revient.

Lors du test de l'indicateur à valeurs multiples directement dans la procédure stockée:

WHERE [Flag] IN ('A', 'B', 'C')

La procédure stockée fonctionne correctement. Le problème n'est donc pas la procédure stockée, mais la façon dont SSRS transmet les valeurs à valeurs multiples au paramètre @Flag.

Solutions essayées

J'ai essayé de faire les ajustements suivants à l'ensemble de données SSRS pour ces paramètres @Flag:

=join(Parameters!<your param name>.Value,",")

ET celui-ci aussi:

=SPLIT(JOIN(Parameters!<your param name>.Value,","),",")

Tout cela fonctionne sur des valeurs uniques, mais jamais sur plusieurs valeurs.

Qu'est-ce que j'oublie ici?

8
Fastidious

J'ai trouvé une solution. Je n'ai pas correctement divisé les valeurs dans la procédure stockée avec un UDF.

Pour passer correctement des valeurs multiples dans cette procédure stockée, j'aurais besoin d'ajouter le code suivant au paramètre d'ensemble de données que j'utilise:

=join(Parameters!<your param name>.Value,",")

Cela va fondamentalement joindre plusieurs valeurs dans un tableau et le passer par le paramètre @Flag. L'étape suivante consiste à ajouter du SQL à la procédure stockée pour recevoir et digérer correctement les valeurs afin qu'il lit les valeurs avec la clause IN.

Google recherche en ligne n'importe quel analyseur de chaîne UDF. Il y en a beaucoup à choisir. J'ai utilisé dba_parseString_udf De Michelle Ufford http://sqlfool.com .

Une fois mon UDF installé, je peux maintenant modifier ma clause IN pour recevoir le nouveau paramètre à valeurs multiples transmis par SSRS comme suit:

WHERE [Flag] IN (SELECT * FROM dba_parseString_udf(@Flag, ','))

Par conséquent, SSRS transmettra la valeur suivante:

@Flag = 'A,B,C'

Ensuite, mon UDF analysera correctement cette chaîne pour:

A
B
C

Et remplissez correctement mon paramètre @Flag Avec SELECT * FROM UDF()...

7
Fastidious