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.

Dans Query, ajouter une colonne personnalisée :

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.

Remplacer des valeurs non numériques par null
15/03/2023
= if Value.Is(Number.FromText([Colonne]), Number.Type) then [Colonne] else nullTester si une valeur est une date, un nombre...
= try Value.Is(Date.From([Colonne]), type date) otherwise falseRetourne 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...):

= Table.TransformColumns(
Source,
{{"Content", each Table.SelectColumns(_, {"Colonne1", "Colonne2", "Colonne3"})}}
)