2017-09-15 9 views
0

Très nouveau pour PQ, et je suis assez sûr qu'il peut faire ce dont j'ai besoin dans cette situation, mais j'ai besoin d'aide pour trouver comment y arriver.Power Query: Ajout de caractères à une limite définie sur plusieurs colonnes/lignes

J'ai un rapport de feuille de temps avec 20 colonnes couvrant 50 lignes qui devront être formatées en un document Word pour le téléchargement dans un système séparé. Les données d'origine dans les cellules vont de 0 à n'importe quel nombre à 2 chiffres négatif (ex: "-20"), mais elles doivent être formatées en un ensemble de sept caractères se terminant par ".00".

Exemples: 0 devront devenir « 0000,00 » -4 devra devenir « -004,00 » -25 devra devenir « -025,00 »

Je pense que je devrais être en mesure d'utiliser la Fonction text.insert, mais je ne suis pas assez familier avec M Language pour l'amener à faire ce que je veux qu'il fasse.

Des solutions/suggestions?

Répondre

0

Voici ma précédente réponse revisitée ... mise en place pour utiliser une fonction. Vous pouvez simplement appeler la fonction une fois pour chaque colonne que vous souhaitez reformater. Vous allez simplement passer le nom de la colonne que vous souhaitez reformater à la fonction lorsque vous appelez la fonction à chaque fois.

Créer une nouvelle requête vide:

enter image description here

Ouvrez la nouvelle requête dans l'éditeur avancée et mettre en évidence tout ce qui s'y:

enter image description here

coller ce sur le texte en surbrillance dans la avancée Éditeur:

let 

    FormatIt = (SourceColumn) => 

let 

    Base = Number.Round(SourceColumn,2)*.01, 
    Source = try Text.Start(Text.Range(
       if Base < 7 then Text.From(Base) & "001" else 
       Text.From(Base),0,7),2) & Text.Range(Text.Range(
        if Base < 7 then Text.From(Base) & "001" else 
        Text.From(Base),0,7),3,2) & "." & Text.End(Text.Range(
         if Base < 7 then Text.From(Base) & "001" else 
         Text.From(Base),0,7),2) 
      otherwise "0000.00" 

in 
    Source 

in 

    FormatIt 

... et cliquez sur Terminé.

Une nouvelle fonction a été créée et répertoriée dans la liste des requêtes sur le côté gauche de l'écran.

Ensuite, allez à votre requête avec les colonnes que vous souhaitez reformater (cliquez sur le nom de votre requête qui a les chiffres que vous souhaitez modifier en elle, sur le côté gauche de l'écran) et ...

Cliquez Invoke Fonction personnalisée

enter image description here

Et remplir le pop-up comme ceci:

enter image description here

- Vous pouvez créer un nouveau nom de colonne différent de Custom.1. - Function Query est le nom de votre requête que vous appelez (celle que vous venez de créer lorsque vous avez collé le code) ... pour moi, elle s'appelle Query1.

- La colonne source est la colonne avec les nombres que vous souhaitez mettre en forme.

... et cliquez sur OK.

Vous pouvez appeler cette fonction une fois pour chaque colonne. Il va créer une nouvelle colonne formatée pour chacun.

+0

Cela fonctionne pour tous les nombres différents de zéro, mais qu'en est-il des zéros? Je reçois une erreur, je suppose en raison de la fonction de base en supposant des nombres entiers. – JScott

+0

Désolé pour ça. J'ai mis à jour le code pour la fonction dans ma réponse. J'ai ajouté 'try' &' autrement "0000.00" ', donc le code essayera de changer le nombre comme avant, mais s'il rencontre une erreur due au fait que le nombre initial soit zéro, il utilisera à la place" 0000.00 ". Cela devrait le faire fonctionner pour vous. –

+0

Ça l'a fait! Merci beaucoup pour votre aide. – JScott

0

Vous pouvez utiliser cette formule = Text.PadStart(Text.From([Column1]),4,"0")&".00") dans PQ pour ajouter une nouvelle colonne qui ressemble à vos besoins.

enter image description here

0

est ici une formule certes "occupé" pour le faire:

= Table.AddColumn(#"Changed Type", "Custom", each Text.Start(Text.Range(if Number.Round([Column1],2)*.01 < 7 then Text.From(Number.Round([Column1],2)*.01) & "001" else Text.From(Number.Round([Column1],2)*.01),0,7),2) & Text.Range(Text.Range(if Number.Round([Column1],2)*.01 < 7 then Text.From(Number.Round([Column1],2)*.01) & "001" else Text.From(Number.Round([Column1],2)*.01),0,7),3,2) & "." & Text.End(Text.Range(if Number.Round([Column1],2)*.01 < 7 then Text.From(Number.Round([Column1],2)*.01) & "001" else Text.From(Number.Round([Column1],2)*.01),0,7),2))

enter image description here

Il suppose que vos chiffres que vous souhaitez sont mis en forme Column1 pour commencer. Il crée une nouvelle colonne ... Personnalisée ... avec le résultat formaté. Pour l'essayer, commencez avec Column1 déjà rempli et chargé dans Power Query; puis cliquez sur l'onglet Ajouter une colonne puis sur le bouton de la colonne personnalisée et remplir la fenêtre pop-up comme ceci:

enter image description here

... puis cliquez sur OK.

Avec plus de temps, les parties répétitives pourraient être faites avec des variables pour raccourcir un peu. Cela pourrait également être transformé en fonction, donné un certain temps. Mais je n'ai pas le temps maintenant, alors j'ai pensé que je te donnerais au moins "quelque chose".