Format du numéro de téléphone et de masquer #ERREUR, lorsque le retour est null SSRS
Je vais avoir un problème et tout ce que j'ai essayé ne fonctionne pas. J'ai un numéro de téléphone datafield qui renvoie les numéros sans formatage '3055558798" mais je veux qu'elle ressemble à ceci '(305)555-8798'. Je peux le faire avec cette expression:
= Format(Convert.ToDouble(Fields!MyFieldName.Value), "(###)###-####")
Le seul problème est que lorsque le retour est null je reçois #ERREUR dans l'espace. J'ai trouvé une expression que se débarrasser de la #ERREUR, mais toujours pas de chance de mettre les deux ensemble. Je dois creuser par le biais de mes rapports à trouver l'expression mais j'espère que quelqu'un pourra m'aider. J'ai fait des rapports pour un couple de mois, mais je ne suis pas encore très bon avec toutes les expressions qui y sont. J'ai juste besoin de formater le numéro de téléphone et, si le retour est null alors de ne pas montrer quoi que ce soit. Il y a aussi ce sur le même site que j'ai trouvé l'expression, mais il ne fonctionne pas donc je ne sais pas pourquoi le mec dit qu'il a travaillé pour lui.
=Iif (Fields!MyFieldName.Value Is Nothing, Nothing,
Format(Convert.ToDouble(Fields!MyFieldName.Value), "(###)###-####"))
Qui ne fonctionne pas pour moi, je crois que la syntaxe est mauvaise, mais je ne sais pas quoi changer pour le fixer. Merci.
select MyFieldName = '3055558798' union all select MyFieldName = null
et la seconde expression travaillé comme nécessaire avec aucune erreur; semble comme il n'y a rien d'intrinsèquement mauvais avec l'expression elle-même.OriginalL'auteur Rodney Maspoch | 2013-07-02
Vous devez vous connecter pour publier un commentaire.
L'erreur que vous avez reçu n'est rien à voir avec mise en forme, il est la conversion de
Double
qui est un échec. Si votre expression fonctionne parfaitement tant que votre domaine est entièrement constitué de caractères numériques. Toutefois, vous avez des données avec des caractères non numériques, causant laConvert.ToDouble()
fonction pour générer une erreur.Malheureusement cela ne peut pas être résolu avec une
IIF
expression, carIIF
est une fonction, pas une structure du langage, donc à la fois le vrai et le faux paramètres ont été évalués avant d'être transmis à la fonction, indépendamment de la valeur de la condition booléenne paramètre. Cela signifie que:tentera toujours de la conversion en double, quel que soit le résultat de la
IsNumeric
fonction. Il ya deux façons de résoudre ce problème:Utilisation Val au lieu de ToDouble
Le problème avec
ToDouble
est-il des erreurs lors de la chaîne à convertir est inadapté à la forme;Val
n'ont pas ce problème - il simplement extrait les chiffres qu'il peut. Alors maintenant, on peut utiliser l'expression:Cette expression renvoie
Nothing
si le champ estNull
, vérifie si elle est numérique et, si oui, le convertit en un nombre et de formats, sinon il retourne juste ce qui est dans le champ.Noter que le
Val
la fonction est encore en cours d'exécution, même lorsque le champ n'est pas numérique, mais cette expression réussit, car l'Val
fonction n'est pas de déclencher des erreurs commeToDouble
. Nous nous contentons de faire le calcul et jeter le résultat.Code personnalisé
Sur le
Report
menu, cliquez surReport Properties...
et aller à laCode
onglet. Insérez le code suivant:Utiliser l'expression suivante dans votre numéro de téléphone cellulaire:
Le format ne va pas faire une erreur lorsqu'il est inférieur ou supérieur à 10 chiffres. Basé sur votre modèle,
30555587
donnera(3)055-5587
et305555879800
donnera(30555)587-9800
de sorte qu'il remplit à partir de la droite et met le bailleur ou plus de chiffres dans la main gauche une partie de la format. Il ne peut être la conversion en double est erroring en raison des caractères non valides.Je ne suis pas sûr de savoir pourquoi vous avez un préjudice à l'encontre du code VBA dans la zone de code, par opposition à un code VBA dans l'expression de Valeur - VBA VBA, peu importe où il est. Cependant, j'ai trouvé le Val de la fonction de conversion que nous pouvons utiliser pour ne pas les jeter une erreur de sorte que vous pouvez avoir une expression qui fonctionne. J'ai ajouté ceci à la réponse.
Salut, j'ai utilisé cette information pour répondre à mes Australien numéros de téléphone qui commencent par zéro, j'ai trouvé # supprimé le premier zéro.
C'est de travailler pour moi. Je ne sais pas pourquoi cette réponse n'ont pas été acceptées
OriginalL'auteur Chris Latta