2009-09-01 10 views
1

similaires à cette question: linkSRS Rapports: Paramètres d'URL, plusieurs valeurs

Cependant j'ai déjà maîtrisé cela. Mon problème est un nouveau rapport que nous venons d'ajouter au travail a des valeurs pour les paramètres (c'est-à-dire: 10-New, 20-Cancel, 30-Complete). Pour la vie de moi, je ne peux pas comprendre comment passer plusieurs valeurs pour le même paramètre. (donc à partir de l'exemple précédent, en choisissant 10-New et 30-Complete comme valeurs pour le paramètre).

Est-ce que cela peut être fait? Et si oui, comment?

Répondre

1

Je crois que vous le faites de la même manière que n'importe quel autre rapport, vous séparez simplement votre liste (10,20), c'est pourquoi vous avez besoin d'une fonction pour diviser votre chaîne séparée par virgule en une table (il semble que vous l'avez déjà couvert)

+0

attends, quoi? Le serveur SQL Report Service a une URL d'affichage de rapport (voir cet autre article si vous n'êtes pas sûr de ce dont je parle), il analyse automatiquement les paramètres avec une routine intégrée pour afficher le rapport. Je n'ai aucun contrôle sur cela. J'ai essayé une virgule, et il n'accepte pas cela. – RiddlerDev

+0

Si votre SQL est stocké dans le rapport, vous n'avez pas à vous en préoccuper. Si vous l'avez dans une procédure stockée, SSRS transmet le paramètre multi-valeur sous la forme d'une chaîne délimitée par des virgules, que vous devez ensuite analyser ou convertir en une table. http://msdn.microsoft.com/en-us/library/aa337396%28SQL.90%29.aspx – CodeMonkey1313

+0

c'est bizarre, ça ne marche toujours pas, mais c'était l'article que je n'ai pas pu retrouver. Je vais transmettre cela à notre équipe de rapport. Merci. – RiddlerDev

0

Si vous transmettez plusieurs valeurs à un paremètre, assurez-vous d'abord que le paramètre est marqué pour autoriser plusieurs valeurs. Puis, dans votre requête, assurez-vous d'utiliser une sorte de fonction de séparation pour séparer la chaîne.

0

Vous n'avez pas besoin de le diviser. Vous pouvez faire ce qui suit ...
Assurez-vous que les premières et les dernières valeurs de la chaîne par des virgules delim sont entourés par des guillemets (j'utilise un udf pour le faire)

IF CHARINDEX(',', @Param) <> 1 SET @Value = ',' + @Value   
IF CHARINDEX(',', REVERSE(@Value)) <> 1 SET @Value = @Value + ',' 

Ensuite, placez votre champ seront filtrés dans des virgules et d'expression wild-card et utiliser une comparaison à filtrer votre article ...

SELECT 
    t.Field1, 
    t.Field2 
FROM 
    dbo.Table1 t 
WHERE 
    '%,' + t.Field + ',%' LIKE @Parm 

fonctionne comme un rêve sur tous les champs de chaîne, mais peut se compliquer avec des dates et des entiers, etc.
Vous devrez alors CAST le champ que vous filtrez vers un VARCHAR.

Questions connexes