Power Query - Nettoyage de fichiers n'ayant pas le même nombre de colonnes
Bonjour,
Dans le cadre de mon travail, je suis amenée à nettoyer des fichiers.
Cette tâche est actuellement manuelle.
Je sais l'effectuer avec Power Query, mais j'ai un soucis de colonnes.
D'un fichier à l'autre, le nombre de colonne peut varier. Comment puis-je rendre mon code "transform file" dynamique pour les colonnes ?
Car actuellement, si dans le fichier A j'ai de la colonne A à Q et que dans le fichier B j'ai de la colonne A à U, il me met en erreur.
Voici ce que je fais :
Data -> Get Data -> From File -> From sharepoint Folder -> j'insère l'url -> Transform Data -> Folder Path (je vais filtrer le dossier où se trouvent mes fichiers) -> content COMBINE -> je choisi Sample File : First File -> j'applique mon code pour nettoyer. Quand je retourne dans ma query, j'ai évidemment une erreur.
Je split une colonne qui a toujours la même structure (et c'est la seule) : O 12345678 (mais elle n'est jamais au même endroit)
let
Source = Excel.Workbook(Parameter1, null, true), #"GHR 231024_Sheet" = Source{0}[Data],
#"Removed Blank Rows" = Table.SelectRows(#"GHR 231024_Sheet", each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null}))),
#"Removed Top Rows" = Table.Skip(#"Removed Blank Rows",4),
#"Added Index" = Table.AddIndexColumn(#"Removed Top Rows", "Index", 0, 1, Int64.Type),
#"Split Column by Delimiter" = Table.SplitColumn(#"Added Index", "Column14", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Column13.1", "Column13.2", "Column13.3", "TEAMCODE"}),
#"Removed Other Columns1" = Table.SelectColumns(#"Split Column by Delimiter",{"Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column13", "TEAMCODE", "Index"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Other Columns1",{{"Column2", "1"}, {"Column3", "2"}, {"Column4", "3"}, {"Column5", "4"}, {"Column6", "5"}, {"Column8", "6"}, {"Column13", "DIV/DEP/RES"}}),
#"Merged Queries" = Table.NestedJoin(#"Renamed Columns", {"TEAMCODE"}, #"Transform Sample File (2)", {"TEAMCODE"}, "LEVEL TEAMCODE TEAMNAME", JoinKind.LeftOuter),
#"Expanded LEVEL TEAMCODE TEAMNAME" = Table.ExpandTableColumn(#"Merged Queries", "LEVEL TEAMCODE TEAMNAME", {"Level"}, {"Level"}),
#"Merged Columns1" = Table.CombineColumns(Table.TransformColumnTypes(#"Expanded LEVEL TEAMCODE TEAMNAME", {{"Column7", type text}}, "en-BE"),{"1", "2", "3", "4", "5", "Column7", "6"},Combiner.CombineTextByDelimiter("", QuoteStyle.None),"TEAMNAME"),
#"Split Column by Delimiter1" = Table.SplitColumn(#"Merged Columns1", "DIV/DEP/RES", Splitter.SplitTextByDelimiter("-", QuoteStyle.Csv), {"DIV/DEP/RES.1", "DIV/DEP/RES.2", "DIV/DEP/RES.3"}),
#"Renamed Columns1" = Table.RenameColumns(#"Split Column by Delimiter1",{{"DIV/DEP/RES.1", "DIV"}, {"DIV/DEP/RES.2", "DEP"}, {"DIV/DEP/RES.3", "RES"}}),
#"Added Conditional Column" = Table.AddColumn(#"Renamed Columns1", "BU", each if [Level] = "2" then [DIV] else null),
#"Filled Down" = Table.FillDown(#"Added Conditional Column",{"BU"}),
#"Remove blanks columns" = Table.RemoveColumns(#"Filled Down", List.Select(Table.ColumnNames(#"Filled Down"),
each List.NonNullCount (Table.Column(#"Filled Down",_)) = 0 ))
in
#"Remove blanks columns"
Est-ce que quelque chose existe pour contrer ce problème de colonnes ?
N'hésitez pas à me faire savoir s'il vous faut autre chose.
Je ne peux pas fournir le fichier sur lequel je travaille car c'est confidentiel,
merci d'avance
Bonjour
Mais ton code est très difficilement lisible
Voilà, je l'ai remis en forme ...
Mon problème se situe vraiment au niveau des colonnes. Comme mon code les nomme, si jamais je n'ai pas la colonneX dans l'autre sheet, ça ne fonctionne pas ..
let Source = Excel.Workbook(Parameter1, null, true),
#"GHR 231024_Sheet" = Source{0}[Data],
#"Removed Blank Rows" = Table.SelectRows(#"GHR 231024_Sheet", each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null}))), #"Removed Top Rows" = Table.Skip(#"Removed Blank Rows",4),
#"Added Index" = Table.AddIndexColumn(#"Removed Top Rows", "Index", 0, 1, Int64.Type), #"Split Column by Delimiter" = Table.SplitColumn(#"Added Index", "Column14", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Column13.1", "Column13.2", "Column13.3", "TEAMCODE"}),
#"Removed Other Columns1" = Table.SelectColumns(#"Split Column by Delimiter",{"Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column13", "TEAMCODE", "Index"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Other Columns1",{{"Column2", "1"}, {"Column3", "2"}, {"Column4", "3"}, {"Column5", "4"}, {"Column6", "5"}, {"Column8", "6"}, {"Column13", "DIV/DEP/RES"}}),
#"Merged Queries" = Table.NestedJoin(#"Renamed Columns", {"TEAMCODE"},
#"Transform Sample File (2)", {"TEAMCODE"}, "LEVEL TEAMCODE TEAMNAME", JoinKind.LeftOuter),
#"Expanded LEVEL TEAMCODE TEAMNAME" = Table.ExpandTableColumn(#"Merged Queries", "LEVEL TEAMCODE TEAMNAME", {"Level"}, {"Level"}),
#"Merged Columns1" = Table.CombineColumns(Table.TransformColumnTypes(#"Expanded LEVEL TEAMCODE TEAMNAME", {{"Column7", type text}}, "en-BE"),{"1", "2", "3", "4", "5", "Column7", "6"},Combiner.CombineTextByDelimiter("", QuoteStyle.None),"TEAMNAME"),
#"Split Column by Delimiter1" = Table.SplitColumn(#"Merged Columns1", "DIV/DEP/RES", Splitter.SplitTextByDelimiter("-", QuoteStyle.Csv), {"DIV/DEP/RES.1", "DIV/DEP/RES.2", "DIV/DEP/RES.3"}),
#"Renamed Columns1" = Table.RenameColumns(#"Split Column by Delimiter1",{{"DIV/DEP/RES.1", "DIV"}, {"DIV/DEP/RES.2", "DEP"}, {"DIV/DEP/RES.3", "RES"}}), #"Added Conditional Column" = Table.AddColumn(#"Renamed Columns1", "BU", each if [Level] = "2" then [DIV] else null),
#"Filled Down" = Table.FillDown(#"Added Conditional Column",{"BU"}),
#"Remove blanks columns" = Table.RemoveColumns(#"Filled Down", List.Select(Table.ColumnNames(#"Filled Down"), each List.NonNullCount (Table.Column(#"Filled Down",_)) = 0 ))
in
#"Remove blanks columns"Bonjour
On peut traiter des colonnes selon leur nom, leur position mais un code seul ne suffit pas, en ce qui me concerne en tout cas, à évaluer quelles étapes posent problèmeUne copie source et cible et la liste de ces étapes permettrait de situer les difficultés