Power Query - Ajout multiple colonnes en une fois

Bonjour,

J'ai un tableau avec des colonnes ayant le suffixe _OK,
puis d'autres colonnes avec le même nom, mais le suffixe _Try.

Je souhaite ajouter des colonnes "pourcentage de réussite" où chaque colonne _OK est divisée par la colonne correspondante -Try.

C'est bien sûr facile avec

= Table.AddColumn(Source, "aaa_%", each [aaa_OK]/[aaa_Try], Percentage.Type)

Le problème est que, contrairement au fichier exemple, je n'ai pas à répéter l'opération pour 3 colonnes, mais pour 25 à 30 colonnes.

Pour faire ça en une fois, j'imagine qu'il faut passer par un List.Accumulate, mais je ne maitrise pas encore cette fonction.

À vous de jouer.

Bonjour

Hello Messieurs,

Une autre approche.

Du coup juste pour donner des petites explications :

Etape ListCol : permet de récupérer uniquement les colonnes aaa, bbb, ccc etc si jamais il y en a plus

Après on fait un ListAccumulate où notre table de départ c'est ton étape source. Et après ce qu'on dit c'est qu'il va repartir de l'étape source, prendre la variable aaa, et ajouter à ta table source une colonne aaa_% qui fait aaa_OK / aaa_Try.

Ensuite on repart de ta table avec la colonne aaa_% et on passe au deuxième élément de ta liste qui est bbb et ainsi de suite

let
    Source = Excel.CurrentWorkbook(){[Name="Exemple"]}[Content],

    ListCol = List.Distinct(List.Transform(List.Skip(Table.ColumnNames(Source),2), each Text.BeforeDelimiter(_,"_"))),

    ListAccumulate = List.Accumulate(
                ListCol,
                Source,
                (TableDeSortie, AjoutColonne) => Table.AddColumn(TableDeSortie, AjoutColonne & "_%", each Record.Field(_,AjoutColonne &"_OK") / Record.Field(_,AjoutColonne &"_Try"))
)
in
    ListAccumulate

@+

Edit 1 : voici le fichier

Edit 2 : pour être plus propre sur l'étape ListCol :

    ListCol = List.Distinct(List.Transform(List.Select(Table.ColumnNames(Source), each Text.Contains(_,"OK") or Text.Contains(_,"Try")), each Text.BeforeDelimiter(_,"_"))),

Edit 3 : pour être plus propre si jamais un des champs xxx_OK existe et que le xxx_Try n'existe pas et inversement

    ListAccumulate = List.Accumulate(
                ListCol,
                Source,
                (TableDeSortie, AjoutColonne) => Table.AddColumn(TableDeSortie, AjoutColonne & "_%", each try Record.Field(_,AjoutColonne &"_OK") / Record.Field(_,AjoutColonne &"_Try") otherwise "na")

Merci à tous les 2.

Je regarderai de plus près demain.

@BAROUTE78, c'est à un truc comme ça que je pensais. Mais j'ai encore un peu de mal avec cette fonction List.Accumulate, de même que les nouvelles fonctions Excel MAP, SCAN, REDUCE...

A+

J'avais oublié ce fil, Merci à vous 2.

Hey,

Rechercher des sujets similaires à "power query ajout multiple colonnes fois"