web-dev-qa-db-fra.com

Affichage de valeur vide ou nulle dans les zones de texte SSRS

En utilisant SSRS (2008), quelle est la meilleure façon de gérer les valeurs nulles ou vides et de les remplacer par autre chose à afficher. La solution la plus évidente est

=IIF(IsNothing(Fields!MyField.Value),"NA",Fields!MyFields.Value)

Cela fonctionne bien que ce soit fastidieux, mon espoir était de trouver quelque chose comme une propriété EmptyText sur la zone de texte mais hélas rien. Des idées? Dois-je créer un élément de rapport personnalisé à partir de la base TextBox qui crée cette propriété?

18
keithwarren7

Appeler une fonction personnalisée?

http://msdn.Microsoft.com/en-us/library/ms155798.aspx

Vous pouvez toujours y mettre un cas pour gérer différents types de données "vides"

6
adolf garlic
=IIF(ISNOTHING(CStr(Fields!MyFields.Value)) or CStr(Fields!MyFields.Value) = "","-",CStr(Fields!MyFields.Value))

Utilisez cette expression, vous pouvez obtenir la réponse.

Ici, CStr est une fonction par défaut pour la gestion des types de données String.

9
rajsekar

Je ne serais pas d'accord avec la conversion côté serveur. Si vous faites cela, cela reviendra comme un type de chaîne plutôt que comme un type de date avec tout ce que cela implique (il sera trié comme une chaîne par exemple)

Mon principe lorsque l'on traite des dates est de les garder tapées comme une date aussi longtemps que possible.

Si vous êtes confronté à un goulot d'étranglement des performances sur le serveur de rapports, il existe de meilleures façons de le gérer que de compromettre votre logique.

5
FunkyDexter

Bien que ce ne soit probablement pas mieux que votre solution, vous pouvez ajuster votre T-SQL pour retourner le même résultat en utilisant COALESCE:

SELECT MyField = COALESCE(table.MyField, " NA")

Le raisonnement pour l'espace supplémentaire avant l'AN est de permettre au tri de placer les résultats de l'AN en haut. Étant donné que vos données peuvent varier, ce n'est peut-être pas une excellente option.

2
Aaron D

Je suis d'accord pour effectuer le remplacement du côté SQL, mais utiliser la fonction ISNULL serait la voie que j'irais.

SELECT ISNULL(table.MyField, "NA") AS MyField

Je fais généralement autant de traitement de données sur nos serveurs SQL et j'essaie de faire le moins de manipulation de données possible dans SSRS. Ceci est principalement dû au fait que mon serveur SQL est considérablement plus puissant que mon serveur SSRS.

0
Ryan

Soit en SQL soit en code de rapport (selon la suggestion de fonction d'Adolf Garlic)

En ce moment, je le ferais dans le rapport. J'ai très peu de rapports contre un serveur occupé OLTP et un serveur de rapports sous-estimé. Si j'avais un mélange différent, je le ferais en SQL.

Dans les deux cas, c'est acceptable ...

0
gbn

Je ne pouvais pas faire en sorte que IsNothing() se comporte et je ne voulais pas créer de lignes factices dans mon dataset (par exemple pour une liste donnée de clients, créer une commande factice par mois affichée) et j'ai remarqué que les valeurs nulles affichaient -247192.

Et voilà que cela a fonctionné pour le supprimer (au moins jusqu'à ce que MSFT change SSRS pour le mieux à partir de 08R2) alors pardonnez-moi mais:

=iif(Fields!Sales_Diff.Value = -247192,"",Fields!Sales_Diff.Value)
0
SteveyFo

Essaye ça

=IIF(IsNothing(Fields!MyField.Value)=TRUE,"NA",Fields!MyFields.Value)
0
Akxaya