All combinations in power query with dynamic column numbers

gargamalebarbosa

Board Regular
Joined
Aug 4, 2022
Messages
118
Office Version
  1. 365
Platform
  1. Windows
I have a table consisting of 4 columns. I want to find all possible combinations of the desired columns using Power Query. For example, the A-B-D column, the A-B column, or the A-B-C-D columns.
I will write the combinations of the desired columns into a list, and Power Query will generate all the combinations based on that list.
For example, there will be a list in column F, and Power Query will create the combination table based on the column names in that list. The values in the resulting table will be unique

Thank you,


1683915891966.png
 

Excel Facts

Square and cube roots
The =SQRT(25) is a square root. For a cube root, use =125^(1/3). For a fourth root, use =625^(1/4).
Try the following:

Main Table - Name = Data
1236980.xlsx
ABCD
1ABCD
2A1B1C1D1
3A2B2C2D2
4A3B3C3D3
5A4B4D4
6A5D5
7D6
Sheet1

Combinations Table - Name = Combinations
1236980.xlsx
F
1Combinations
2A-B-D
3A-B
4A-B-C-D
5C-B-A
Sheet1

Query:
Power Query:
let
    Data = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
    Combinations = Excel.CurrentWorkbook(){[Name="Combinations"]}[Content],
    Options = Table.ToColumns(Combinations){0},

    TableList = List.Accumulate(Options,
            {},
            (state, current) => 
                let 
                    Options = Text.Split(current, "-"),
                    Table = Table.SelectColumns(Data, Options),
                    
                    Combine = List.Accumulate(Options, 
                                Table.SelectColumns(Table, Options{0}),
                                (state, current) => 
                                    let
                                        AddTable = if current = Options{0} 
                                                    then state 
                                                    else Table.ExpandTableColumn(Table.AddColumn(state, current, each Table.SelectColumns(Table, current)), current, {current}),
                                        RemoveNulls = Table.SelectRows(AddTable, each Record.Field(_, current) <> null)
                                    in
                                        RemoveNulls

                            ),
                    Result = Table.ToColumns(Table.CombineColumns(Combine, Options, Combiner.CombineTextByDelimiter("-", QuoteStyle.None), Text.Combine(Options, "-"))) 

                in
                    state & Result
            ),
    Result = Table.FromColumns(TableList, Options)
in
    Result
Result:
A-B-DA-BA-B-C-DC-B-A
A1-B1-D1A1-B1A1-B1-C1-D1C1-B1-A1
A1-B1-D2A1-B2A1-B1-C1-D2C1-B1-A2
A1-B1-D3A1-B3A1-B1-C1-D3C1-B1-A3
A1-B1-D4A1-B4A1-B1-C1-D4C1-B1-A4
A1-B1-D5A2-B1A1-B1-C1-D5C1-B1-A5
A1-B1-D6A2-B2A1-B1-C1-D6C1-B2-A1
A1-B2-D1A2-B3A1-B1-C2-D1C1-B2-A2
A1-B2-D2A2-B4A1-B1-C2-D2C1-B2-A3
A1-B2-D3A3-B1A1-B1-C2-D3C1-B2-A4
A1-B2-D4A3-B2A1-B1-C2-D4C1-B2-A5
A1-B2-D5A3-B3A1-B1-C2-D5C1-B3-A1
A1-B2-D6A3-B4A1-B1-C2-D6C1-B3-A2
A1-B3-D1A4-B1A1-B1-C3-D1C1-B3-A3
A1-B3-D2A4-B2A1-B1-C3-D2C1-B3-A4
A1-B3-D3A4-B3A1-B1-C3-D3C1-B3-A5
A1-B3-D4A4-B4A1-B1-C3-D4C1-B4-A1
A1-B3-D5A5-B1A1-B1-C3-D5C1-B4-A2
A1-B3-D6A5-B2A1-B1-C3-D6C1-B4-A3
A1-B4-D1A5-B3A1-B2-C1-D1C1-B4-A4
A1-B4-D2A5-B4A1-B2-C1-D2C1-B4-A5
A1-B4-D3A1-B2-C1-D3C2-B1-A1
A1-B4-D4A1-B2-C1-D4C2-B1-A2
A1-B4-D5A1-B2-C1-D5C2-B1-A3
A1-B4-D6A1-B2-C1-D6C2-B1-A4
A2-B1-D1A1-B2-C2-D1C2-B1-A5
A2-B1-D2A1-B2-C2-D2C2-B2-A1
A2-B1-D3A1-B2-C2-D3C2-B2-A2
A2-B1-D4A1-B2-C2-D4C2-B2-A3
A2-B1-D5A1-B2-C2-D5C2-B2-A4
A2-B1-D6A1-B2-C2-D6C2-B2-A5
A2-B2-D1A1-B2-C3-D1C2-B3-A1
A2-B2-D2A1-B2-C3-D2C2-B3-A2
A2-B2-D3A1-B2-C3-D3C2-B3-A3
A2-B2-D4A1-B2-C3-D4C2-B3-A4
A2-B2-D5A1-B2-C3-D5C2-B3-A5
A2-B2-D6A1-B2-C3-D6C2-B4-A1
A2-B3-D1A1-B3-C1-D1C2-B4-A2
A2-B3-D2A1-B3-C1-D2C2-B4-A3
A2-B3-D3A1-B3-C1-D3C2-B4-A4
A2-B3-D4A1-B3-C1-D4C2-B4-A5
A2-B3-D5A1-B3-C1-D5C3-B1-A1
A2-B3-D6A1-B3-C1-D6C3-B1-A2
A2-B4-D1A1-B3-C2-D1C3-B1-A3
A2-B4-D2A1-B3-C2-D2C3-B1-A4
A2-B4-D3A1-B3-C2-D3C3-B1-A5
A2-B4-D4A1-B3-C2-D4C3-B2-A1
A2-B4-D5A1-B3-C2-D5C3-B2-A2
A2-B4-D6A1-B3-C2-D6C3-B2-A3
A3-B1-D1A1-B3-C3-D1C3-B2-A4
A3-B1-D2A1-B3-C3-D2C3-B2-A5
A3-B1-D3A1-B3-C3-D3C3-B3-A1
A3-B1-D4A1-B3-C3-D4C3-B3-A2
A3-B1-D5A1-B3-C3-D5C3-B3-A3
A3-B1-D6A1-B3-C3-D6C3-B3-A4
A3-B2-D1A1-B4-C1-D1C3-B3-A5
A3-B2-D2A1-B4-C1-D2C3-B4-A1
A3-B2-D3A1-B4-C1-D3C3-B4-A2
A3-B2-D4A1-B4-C1-D4C3-B4-A3
A3-B2-D5A1-B4-C1-D5C3-B4-A4
A3-B2-D6A1-B4-C1-D6C3-B4-A5
A3-B3-D1A1-B4-C2-D1
A3-B3-D2A1-B4-C2-D2
A3-B3-D3A1-B4-C2-D3
A3-B3-D4A1-B4-C2-D4
A3-B3-D5A1-B4-C2-D5
A3-B3-D6A1-B4-C2-D6
A3-B4-D1A1-B4-C3-D1
A3-B4-D2A1-B4-C3-D2
A3-B4-D3A1-B4-C3-D3
A3-B4-D4A1-B4-C3-D4
A3-B4-D5A1-B4-C3-D5
A3-B4-D6A1-B4-C3-D6
A4-B1-D1A2-B1-C1-D1
A4-B1-D2A2-B1-C1-D2
A4-B1-D3A2-B1-C1-D3
A4-B1-D4A2-B1-C1-D4
A4-B1-D5A2-B1-C1-D5
A4-B1-D6A2-B1-C1-D6
A4-B2-D1A2-B1-C2-D1
A4-B2-D2A2-B1-C2-D2
A4-B2-D3A2-B1-C2-D3
A4-B2-D4A2-B1-C2-D4
A4-B2-D5A2-B1-C2-D5
A4-B2-D6A2-B1-C2-D6
A4-B3-D1A2-B1-C3-D1
A4-B3-D2A2-B1-C3-D2
A4-B3-D3A2-B1-C3-D3
A4-B3-D4A2-B1-C3-D4
A4-B3-D5A2-B1-C3-D5
A4-B3-D6A2-B1-C3-D6
A4-B4-D1A2-B2-C1-D1
A4-B4-D2A2-B2-C1-D2
A4-B4-D3A2-B2-C1-D3
A4-B4-D4A2-B2-C1-D4
A4-B4-D5A2-B2-C1-D5
A4-B4-D6A2-B2-C1-D6
A5-B1-D1A2-B2-C2-D1
A5-B1-D2A2-B2-C2-D2
A5-B1-D3A2-B2-C2-D3
A5-B1-D4A2-B2-C2-D4
A5-B1-D5A2-B2-C2-D5
A5-B1-D6A2-B2-C2-D6
A5-B2-D1A2-B2-C3-D1
A5-B2-D2A2-B2-C3-D2
A5-B2-D3A2-B2-C3-D3
A5-B2-D4A2-B2-C3-D4
A5-B2-D5A2-B2-C3-D5
A5-B2-D6A2-B2-C3-D6
A5-B3-D1A2-B3-C1-D1
A5-B3-D2A2-B3-C1-D2
A5-B3-D3A2-B3-C1-D3
A5-B3-D4A2-B3-C1-D4
A5-B3-D5A2-B3-C1-D5
A5-B3-D6A2-B3-C1-D6
A5-B4-D1A2-B3-C2-D1
A5-B4-D2A2-B3-C2-D2
A5-B4-D3A2-B3-C2-D3
A5-B4-D4A2-B3-C2-D4
A5-B4-D5A2-B3-C2-D5
A5-B4-D6A2-B3-C2-D6
A2-B3-C3-D1
A2-B3-C3-D2
A2-B3-C3-D3
A2-B3-C3-D4
A2-B3-C3-D5
A2-B3-C3-D6
A2-B4-C1-D1
A2-B4-C1-D2
A2-B4-C1-D3
A2-B4-C1-D4
A2-B4-C1-D5
A2-B4-C1-D6
A2-B4-C2-D1
A2-B4-C2-D2
A2-B4-C2-D3
A2-B4-C2-D4
A2-B4-C2-D5
A2-B4-C2-D6
A2-B4-C3-D1
A2-B4-C3-D2
A2-B4-C3-D3
A2-B4-C3-D4
A2-B4-C3-D5
A2-B4-C3-D6
A3-B1-C1-D1
A3-B1-C1-D2
A3-B1-C1-D3
A3-B1-C1-D4
A3-B1-C1-D5
A3-B1-C1-D6
A3-B1-C2-D1
A3-B1-C2-D2
A3-B1-C2-D3
A3-B1-C2-D4
A3-B1-C2-D5
A3-B1-C2-D6
A3-B1-C3-D1
A3-B1-C3-D2
A3-B1-C3-D3
A3-B1-C3-D4
A3-B1-C3-D5
A3-B1-C3-D6
A3-B2-C1-D1
A3-B2-C1-D2
A3-B2-C1-D3
A3-B2-C1-D4
A3-B2-C1-D5
A3-B2-C1-D6
A3-B2-C2-D1
A3-B2-C2-D2
A3-B2-C2-D3
A3-B2-C2-D4
A3-B2-C2-D5
A3-B2-C2-D6
A3-B2-C3-D1
A3-B2-C3-D2
A3-B2-C3-D3
A3-B2-C3-D4
A3-B2-C3-D5
A3-B2-C3-D6
A3-B3-C1-D1
A3-B3-C1-D2
A3-B3-C1-D3
A3-B3-C1-D4
A3-B3-C1-D5
A3-B3-C1-D6
A3-B3-C2-D1
A3-B3-C2-D2
A3-B3-C2-D3
A3-B3-C2-D4
A3-B3-C2-D5
A3-B3-C2-D6
A3-B3-C3-D1
A3-B3-C3-D2
A3-B3-C3-D3
A3-B3-C3-D4
A3-B3-C3-D5
A3-B3-C3-D6
A3-B4-C1-D1
A3-B4-C1-D2
A3-B4-C1-D3
A3-B4-C1-D4
A3-B4-C1-D5
A3-B4-C1-D6
A3-B4-C2-D1
A3-B4-C2-D2
A3-B4-C2-D3
A3-B4-C2-D4
A3-B4-C2-D5
A3-B4-C2-D6
A3-B4-C3-D1
A3-B4-C3-D2
A3-B4-C3-D3
A3-B4-C3-D4
A3-B4-C3-D5
A3-B4-C3-D6
A4-B1-C1-D1
A4-B1-C1-D2
A4-B1-C1-D3
A4-B1-C1-D4
A4-B1-C1-D5
A4-B1-C1-D6
A4-B1-C2-D1
A4-B1-C2-D2
A4-B1-C2-D3
A4-B1-C2-D4
A4-B1-C2-D5
A4-B1-C2-D6
A4-B1-C3-D1
A4-B1-C3-D2
A4-B1-C3-D3
A4-B1-C3-D4
A4-B1-C3-D5
A4-B1-C3-D6
A4-B2-C1-D1
A4-B2-C1-D2
A4-B2-C1-D3
A4-B2-C1-D4
A4-B2-C1-D5
A4-B2-C1-D6
A4-B2-C2-D1
A4-B2-C2-D2
A4-B2-C2-D3
A4-B2-C2-D4
A4-B2-C2-D5
A4-B2-C2-D6
A4-B2-C3-D1
A4-B2-C3-D2
A4-B2-C3-D3
A4-B2-C3-D4
A4-B2-C3-D5
A4-B2-C3-D6
A4-B3-C1-D1
A4-B3-C1-D2
A4-B3-C1-D3
A4-B3-C1-D4
A4-B3-C1-D5
A4-B3-C1-D6
A4-B3-C2-D1
A4-B3-C2-D2
A4-B3-C2-D3
A4-B3-C2-D4
A4-B3-C2-D5
A4-B3-C2-D6
A4-B3-C3-D1
A4-B3-C3-D2
A4-B3-C3-D3
A4-B3-C3-D4
A4-B3-C3-D5
A4-B3-C3-D6
A4-B4-C1-D1
A4-B4-C1-D2
A4-B4-C1-D3
A4-B4-C1-D4
A4-B4-C1-D5
A4-B4-C1-D6
A4-B4-C2-D1
A4-B4-C2-D2
A4-B4-C2-D3
A4-B4-C2-D4
A4-B4-C2-D5
A4-B4-C2-D6
A4-B4-C3-D1
A4-B4-C3-D2
A4-B4-C3-D3
A4-B4-C3-D4
A4-B4-C3-D5
A4-B4-C3-D6
A5-B1-C1-D1
A5-B1-C1-D2
A5-B1-C1-D3
A5-B1-C1-D4
A5-B1-C1-D5
A5-B1-C1-D6
A5-B1-C2-D1
A5-B1-C2-D2
A5-B1-C2-D3
A5-B1-C2-D4
A5-B1-C2-D5
A5-B1-C2-D6
A5-B1-C3-D1
A5-B1-C3-D2
A5-B1-C3-D3
A5-B1-C3-D4
A5-B1-C3-D5
A5-B1-C3-D6
A5-B2-C1-D1
A5-B2-C1-D2
A5-B2-C1-D3
A5-B2-C1-D4
A5-B2-C1-D5
A5-B2-C1-D6
A5-B2-C2-D1
A5-B2-C2-D2
A5-B2-C2-D3
A5-B2-C2-D4
A5-B2-C2-D5
A5-B2-C2-D6
A5-B2-C3-D1
A5-B2-C3-D2
A5-B2-C3-D3
A5-B2-C3-D4
A5-B2-C3-D5
A5-B2-C3-D6
A5-B3-C1-D1
A5-B3-C1-D2
A5-B3-C1-D3
A5-B3-C1-D4
A5-B3-C1-D5
A5-B3-C1-D6
A5-B3-C2-D1
A5-B3-C2-D2
A5-B3-C2-D3
A5-B3-C2-D4
A5-B3-C2-D5
A5-B3-C2-D6
A5-B3-C3-D1
A5-B3-C3-D2
A5-B3-C3-D3
A5-B3-C3-D4
A5-B3-C3-D5
A5-B3-C3-D6
A5-B4-C1-D1
A5-B4-C1-D2
A5-B4-C1-D3
A5-B4-C1-D4
A5-B4-C1-D5
A5-B4-C1-D6
A5-B4-C2-D1
A5-B4-C2-D2
A5-B4-C2-D3
A5-B4-C2-D4
A5-B4-C2-D5
A5-B4-C2-D6
A5-B4-C3-D1
A5-B4-C3-D2
A5-B4-C3-D3
A5-B4-C3-D4
A5-B4-C3-D5
A5-B4-C3-D6
 
Upvote 0
Solution

Forum statistics

Threads
1,216,031
Messages
6,128,424
Members
449,450
Latest member
gunars

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top