Je dispose d'un tableau de 10 colonnes.
Chaque colonnes contient les valeurs possibles que la colonne peut contenir. Cela me sert de liste pour la validation des données d'un autre onglet.
Selon les cas, j'ai entre 3 et 4 lignes par colonne.
Comment pourrais-je créer en automatique une matrice regroupant TOUTES les combinaisons possibles? Chaque lignes rerésentant donc une combinaison...
Effectivement, il y a une bonne différence de performances... c'est pas forcément évident de comprendre comment fonctionne le moteur de PowerQuery...
On peut néanmoins retrouver un niveau de performances acceptable sur l'exemple du post #4 en ajoutant un buffer au niveau de la source :
PowerQuery:
let
Source = Table.Buffer(Excel.CurrentWorkbook(){[Name="Tab_ListeValeurs"]}[Content]),
Combinaisons =
let
listColumns = List.Buffer(Table.ColumnNames(Source)),
MergeValues = Table.FromColumns(List.Transform(listColumns, each {List.RemoveNulls(Table.Column(Source, _))}), listColumns)
in
List.Accumulate(List.Reverse(listColumns), MergeValues, (state, current) => Table.ExpandListColumn(state, current))
in
Combinaisons
Je fais ça (uniquement pour les exemples, afin de fournir un jeu de données) avec cette fonction :
PowerQuery:
let
EncodeSourceTable = (table as table) as text =>
let
TableColumnsNames = Table.ColumnNames(table),
NewColumnName = Text.Combine(TableColumnsNames) & "_",
ToLists = Table.RenameColumns(Table.SelectColumns(Table.AddColumn(table, NewColumnName, each Record.ToList(_)), {NewColumnName}), {NewColumnName, "List"})[List],
BinaryTxt = Binary.ToText(Binary.Compress(Json.FromValue(ToLists), Compression.Deflate), BinaryEncoding.Base64),
ColumnsTxt = Text.Combine(List.Transform(TableColumnsNames, each _ & " = _t"), ", "),
TxtRes = "Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText(""" & BinaryTxt & """, BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [" & ColumnsTxt & "])"
in
TxtRes
in
EncodeSourceTable
Elle prend en entrée la table de données à "convertir en json" et retourne la chaine de caractère attendue : Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText(…. Regarde la pièce jointe 1192279
Il suffit alors de la copier pour la mettre dans une étape.