CSV non-identique d’un dossier à convertir en table

Accueil – Le CFO masqué Forums Power Query CSV non-identique d’un dossier à convertir en table

Mots-clés : 

  • 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 5 mois.
4 sujets de 1 à 4 (sur un total de 4)
  • Auteur
    Articles
  • #93241
    Xavier Théorêt
    Participant

    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 2 années et 9 mois par Xavier Théorêt. Raison: Abonnement au thread
    #93261
    Stéphane Lorin
    Participant

    Bonjour

    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

    #98456
    Xavier Théorêt
    Participant

    Merci 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

    #98743
    Xavier Théorêt
    Participant

    Bonjour 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

4 sujets de 1 à 4 (sur un total de 4)
  • Vous devez être connecté pour répondre à ce sujet.