2017-09-06 1 views
2

Je suis en train de convertir l'expression suivante de SQL Server dans une expression de visibilité dans SSRS pour un certain champ de saisie qui contient un message d'erreur:SSRS - Afficher zone de texte si la chaîne contient des numéros

select address, commonPlaceName, municipality where @Location not like '$[0-9]%' 

Mon rapport SSRS permet aux utilisateurs de la recherche pour @Location, qui est une combinaison de l'adresse et commonPlaceName et renvoie une table d'enregistrements. J'essaie de limiter le nombre de lignes retournées en fonction à la fois de la longueur du caractère et si la valeur du paramètre fourni contient un nombre. Je veux afficher un message d'erreur lorsqu'ils recherchent un lieu commun ou une adresse sans numéro dit "Désolé votre recherche était trop large, donc le nombre d'enregistrements a été limité".

j'ai eu la partie de longueur au travail en utilisant les éléments suivants:

=iif(len(Parameters!Location.Value)<=5,false,true) 

Mais je ne peux pas comprendre comment rechercher un numéro dans une chaîne

Pour les personnes intéressées, dans le SQL script, je définis le rowcount basé sur une déclaration de cas qui est parallèle aux options de visibilité que j'essaie de définir dans SSRS.

Je suis encore en train d'apprendre SSRS donc toute aide est très appréciée!

EDIT:

Voici l'instruction SQL J'utilise pour limiter rowcount si cela aide:

declare @top int 

set @top = case when len(@Location) <= 5 then 100 
      when @Location not like '%[0-9]%' then 100 
      when len(@Location) >5 then 0 
     end 

set rowcount @top 

Répondre

0

D'accord Je pense avoir trouvé une solution pour l'instant. J'ai fini par la création d'un nouvel ensemble de données:

select 

'LocationWithNum' = case 
         when @Location like '%[0-9]%' then 'true' 
         else 'false' 
        end 

Puis j'ai changé l'expression de la visibilité du message d'erreur à la zone de texte suivante:

=iif(len(Parameters!Location.Value)<=5 or First(Fields!LocationWithNum.Value, "LocationWithNum") = false, false, true) 

cela semble jusqu'à présent pour bien fonctionner. Faites-moi savoir si vous pensez à autre chose!

0

Il y a plusieurs façons de le faire.

  1. Calculez la visibilité dans votre requête et définissez la visibilité sur le champ de requête calculé. C'est plus propre dans le rapport. Normalement, vous voulez mettre toute la logique d'affichage dans le rapport lui-même, cependant, j'ai été paresseux une fois ou deux.

    = IIF (champs! ShouldShowField.Value == 1,0,1)

  2. Utiliser des fonctions telles que SSRS InStr() ou

    = IIF (Regex.Replace (Fields! MyField.Value, " [MyRegExString] "). Longueur == Les champs! MyField.Value.Length, 0, 1)

  3. Utilisez le code personnalisé pour la manipulation de chaînes avancée et appelez votre code similaire à

    = IIF (Code.ShouldShowTextBox (Fields! MyField.Value), 0,1)

+0

Merci Ross.Le numéro 1 ne fonctionnera pas car je définis le rowcount en fonction d'une instruction case pour éviter une charge de serveur inutile. Pourriez-vous expliquer le numéro 2 un peu plus? Je suis confus par votre utilisation de champs au lieu de mon paramètre @Location et aussi je ne suis pas sûr de ce qui remplace "[MyRegExString]". Merci! – user20224

+0

J'ai modifié ma question initiale pour inclure le code SQL que j'utilise pour limiter le nombre de lignes si cela peut vous aider. – user20224

+0

Si vous souhaitez vérifier la valeur d'un paramètre, remplacez Fields! FieldName, Value par Parameters! Location.Value. En ce qui concerne la regex, vous pourrez peut-être vous en sortir avec [0-9]. Je ne suis pas un expert en regex et je ne voudrais pas donner de conseils trompeurs là-bas. –