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")