Erreur Power Query - Le résultat contient plus de colonnes que prévu
Bonjour à tous et à toutes,
Du à un ajout d'une colonne dans ma source de données, Power Query m'envoie ce jolie message : [DataFormat.Error] Le résultat contient plus de colonnes que prévu.
Petit bémol : cette erreur est "bizarre" car lors de ma dernière étape sur Power Query, je vois les données.Ces derniers s'actualisent. Ce message apparaît seulement lorsque je clique sur une colonne et que je fais "charger plus" pour voir l'ensemble des données de cette dernière.
Néanmoins l'erreur empêche l'actualisation du DataFlow
Pour info, je me suis rendu compte que cette erreur doit être causé à 90% par l'étape CsvContent dans le code ci-dessous. Je me trompe peut-être....
Le problème pourrait se régler en combinant via la colonne Content mais je souhaiterais éviter cela
let
Source = SharePoint.Files("source onedrive", [ApiVersion = 15]),
ChoixFichier = Table.SelectRows(Source, each ([Name] = "sélection fichier")),
AutresColonnesSupprimées = Table.SelectColumns(ChoixFichier, {"Content"}),
CsvContent = Table.AddColumn(AutresColonnesSupprimées, "Personnalisé", each Csv.Document([Content],null,";",null,28591)),
CsvContentDéveloppé = Table.ExpandTableColumn(CsvContent, "Personnalisé", {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21", "Column22", "Column23", "Column24", "Column25", "Column26", "Column27", "Column28", "Column29", "Column30", "Column31", "Column32"}, {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21", "Column22", "Column23", "Column24", "Column25", "Column26", "Column27", "Column28", "Column29", "Column30", "Column31", "Column32"}),
suite code...Je vous remercie d'avance pour votre aide !
Bonne journée et bon week-end.
Bonjour,
Sans filets...
Si tu enlèves tous les noms des colonnes :
let
Source = SharePoint.Files("source onedrive", [ApiVersion = 15]),
ChoixFichier = Table.SelectRows(Source, each ([Name] = "sélection fichier")),
AutresColonnesSupprimées = Table.SelectColumns(ChoixFichier, {"Content"}),
CsvContent = Table.AddColumn(AutresColonnesSupprimées, "Personnalisé", each Csv.Document([Content],null,";",null,28591)),
CsvContentDéveloppé = Table.ExpandTableColumn(CsvContent, "Personnalisé", {}),
suite code...Est-ce que ça le fait?
Bonjour,
Le nombre de colonnes est constant et les en-têtes identiques ?
Cdlt
Bonjour Jean-Eric,
J'ai ajouté une colonne en plus et un en-tête modifié.
Re-,
Aurais-je ramassé un "vent"???
Bonne apm
Bonjour cousinhub, ami breton !
Autant pour moi
J'ai enlevé le nom des colonnes mais cela m'affiche seulement la colonne Content...
Bonjour à tous !
Votre approche contrevient au 8ème commandement de la bible des requêteurs, ainsi libellé... (je cite de mémoire...)
"Pour un dynamisme assuré,
le code rouge sera éliminé"
La fonction Table.ColumnNames devrait vous rendre un grand service......
Salut JFL,
Je ferai attention la prochaine fois
Merci pour cette info. Mais ou je mets cette fonction ?
Le langage M reste encore un mystère pour moi...
Hello
Peut être ainsi ?
Après on part du principe que tous les fichiers ont la même structure en termes de colonnes
CsvContentDéveloppé = Table.ExpandTableColumn(CsvContent, "Personnalisé", Table.ColumnNames(Table.Combine(CsvContent[Personnalisé]))),@+
Bonjour BAROUTE78,
J'ai testé mais malheureusement ça ne fonctionne pas.
Info utile, j'ai seulement 1 fichier csv.
La chose que je ne comprends pas, est que j'ai déjà ajouté des colonnes à différents fichiers CSV mais ils ne m'ont jamais pondu cette erreur.
Le message "DataFormat error" m'indique une erreur de format mais je ne vois pas pourquoi.
La colonne fautive renferme des infos de ce type :
2023-04-12 12:08:11
Bonne reprise en ce lundi.
Théo
Hello,
Aurais tu un exemple de fichier à proposer avec un csv qui n'a qu'une ligne ?
Histoire de pouvoir tester de notre côté ?
@+
Oui bien sûr
J'ai modifié quelques infos mais j'ai respecté la même type de données. Quand c'est du texte j'ai mis du texte et nombre du nombre.
Bon test
Hello,
Je passe, je n'arrive pas à reproduire l'erreur
Bon courage mais essaie de voir du côté du Table.ColumNames. Egalement tu traites un csv donc tu devrais définir ta première ligne de données en header.
@+
Bonsoir à tous !
Je vous propose de tester la modification suivante de votre requête initiale :
CsvContent = Table.AddColumn(AutresColonnesSupprimées, "Personnalisé", each let
a=Csv.Document([Content],null,";",null,28591)
in
Table.PromoteHeaders(a)),
ColSuppAutres = Table.SelectColumns(CsvContent,{"Personnalisé"}),
NamesCol = Table.ColumnNames(ColSuppAutres[Personnalisé]{0}),
Expand = Table.ExpandTableColumn(ColSuppAutres, "Personnalisé", NamesCol)
in
ExpandCe code se substitue à l'ancien à partir de l'étape "CsvContent".
Bonjour JFL,
Merci pour cette proposition.
Malheureusement, lorsque je clique sur "charger plus" pour voir l'ensemble des données d'une colonne, il m'affiche toujours ce message : [DataFormat.Error] Le résultat contient plus de colonnes que prévu.
Ce problème est apparu lorsque j'ai ajouté la colonne "date_traitement". Problème qui disparait lorsque je la supprime. Ce que je trouve bizarre car Power Query arrive à me la convertir correctement.
Je bloque un peu...
Bonjour à tous de nouveau !
Pouvez-vous nous communiquer l'intégralité du code de votre requête ?
Voici mon œuvre d'art d'origine sans les modifications suggérées
Apparemment, une partie est contraire aux règles du groupe. Mais pour plus de faciliter de compréhension, je les affiche tout de même.
let
Source = SharePoint.Files("source onedrive", [ApiVersion = 15]),
ChoixFichier = Table.SelectRows(Source, each ([Name] = "GNX_DimClientsComplets.csv")),
AutresColonnesSupprimées = Table.SelectColumns(ChoixFichier, {"Content"}),
CsvContent = Table.AddColumn(AutresColonnesSupprimées, "Personnalisé", each Csv.Document([Content],null,";",null,28591)),
CsvContentDéveloppé = Table.ExpandTableColumn(CsvContent, "Personnalisé", {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21", "Column22", "Column23", "Column24", "Column25", "Column26", "Column27", "Column28", "Column29", "Column30", "Column31", "Column32"}, {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21", "Column22", "Column23", "Column24", "Column25", "Column26", "Column27", "Column28", "Column29", "Column30", "Column31", "Column32"}),
ColonneSupp = Table.RemoveColumns(CsvContentDéveloppé, {"Content"}),
EntêtesPromus = Table.PromoteHeaders(ColonneSupp, [PromoteAllScalars = true]),
AjoutClientPerso = Table.AddColumn(EntêtesPromus, "Client Perso", each if [ACTIVITECLIENT] = "PERSONNEL" then 1 else 0),
#"Lignes filtrées" = Table.SelectRows(AjoutClientPerso, each ([CODEETABLISSEMENT] <> "CODEETABLISSEMENT")),
AjoutPays = Table.AddColumn(#"Lignes filtrées", "Pays", each "France"),
NomCODECLIENT_ID_CLIENT = Table.RenameColumns(AjoutPays, {{"CODECLIENT", "ID_CLIENT"}}),
IDCliTypeText = Table.TransformColumnTypes(NomCODECLIENT_ID_CLIENT, {{"ID_CLIENT", type text}}),
ValeurIDclientPER_9999 = Table.ReplaceValue(IDCliTypeText, "PER", "9999", Replacer.ReplaceText, {"ID_CLIENT"}),
ValeurIDclientP_99 = Table.ReplaceValue(ValeurIDclientPER_9999, "P", "99", Replacer.ReplaceText, {"ID_CLIENT"}),
TypeModifié = Table.TransformColumnTypes(ValeurIDclientP_99,{{"ID_CLIENT", Int64.Type}, {"Pays", type text}, {"Client Perso", Int64.Type}, {"CP_VILLE", type text}, {"VILLE", type text}, {"CODEPOSTAL", type text}, {"CODEDEPARTEMENT", type text}, {"ADRESSE2", type text}, {"ADRESSE1", type text}, {"EMAIL", type text}, {"TELEPHONE", type text}, {"CONTACT", type text}, {"ETAT", type text}, {"DATECREATION", type date}, {"BLOCAGE", type text}, {"ETABLISSEMENT", type text}, {"CODEETABLISSEMENT", type text}, {"TLV", type text}, {"VRP", type text}, {"REFERENTVRP", type text}, {"TYPEGROUPEMENT", type text}, {"RESPONSABLEGROUPEMENT", type text}, {"GROUPEMENT", type text}, {"TYPESOUSGROUPEMENT", type text}, {"SOUSGROUPEMENT", type text}, {"ACTIVITECLIENT", type text}, {"CATEGORIECLIENT", type text}, {"CODECATEGORIE", type text}, {"CLIENTRETRO", type text}, {"DERNIERE_CDE", type date}, {"CLIENT", type text}, {"NOMCLIENT", type text}, {"CODECLIENTSTAT", type text}, {"DATE_TRAITEMENT", type datetime}}),
ValeurRemplacéeOOfficiel = Table.ReplaceValue(TypeModifié, "O", "Officiel", Replacer.ReplaceText, {"TYPEGROUPEMENT"}),
ValeurRemplacéeGGré = Table.ReplaceValue(ValeurRemplacéeOOfficiel, "G", "Gré", Replacer.ReplaceText, {"TYPEGROUPEMENT"}),
ValeurRemplacéeOOfficiel2 = Table.ReplaceValue(ValeurRemplacéeGGré, "O", "Officiel", Replacer.ReplaceText, {"TYPESOUSGROUPEMENT"}),
ValeurRemplacéeGGré2 = Table.ReplaceValue(ValeurRemplacéeOOfficiel2, "G", "Gré", Replacer.ReplaceText, {"TYPESOUSGROUPEMENT"})
in
ValeurRemplacéeGGré2Bonjour à tous !
Sur la base d'un fichier local, la requête modifiée ne génère aucune erreur.
Je vous la livre donc.
Remarque : Je n'ai pas analysé les autres étapes...
let
Source = SharePoint.Files("source onedrive", [ApiVersion = 15]),
ChoixFichier = Table.SelectRows(Source, each ([Name] = "GNX_DimClientsComplets.csv")),
AutresColonnesSupprimées = Table.SelectColumns(ChoixFichier,{"Content"}),
CsvContent = Table.AddColumn(AutresColonnesSupprimées, "Personnalisé", each let
a=Csv.Document([Content],null,";",null,28591)
in
Table.PromoteHeaders(a)),
ColSuppAutres = Table.SelectColumns(CsvContent,{"Personnalisé"}),
NamesCol = Table.ColumnNames(ColSuppAutres[Personnalisé]{0}),
Expand = Table.ExpandTableColumn(ColSuppAutres, "Personnalisé", NamesCol),
AjoutClientPerso = Table.AddColumn(Expand, "Client Perso", each if [ACTIVITECLIENT] = "PERSONNEL" then 1 else 0),
#"Lignes filtrées" = Table.SelectRows(AjoutClientPerso, each ([CODEETABLISSEMENT] <> "CODEETABLISSEMENT")),
AjoutPays = Table.AddColumn(#"Lignes filtrées", "Pays", each "France"),
NomCODECLIENT_ID_CLIENT = Table.RenameColumns(AjoutPays, {{"CODECLIENT", "ID_CLIENT"}}),
IDCliTypeText = Table.TransformColumnTypes(NomCODECLIENT_ID_CLIENT, {{"ID_CLIENT", type text}}),
ValeurIDclientPER_9999 = Table.ReplaceValue(IDCliTypeText, "PER", "9999", Replacer.ReplaceText, {"ID_CLIENT"}),
ValeurIDclientP_99 = Table.ReplaceValue(ValeurIDclientPER_9999, "P", "99", Replacer.ReplaceText, {"ID_CLIENT"}),
TypeModifié = Table.TransformColumnTypes(ValeurIDclientP_99,{{"ID_CLIENT", Int64.Type}, {"Pays", type text}, {"Client Perso", Int64.Type}, {"CP_VILLE", type text}, {"VILLE", type text}, {"CODEPOSTAL", type text}, {"CODEDEPARTEMENT", type text}, {"ADRESSE2", type text}, {"ADRESSE1", type text}, {"EMAIL", type text}, {"TELEPHONE", type text}, {"CONTACT", type text}, {"ETAT", type text}, {"DATECREATION", type date}, {"BLOCAGE", type text}, {"ETABLISSEMENT", type text}, {"CODEETABLISSEMENT", type text}, {"TLV", type text}, {"VRP", type text}, {"REFERENTVRP", type text}, {"TYPEGROUPEMENT", type text}, {"RESPONSABLEGROUPEMENT", type text}, {"GROUPEMENT", type text}, {"TYPESOUSGROUPEMENT", type text}, {"SOUSGROUPEMENT", type text}, {"ACTIVITECLIENT", type text}, {"CATEGORIECLIENT", type text}, {"CODECATEGORIE", type text}, {"CLIENTRETRO", type text}, {"DERNIERE_CDE", type date}, {"CLIENT", type text}, {"NOMCLIENT", type text}, {"CODECLIENTSTAT", type text}, {"DATE_TRAITEMENT", type datetime}}),
ValeurRemplacéeOOfficiel = Table.ReplaceValue(TypeModifié, "O", "Officiel", Replacer.ReplaceText, {"TYPEGROUPEMENT"}),
ValeurRemplacéeGGré = Table.ReplaceValue(ValeurRemplacéeOOfficiel, "G", "Gré", Replacer.ReplaceText, {"TYPEGROUPEMENT"}),
ValeurRemplacéeOOfficiel2 = Table.ReplaceValue(ValeurRemplacéeGGré, "O", "Officiel", Replacer.ReplaceText, {"TYPESOUSGROUPEMENT"}),
ValeurRemplacéeGGré2 = Table.ReplaceValue(ValeurRemplacéeOOfficiel2, "G", "Gré", Replacer.ReplaceText, {"TYPESOUSGROUPEMENT"})
in
ValeurRemplacéeGGré2
