1
votes

Numéro surround à interpréter comme texte

J'ai un fichier CSV et l'un des champs nommés période stocke le numéro. Maintenant, dans SSRS, je dois utiliser un paramètre à valeurs multiples, en raison du fonctionnement de SSRS pour l'utiliser avec un CSV, je dois faire Join (Parameters! Period.Value, ",") code >.

Ce problème avec ceci est alors que mon ensemble de données a la requête suivante:

="SELECT WarehouseZone, RevenueStream,ClientID,CONVERT(varchar(10),Period) FROM BudgetCSV.csv 
WHERE WarehouseZone IN ('" & Join(Parameters!Warehouse.Value,"', '") & "') 
AND (RevenueStream IN ('" & Join(Parameters!AnalysisCode.Value,"', '") & "'))
AND (ClientID IN ('" & Join(Parameters!Customer.Value,"', '") & "'))
AND (CONVERT(varchar(10),Period) IN  ('"& Join(Parameters!Period.Value, "','") & "'))"

Ce code fonctionne bien pour la zone, le flux et le client, j'obtiens une incompatibilité de type de données de période.

Est-il possible d'utiliser Powerquery pour que le csv pense que période est du texte. J'ai vu quelque part qu'en faisant dire à la colonne = "1" , cela interpréterait cela comme du texte au lieu d'un entier.


0 commentaires

3 Réponses :


2
votes

Vous pouvez utiliser Text.From ou Number.ToText pour convertir une valeur numérique en texte.

Number.ToText(Period)

ou

Text.From(Period)


1 commentaires

Salut, cela ne semble pas fonctionner car lorsque je l'exporte au format CSV, il considère toujours la colonne comme un entier.



0
votes

MODIFIER: CE QUI SUIT NE FONCTIONNE PAS - L'utilisation de cette méthode ne fonctionne qu'au niveau individuel, heureusement il y a une meilleure solution

J'ai donc mentionné dans un article précédent que je pourrais me déplacer en utilisant la jointure en créant un seul paramètre pour chaque période, mais cela causait un problème où si je sélectionnais 10, 1 serait également renvoyé car, des chaînes.

Cela est dû au fait que j'ai utilisé le code suivant sur chacun de ces paramètres

=iif(Join(Parameters!Period.Value,",") = 1, 1,-999)

Changement simple de ce code en ce qui suit

=iif(Join(Parameters!Period.Value,",").ToLowerInvariant().Contains("10"), "10",-999)

Le problème est donc résolu, mais toute entrée sur la façon dont je pourrais faire fonctionner une solution plus dynamique serait formidable car il se peut que dans le futur, je doive utiliser une liste de nombres plus longue.


0 commentaires

0
votes

Ajout comme une autre réponse pour la postérité pour voir mes erreurs.

Il existe en fait un moyen beaucoup plus simple d'y parvenir. entrez la description de l'image ici

En ajoutant le filtre ci-dessus à l'ensemble de données, vous pouvez y parvenir sans avoir besoin de SQL ou de paramètres supplémentaires. C'est probablement évident pour quiconque travaille avec SSRS depuis un certain temps, mais je suis plutôt nouveau dans ce domaine.


0 commentaires