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


8

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?

Réponses:


7

J'ai trouvé une solution. Je n'ai pas correctement divisé les valeurs de 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 à travers le @Flagparamètre. 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 INclause.

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

Une fois mon UDF installé, je peux maintenant modifier ma INclause 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 @Flagcorrectement mon paramètre avecSELECT * FROM UDF()...


Dans le cas où cela aiderait quelqu'un d'autre: l'expression de jointure ( =join(Parameters!<your param name>.Value,",")) peut être ajoutée à l'ensemble de données lisant le paramètre, sous l'onglet "Paramètres": il y a un bouton "fx" pour ajouter des expressions, à droite de la liste déroulante "Valeur du paramètre" -vers le bas.
Doug_Ivison

De plus, au lieu de créer une UDF à analyser, si la valeur de la base de données et les valeurs des paramètres sont uniques de manière fiable et ne sont jamais des sous-ensembles les uns des autres, je saute l'analyse et j'utilise simplement CHARINDEX: par exemple, si le code pour lire le paramètre dans le SQL embarqué était : WHERE <Table>.[<Column>] IN (@MultiValueParm), alors le code dans la procédure stockée pourrait êtreWHERE CHARINDEX(<Table>.[<Column>], @MultiValueParmAsText) > 0
Doug_Ivison

Grand Q & A, merci! Pour info , SQLFool.com semble être en panne. La fonction ParseString () se trouve sur: github.com/MichelleUfford/sql-scripts/blob/master/dev/…
J Weezy
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.