Accueil – Le CFO masqué › Forums › Power Query › CSV non-identique d’un dossier à convertir en table
Mots-clés : Power query csv
- Ce sujet contient 3 réponses, 2 participants et a été mis à jour pour la dernière fois par Xavier Théorêt, le il y a 2 années et 11 mois.
-
AuteurArticles
-
22 juillet 2021 à 11 h 28 min #93241Xavier ThéorêtParticipant
Bonjour, nous avons un système informatique qui nous génère 3 CSV différents dans un dossier:
– Une liste d’utilisateur (user.csv)
– Une liste de groupe (group.csv)
– Une table de relation utilisateur/groupe (groupmembership.csv)Grâce au cours Powerquery j’ai été capable de faire une Query sur le dossier, et à partir du résultat j’ai créé 3 query additionnelles pour nettoyer/importer chaque fichier CSV. Cela me fourni 3 tables prêtes à combiner plus tard.
Chacune de ces Query ont les étapes suivantes:
Sources -> Navigation -> CSV importé -> Entête promus -> Type modifiéTout fonctionne très bien. Jusqu’au jour où je veux recommencer à partir d’un nouveau dossier.
J’aurais pensé que si je modifie la requête à l’étape “Source” pour le nouveau dossier tout se ferait automatiquement. Mais cela ne fonctionne pas car le nom du dossier est hard codé à ces 3 étapes : Source, Navigation et CSV importé.
Vous voyez mon dilemne, pour réutiliser ma query il faudrait modifier le nom du dossier 3 fois pour les 3 fichiers/query.Il doit sûrement y avoir une stratégie plus efficace pour importer les tables – sans les fusionner – à partir de 3 fichiers CSV distinct.
Voici la query pour un des fichiers:
let
Source = Folder.Files(“P:\Auditeur analyste\_Projets\20210716 – Export”),
#”P:\Auditeur analyste\_Projets\20210716 – Export\_Users csv1″ = Source{[#”Folder Path”=”P:\Auditeur analyste\_Projets\20210716 – Export\”,Name=”Users.csv”]}[Content],
#”CSV importé” = Csv.Document(#”P:\Auditeur analyste\_Projets\20210716 – Export\_Users csv1″,[Delimiter=”,”, Columns=33, Encoding=65001, QuoteStyle=QuoteStyle.None]),
#”En-têtes promus” = Table.PromoteHeaders(#”CSV importé”, [PromoteAllScalars=true]),
#”Type modifié” = Table.TransformColumnTypes(#”En-têtes promus”,{{“UserId”, Int64.Type}, {“FirstName”, type text}, {“MiddleName”, type text}, {“LastName”, type text}, {“UserName”, type text}, {“UserDomain”, type text}, {“LastUpdated”, type datetime}, {“Address”, type text}, {“Company”, type text}, {“Title”, type text}, {“DefaultEmail”, type text}, {“DefaultEmailType”, type text}, {“Email2”, type text}, {“Email2Type”, type text}, {“Email3”, type text}, {“Email3Type”, type text}, {“Email4”, type text}, {“Email4Type”, type text}, {“Email5”, type text}, {“Email5Type”, type text}, {“Phone1”, type text}, {“Phone1Type”, type text}, {“Phone2”, type text}, {“Phone2Type”, type text}, {“Phone3”, type text}, {“Phone3Type”, type text}, {“Phone4”, type text}, {“Phone4Type”, type text}, {“Phone5”, type text}, {“Phone5Type”, type text}, {“AccountStatus”, type text}, {“LastLoginDate”, type datetime}, {“ForcePasswordChange”, type logical}})
in
#”Type modifié”Merci à l’avance, je m’excuse à l’avance car je n’ai pas complété la partie langage M. Si la réponse s’y trouve merci de m’y référer. Sinon quelle serait à haut niveau la stratégie à adopter pour générer ces tables, peut-on générer trois tables à partir d’une seule requête?
Xavier
PS: Google est peu d’assistance car nous sommes inondés d’exemples qui combinent les CSV ensemble – ce qui n’est pas le cas ici.
- Ce sujet a été modifié le il y a 3 années et 2 mois par Xavier Théorêt. Raison: Abonnement au thread
24 juillet 2021 à 12 h 35 min #93261Stéphane LorinParticipantBonjour
commencez par créer un paramètre avec votre chemin “P:\Auditeur analyste\_Projets\20210716 – Export”
puis affectez ce paramètre à l’étape “Source”Source = Folder.Files(NomDuParamètre),
ensuite lors de la seconde étape, la référence au dossier peut être inutile s’il n’y a pas de sous-dossier contenant les mêmes noms et donc que vos 3 fichiers csv sont uniques.
dans ce cas, la partie en gras peut être supprimée
#”P:\Auditeur analyste\_Projets\20210716 – Export\_Users csv1″ = Source{[#”Folder Path”=”P:\Auditeur analyste\_Projets\20210716 – Export\”,Name=”Users.csv”]}[Content],de plus le nom de l’étape en italique qui a été créée automatiquement par Power Query peut être modifié en un nom plus clair.
Ce nom sera ensuite repris à la troisième étape. En effet, le chemin d’accès que vous lisez lors de cette étape #”CSV importé” est le nom de l’étape précédente et non un nouvel appel au chemin d’accès.Au final
let
Source = Folder.Files(NomDuParamètre),
Contenu = Source{[Name=”Users.csv”]}[Content],
#”CSV importé” = Csv.Document(Contenu,[Delimiter=”,”, Columns=33, Encoding=65001, QuoteStyle=QuoteStyle.None]),
…Stéphane
5 novembre 2021 à 13 h 38 min #98456Xavier ThéorêtParticipantMerci Stéphane de la réponse et désolé du retard dans ma réponse. Malheureusement il me faut encore avancer un peu plus dans PowerQuery avant de pouvoir saisir votre réponse au complet.
Par exemple j’ai découvert ce matin comment “Faire un paramètre”. Venant de la programmation, je croyais qu’on fait les “paramètres” à partir du code mais Dans PowerQuery il y a un menu dédié aux paramètres dans le ruban.
Selon un video vu ce matin (que je n’ai peut-être pas tout saisi) je comprends que la partie en italique est une sorte de variable qui contient le résultat de l’étape. C’est drôle parce que le tutoriel que je suivait n’avait pas de # ni de “”. Si j’ai bien compris, s’il y a un espace c’est à ce moment que le format #”variable_avec_espace” devient obligatoire.
Je crois que je vais retourner voir le video sur le langage M. C’est super qu’on conserve l’accès – très pratique!
Merci encore!
Xavier
6 novembre 2021 à 23 h 33 min #98743Xavier ThéorêtParticipantBonjour juste un retour sur ma réponse. J’ai repassé en diagonale les formations sur le langage M du CFO masqué et je n’ai pas trouvé de mention des paramètres. J’ai été voir dans la documentation de Microsoft et ce n’est pas si compliqué que ça à utiliser. J’ai utilisé le paramètre à tous les endroits où était “hard codé” le chemin et ça fonctionné.
Merci pour la suggestion!
Xavier
-
AuteurArticles
- Vous devez être connecté pour répondre à ce sujet.