2010-09-14 8 views
6

Dans la fenêtre du générateur Expression de SQL Server Reporting Services 2008 R2, sous Fonctions communes -> Texte -> Élément, il existe une expression appelée Filtre. Cela semble correspondre à Strings.Filter method dans le cadre .NET. La description de Filter est la suivante:Comment utiliser String.Filter avec des paramètres à valeurs multiples

Renvoie un tableau basé sur zéro contenant un sous-ensemble d'un tableau de chaînes basé sur des critères de filtre spécifiés.

L'exemple est le suivant:

=Filter(Parameters!MultivalueParameter.Value, "3", True, CompareMethod.Binary) 

L'exemple et la description implique que vous pouvez consulter un paramètre multi-valeur pour voir si au moins l'une des valeurs sélectionnées est égal au paramètre de match. Je n'ai pas pu obtenir ceci pour renvoyer autre chose que #Error qui implique que le paramètre multi-valeur n'est pas un tableau unidimensionnel. Paramètres! MultivalueParameter.Value.GetType(). ToString() renvoie System.Object [].

Est-ce que quelqu'un sait comment faire fonctionner ça? J'utilise les travaux suivants autour de vérifier si les valeurs ont été sélectionnées dans le paramètre multi-valeur:

=IIF(InStr(" " + JOIN(Parameters!MultivalueParameter.Value, " ") + " ", " 3 ", CompareMethod.Text), false, true) 

Le code ci-dessus fonctionne, mais il est assez laid. Je préférerais utiliser la fonction Filtre si elle supporte ce genre de vérification. Quelqu'un peut-il donner un exemple de code qui fonctionne?

+1

Que 'Paramètres! MultivalueParameter.Value.GetType(). ToString()' vous donner? –

+0

Bonne question. Je vais vérifier cela quand je rentre à la maison aujourd'hui et je vous le ferai savoir. –

+0

Il a renvoyé System.Object []. J'ai ajouté ceci à la question. –

Répondre

6

Le problème se produit car l'exemple de MSDN manque quelque peu pour cette discussion. Il est vrai que = Filter (Paramètres! MultivalueParameter.Value, "3", True, CompareMethod.Binary) renvoie un tableau mais, en termes de SSRS, vous ne pouvez pas simplement afficher un tableau dans un rapport. C'est en partie la raison pour laquelle vous voyez l'erreur. En outre, SSRS semble avoir des problèmes pour gérer les deux paramètres facultatifs de la fonction Filtre. Laissez les sortir et vous serez prêt à partir.

Vous pouvez immédiatement tester ceci en envoyant la longueur longueur à une textboc.

=Filter(Parameters!MultivalueParameter.Value, "3").Length 

Ce qui précède devrait aboutir à une zone de texte avec la longueur entière du paramètre filtré.

Ainsi, pullling tout cela ensemble, vous pouvez obtenir le résultat souhaité avec les éléments suivants:

=IIF(Filter(Parameters!MultivalueParameter.Value, " 3 ").Length > 0, "false", "true") 
+0

J'ai essayé la première expression et elle renvoie une zone de texte vide. J'ai essayé la deuxième expression et il a retourné une zone de texte vide. J'ai essayé d'expérimenter avec des variations sur votre suggestion, mais il a renvoyé des valeurs vides ou #Error. –

+0

Obtenir une zone de texte vide pour la première expression est un bon signe en ce sens que ce n'est pas une erreur. C'est un résultat impair mais un résultat différent qui peut être utilisé pour le dépannage. Le deuxième bit de code a la méthode Longueur répertoriée au mauvais endroit. Je l'ai depuis mis à jour. J'ai ce travail sur un rapport de test donc il y a définitivement une solution de travail. Nous avons juste besoin de comprendre pourquoi cela ne fonctionne pas sur votre rapport. –

+0

Un pas de plus. La première expression renvoie un blanc. La deuxième expression renvoie false. Je vais essayer d'utiliser le .Label au lieu de .Value. .Value se compose de valeurs de 1 à 100 (grossièrement) alors que .Label est constitué de mots anglais. Je vais changer la valeur pour vérifier dans le filtre pour correspondre à l'un des mots anglais. –

2

J'ai utilisé un paramètre multivaleur dans SSRS 2008 pour afficher/masquer des colonnes dans un tableau matriciel.

Cependant, je n'ai jamais pu profiter de la sous-chaîne retournée, et je ne pouvais utiliser le résultat que via la longueur.

=IIF(Filter(Parameters!MultiOption.Value,"3",true).Length>0,"T","F") 

Donc, pour chaque colonne, (1er 2ème 3ème et 4ème colonne) Je voudrais utiliser ce code (avec vrai/falsepart pas des chaînes comme indiqué ci-dessus).

Autre idée de TENTATIVE étaient:

=Filter(Parameters!MultiOption.Value,"3",true).GetValue(0).ToString 

qui peut produire 3, mais dans une condition fausse, GetValue (0) hors limites.

=IIF((Filter(Parameters!MultiOption.Value,"3",true).Length>0), 
Filter(Parameters!MultiOption.Value,"3",true).GetValue(0).ToString, 
"",) 

Qui devrait effectivement retourner seulement la valeur de sous-chaîne si elle existe. Cela n'a pas fonctionné comme ça.

Dallas

Questions connexes