Microsoft 365 Power Query Lancer un ensemble de requetes sur plusieurs fichiers excel

Sokko

XLDnaute Nouveau
Bonjour à tous,

Ceci est ma première demande d'aide dans le forum.
J'ai un ensemble de fichiers excel avec différentes feuilles. Ces fichiers sont tous structurés de la même façon. Dedans les tableaux des différentes feuilles sont peuplés de jour en jour jusqu'à finaliser le projet. Donc j'ai un fichier par jour.

A partir du rapport de test journalier "TestReport_202311xx", j'arrive à modifier et à consolider les données de chaque fichier pour avoir un rapport journalier "DailyResults_202311xx" et ceci en modifiant la source des requetes Query ("TestRecap_V1") et en copiant les données générées sur le fichier "DailyResults_202311xx"

A partir des fichier "DailyResults_202311xx" je rempli manuellement le fichier "Final Report" en copiant la colonne "Testing Date Status" et en modifiat l'entête de cette colonne par la date "Testing Date". Ceci me permets d'avoir une visibilité sur l'évolution des statu des tests. Un test peut etre à l'état fail un jour puis à Passed le jour d'après.

J'éprouve deux difficultés:
1- Comment générer des "DailyResults_202311xx" pour chaque "TestReport_202311xx" automatiquement?
2- Générer le "Final Report" automatiquement à partir des différents "DailyResults_202311xx"

J'ai chargé en pièce jointe les "TestReport_202311xx" et la query "TestRecap_V1" à la racine et les fichier "Final Report" & "DailyResults_202311xx" dans le repertoire "Daily Results"
Ceci sont des examples simplifiées car je travaille avec des fichiers avec une dizaine de feuilles et environ 150 tests au total.

J'éspère avoir été assez clair et vous remercie pour votre aide.

Sokko
 

Pièces jointes

  • Help.zip
    115.4 KB · Affichages: 6
Solution
Bonsoir Sokko et bienvenue sur le forum,

Est-ce que les fichiers DailyResults_202311xx ne te sont utiles que pour générer le fichier Final Report ?

Si c’est bien le cas, il est possible de générer directement le fichier Final Report à partir des n fichiers TestReport_202311xx avec la requête suivante (il faudra adapter l’emplacement du dossier contenant les fichiers TestReport_202311xx à la première étape PathFolder) :
PowerQuery:
let
    PathFolder = "C:\...\DossierDesFichiersTestReport",
    fnExtractClasseurInfo = (xlBinary as binary) as table =>
        let
            ContenuClasseur = Excel.Workbook(xlBinary),
            FiltreFeuillesRésultatsDeTest = Table.SelectRows(ContenuClasseur, each...

mromain

XLDnaute Barbatruc
Bonsoir Sokko et bienvenue sur le forum,

Est-ce que les fichiers DailyResults_202311xx ne te sont utiles que pour générer le fichier Final Report ?

Si c’est bien le cas, il est possible de générer directement le fichier Final Report à partir des n fichiers TestReport_202311xx avec la requête suivante (il faudra adapter l’emplacement du dossier contenant les fichiers TestReport_202311xx à la première étape PathFolder) :
PowerQuery:
let
    PathFolder = "C:\...\DossierDesFichiersTestReport",
    fnExtractClasseurInfo = (xlBinary as binary) as table =>
        let
            ContenuClasseur = Excel.Workbook(xlBinary),
            FiltreFeuillesRésultatsDeTest = Table.SelectRows(ContenuClasseur, each ([Name] <> "TESTING DATE")),
            ColonneDataSélectionnée = Table.SelectColumns(FiltreFeuillesRésultatsDeTest,{"Data"}),
            PromoteHeaders = Table.TransformColumns(ColonneDataSélectionnée,{{"Data", each Table.PromoteHeaders(_, [PromoteAllScalars=true]), type table}}),
            DataDéveloppé = Table.ExpandTableColumn(PromoteHeaders, "Data", {"Tests", "Status", "Date"}, {"Tests", "Status", "Date"}),
            ColonneAjoutéeTestingDate = Table.AddColumn(DataDéveloppé, "Testing Date", each ContenuClasseur{[Item="TESTING DATE",Kind="Sheet"]}[Data][Column1]{1})
        in
            ColonneAjoutéeTestingDate,
    FichiersDuDossier = Folder.Files(PathFolder),
    FiltreFichiersRacine = let path = if Text.EndsWith(PathFolder, "\") then PathFolder else PathFolder & "\" in Table.SelectRows(FichiersDuDossier, each ([Folder Path] = path)),
    FiltreTestReports = Table.SelectRows(FiltreFichiersRacine, each Text.StartsWith([Name], "TestReport_")),
    ColonneContentSélectionnée = Table.SelectColumns(FiltreTestReports,{"Content"}),
    ExtraireDonnéesClasseur = Table.TransformColumns(ColonneContentSélectionnée,{{"Content", fnExtractClasseurInfo, type table}}),
    DonnéesClasseurDéveloppés = Table.ExpandTableColumn(ExtraireDonnéesClasseur, "Content", {"Tests", "Status", "Date", "Testing Date"}, {"Tests", "Status", "Date", "Testing Date"}),
    ColonnesSélectionnées = Table.SelectColumns(DonnéesClasseurDéveloppés,{"Tests", "Testing Date", "Status"}),
    TriParDateTest = Table.Sort(ColonnesSélectionnées,{{"Testing Date", Order.Ascending}}),
    PivotDates = Table.Pivot(Table.TransformColumnTypes(TriParDateTest, {{"Testing Date", type text}}, "fr-FR"), List.Distinct(Table.TransformColumnTypes(TriParDateTest, {{"Testing Date", type text}}, "fr-FR")[#"Testing Date"]), "Testing Date", "Status"),
    listChampDates = List.RemoveFirstN(Table.ColumnNames(PivotDates)),
    ColonneAjoutéeNouvellesValeurs = Table.AddColumn(PivotDates, "NouvellesValeurs", each let listTests = Record.ToList(Record.SelectFields(_, listChampDates)), newVals = List.Transform({0..List.Count(listTests)-1}, each listTests{_} & (if (try listTests{_-1} otherwise null)<>listTests{_} then "_New" else "")) in Record.FromList(newVals, listChampDates), type record),
    ColonnesSuppriméesDates = Table.RemoveColumns(ColonneAjoutéeNouvellesValeurs,listChampDates),
    ColonneDéveloppéesNouvellesValeurs = Table.ExpandRecordColumn(ColonnesSuppriméesDates, "NouvellesValeurs", listChampDates, listChampDates)
in
    ColonneDéveloppéesNouvellesValeurs
Résultat.png

Est-ce que cette solution te convient ?

A+
 

Sokko

XLDnaute Nouveau
Bonsoir Sokko et bienvenue sur le forum,

Est-ce que les fichiers DailyResults_202311xx ne te sont utiles que pour générer le fichier Final Report ?

Si c’est bien le cas, il est possible de générer directement le fichier Final Report à partir des n fichiers TestReport_202311xx avec la requête suivante (il faudra adapter l’emplacement du dossier contenant les fichiers TestReport_202311xx à la première étape PathFolder) :
PowerQuery:
let
    PathFolder = "C:\...\DossierDesFichiersTestReport",
    fnExtractClasseurInfo = (xlBinary as binary) as table =>
        let
            ContenuClasseur = Excel.Workbook(xlBinary),
            FiltreFeuillesRésultatsDeTest = Table.SelectRows(ContenuClasseur, each ([Name] <> "TESTING DATE")),
            ColonneDataSélectionnée = Table.SelectColumns(FiltreFeuillesRésultatsDeTest,{"Data"}),
            PromoteHeaders = Table.TransformColumns(ColonneDataSélectionnée,{{"Data", each Table.PromoteHeaders(_, [PromoteAllScalars=true]), type table}}),
            DataDéveloppé = Table.ExpandTableColumn(PromoteHeaders, "Data", {"Tests", "Status", "Date"}, {"Tests", "Status", "Date"}),
            ColonneAjoutéeTestingDate = Table.AddColumn(DataDéveloppé, "Testing Date", each ContenuClasseur{[Item="TESTING DATE",Kind="Sheet"]}[Data][Column1]{1})
        in
            ColonneAjoutéeTestingDate,
    FichiersDuDossier = Folder.Files(PathFolder),
    FiltreFichiersRacine = let path = if Text.EndsWith(PathFolder, "\") then PathFolder else PathFolder & "\" in Table.SelectRows(FichiersDuDossier, each ([Folder Path] = path)),
    FiltreTestReports = Table.SelectRows(FiltreFichiersRacine, each Text.StartsWith([Name], "TestReport_")),
    ColonneContentSélectionnée = Table.SelectColumns(FiltreTestReports,{"Content"}),
    ExtraireDonnéesClasseur = Table.TransformColumns(ColonneContentSélectionnée,{{"Content", fnExtractClasseurInfo, type table}}),
    DonnéesClasseurDéveloppés = Table.ExpandTableColumn(ExtraireDonnéesClasseur, "Content", {"Tests", "Status", "Date", "Testing Date"}, {"Tests", "Status", "Date", "Testing Date"}),
    ColonnesSélectionnées = Table.SelectColumns(DonnéesClasseurDéveloppés,{"Tests", "Testing Date", "Status"}),
    TriParDateTest = Table.Sort(ColonnesSélectionnées,{{"Testing Date", Order.Ascending}}),
    PivotDates = Table.Pivot(Table.TransformColumnTypes(TriParDateTest, {{"Testing Date", type text}}, "fr-FR"), List.Distinct(Table.TransformColumnTypes(TriParDateTest, {{"Testing Date", type text}}, "fr-FR")[#"Testing Date"]), "Testing Date", "Status"),
    listChampDates = List.RemoveFirstN(Table.ColumnNames(PivotDates)),
    ColonneAjoutéeNouvellesValeurs = Table.AddColumn(PivotDates, "NouvellesValeurs", each let listTests = Record.ToList(Record.SelectFields(_, listChampDates)), newVals = List.Transform({0..List.Count(listTests)-1}, each listTests{_} & (if (try listTests{_-1} otherwise null)<>listTests{_} then "_New" else "")) in Record.FromList(newVals, listChampDates), type record),
    ColonnesSuppriméesDates = Table.RemoveColumns(ColonneAjoutéeNouvellesValeurs,listChampDates),
    ColonneDéveloppéesNouvellesValeurs = Table.ExpandRecordColumn(ColonnesSuppriméesDates, "NouvellesValeurs", listChampDates, listChampDates)
in
    ColonneDéveloppéesNouvellesValeurs
Regarde la pièce jointe 1183227
Est-ce que cette solution te convient ?

A+
Bonsoir mromain,

C'est génial en effet le fichier DailyResults_202311xx est superflus car utilisé uniquement pour generer le rapport final.
Je suis bluffé, c'est vraiment ce que je voulais obtenir au final. Ensuite je m'amuserai à génerer des courbes et des statistiques.
Maintenant je dois regarder ça à tête reposée et sans doute pendant plusieurs jours afin de l'adapter à mes fichiers journalier (120 tests sur 7 feuilles).
Mille mercis pour ton aide. Je te tiens au courant si j'arrive à adapter ton code.

Très bonne soirée et encore merci!!
 

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 221
Membres
103 158
dernier inscrit
laufin