How can I accomplish this using PowerQuery? Data in on a worksheet.
Source table:
Col1 | Col2 | Att1 | Att2 | Att3 | Att4 | Att5 | Att6 |
---|---|---|---|---|---|---|---|
AAA | DDD | X | O | alpha | delta | 100 | 400 |
BBB | EEE | Y | P | beta | vega | 200 | 500 |
Desired table:
Col1 | Col2 | CustomName1 | CustomName3 | CustomName3 |
---|---|---|---|---|
AAA | DDD | X | alpha | 100 |
AAA | DDD | O | delta | 400 |
BBB | EEE | Y | beta | 200 |
BBB | EEE | P | vega | 500 |
Agnostic to column names and number of columns, pulling alternate columns
let Source =Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
Leading = 2, Base=List.FirstN(Table.ColumnNames(Source),Leading),
Part1= Table.RemoveFirstN(Table.DemoteHeaders(Table.SelectColumns(Source,Base&List.Alternate(List.Difference(Table.ColumnNames(Source),Base),1,1))),1),
Part2= Table.RemoveFirstN(Table.DemoteHeaders(Table.SelectColumns(Source,Base&List.Alternate(List.RemoveFirstN(Table.ColumnNames(Source),Leading),1,1,1))),1)
in Part1 & Part2
If you need to, first add an leading index column, and change Leading=3, resort at end
EDIT to provide a final rename
let Source =Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
Leading = 2, Base=List.FirstN(Table.ColumnNames(Source),Leading),
Part1= Table.RemoveFirstN(Table.DemoteHeaders(Table.SelectColumns(Source,Base&List.Alternate(List.Difference(Table.ColumnNames(Source),Base),1,1))),1),
Part2= Table.RemoveFirstN(Table.DemoteHeaders(Table.SelectColumns(Source,Base&List.Alternate(List.RemoveFirstN(Table.ColumnNames(Source),Leading),1,1,1))),1),
NewNames= List.FirstN(Table.ColumnNames(Source),Leading)&List.Transform({1 .. List.Count(List.RemoveFirstN(Table.ColumnNames(Part1),Leading))}, each "Custom Name"&Text.From(_)),
#"Rename"=Table.RenameColumns( Part1 & Part2,List.Zip({Table.ColumnNames(Part1),NewNames}))
in #"Rename"