Skip to content

Tips

Supprimer les “trilling spaces”

let
// Étape précédente de votre requête
SourceData = #"Type modifié", // Remplacez par le nom de votre dernière étape
// Obtenir la liste des noms de colonnes actuels
NomsColonnesActuels = Table.ColumnNames(SourceData),
// Créer une liste de paires {ancien nom, nouveau nom}
// Si un nom se termine par un espace, on utilise Text.TrimEnd pour le nettoyer
// Sinon, on garde l'ancien nom
NomsColonnesRenommes = List.Transform(NomsColonnesActuels, (columnName) =>
let
TrimmedName = Text.TrimEnd(columnName)
in
// Si le nom original et le nom coupé sont différents, cela signifie qu'il y avait un espace à la fin
// On renvoie la paire {ancien nom, nouveau nom}
// Sinon, on renvoie une paire où l'ancien nom est égal au nouveau nom (pas de changement)
{columnName, TrimmedName}
),
// 4. Renommer les colonnes
#"Colonnes renommées" = Table.RenameColumns(SourceData, NomsColonnesRenommes)
in
#"Colonnes renommées"

Remonter les erreurs d’une colonne

Ajouter une colonne personnalisée et y indiquer dans le code :
try [<nom de la colonne>]

#shared

Afficher toutes les fonctions internes

Adresser un champ par indirection

Dans une 4e colonne, nous voulons ajouter le contenu du Champ1 ou Champ2 tel que noté dans la colonne Champ.
image.png
Dans Query, ajouter une colonne personnalisée :
image.png
La fonction Record.Field contient un 1er argument (_), qui représente la table actuelle, et un 2d qui indique le champ à utiliser en indirection.

Manipuler une valeur selon sa position

Par exemple avec la fonction Table.ReplaceValue, oldValue est de la forme “valeur à rechercher”, comme ici “contenu” :
= Table.ReplaceValue(#"Type modifié","contenu","test",Replacer.ReplaceText,{"Colonne 1"})
Il faut remplacer l’argument par :
= Table.ReplaceValue(#"Type modifié",#"Type modifié"{0}[Colonne 1],"test",Replacer.ReplaceValue,{"Colonne 1"})
donc sous la forme NomDeLaTable{Numéro de ligne}[Nom de la colonne].
NomDeLaTable est la table produite par l’étape de type Table précédente, donc souvent l’étape précédente.
image.png

Remplacer des valeurs non numériques par null

15/03/2023
= if Value.Is(Number.FromText([Colonne]), Number.Type) then [Colonne] else null

Tester si une valeur est une date, un nombre...

= try Value.Is(Date.From([Colonne]), type date) otherwise false
Retourne TRUE ou FALSE selon que Colonne contient une date ou pas.

Transformer une valeur de chaine en champ

Record.Field(_, sChaine)
Renvoi un champ (indirection, comme la fonction INDIRECT() d’Excel).

Syntaxe Table / Liste / Valeur

Retourne une valeur : Table[NomColonne] (première valeur de la colonne). Table peut être une expression de table comme ici :
TypeModifié = Table.TransformColumnTypes(Source,{{"Colonne1", Int64.Type}}),
vMaxi = Table.Max(TypeModifié, "Colonne1")[Colonne1]

Sélectionner les colonnes avant développement

Le contenu de “Table” de la colonne Content ne contient que les colonnes Content et Name (pas les colonnes Date modified...):
image.png
= Table.TransformColumns(
Source,
{{"Content", each Table.SelectColumns(_, {"Colonne1", "Colonne2", "Colonne3"})}}
)

Want to print your doc?
This is not the way.
Try clicking the ··· in the right corner or using a keyboard shortcut (
CtrlP
) instead.