Forum Discussion
Anonymous
3 years agoNot applicable
Transform columns into rows
Hi everyone, all good? I'm trying to transform columns into rows using Power Query for the following example table: (actual table) FatherID--- A B A B Y 10 20 11 13 W 80 50 ...
- 3 years ago
Hi Anonymous ,
How about this? Note, I could not name multiple columns with the same name though.
Before:
After:
The trick here was to use unpivot columns 🙂
Here the code in Power Query M that you can paste into the advanced editor (if you do not know, how to exactly do this, please check out this quick walkthrough)
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WilTSUTI0ABJGIMLQEEQYK8XqRCuFA5kWIEFTMAHE5kqxsQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [FatherID = _t, A = _t, B = _t, A.1 = _t, B.1 = _t]), #"Unpivoted Columns" = Table.UnpivotOtherColumns(Source, {"FatherID", "A.1", "B.1"}, "Attribute", "Value1"), #"Unpivoted Columns1" = Table.UnpivotOtherColumns(Source, {"FatherID", "A", "B"}, "Attribute", "Value2"), #"Split Column by Delimiter" = Table.SplitColumn(#"Unpivoted Columns1", "Attribute", Splitter.SplitTextByDelimiter(".", QuoteStyle.Csv), {"Attribute", "Attribute.2"}), #"Merged Queries" = Table.NestedJoin(#"Unpivoted Columns", {"FatherID", "Attribute"}, #"Split Column by Delimiter", {"FatherID", "Attribute"}, "Split Column by Delimiter", JoinKind.LeftOuter), #"Expanded Split Column by Delimiter" = Table.ExpandTableColumn(#"Merged Queries", "Split Column by Delimiter", {"Value2"}, {"Value2"}), #"Removed Columns" = Table.RemoveColumns(#"Expanded Split Column by Delimiter",{"A.1", "B.1"}) in #"Removed Columns"Let me know if this helps 🙂
/Tom
https://www.tackytech.blog/
https://www.instagram.com/tackytechtom/
AlienSx
3 years agoSuper User
Hi, Anonymous a weird but names independent attempt
let
// your_table with FartherID etc. as first row (not headers!)
Source = your_table,
columns = Table.ToColumns(Source),
data = List.Buffer(List.Skip(columns)),
c_rows = Table.RowCount(Source) - 1,
f_id = List.Buffer(List.Skip(columns{0})),
v_id = List.Buffer(List.Distinct(List.Skip(Record.FieldValues(Source{0})))),
collect =
List.Transform(
v_id,
(x) => {f_id} & {List.Repeat({x}, c_rows)} & List.Skip(List.Zip(List.Select(data, (w) => List.First(w) = x)))
),
c_values = {1..List.Count(collect{0}) - 2},
val_names = List.Transform(c_values, (x) => "Value" & Text.From(x)),
tbl = Table.Combine(List.Transform(collect, (x) => Table.FromColumns(x, {"FatherID", "ID"} & val_names)))
in
tbl