Pivot the data as shown. Data for level 1 will appear against 1, 2, 3 (level column) and 0, 1, 2, 3, 4 column values are for sublevels 0, 1, 2, 3, 4 (1, 1.1, 1.2 and so on). Try to be dynamic so if levels / sublevels increase or decrease.
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 663
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Pivot Hierarchical Sublevels with Power Query
Power Query solution 1 for Pivot Hierarchical Sublevels, proposed by Kris Jaganah:
let
A = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
B = Table.SplitColumn(
A,
"Level",
each [a = Text.From(_), b = if Text.Contains(a, ".") then Text.Split(a, ".") else {a, "0"}][b],
{"Level", "Spl"}
),
C = Table.Pivot(B, List.Distinct(B[Spl]), "Spl", "Value", each _{0}?)
in
C
Power Query solution 2 for Pivot Hierarchical Sublevels, proposed by Vida Vaitkunaite:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Split = Table.SplitColumn(
Source,
"Level",
each {
Text.BeforeDelimiter(Text.From(_), "."),
if Text.Contains(Text.From(_), ".") then Text.AfterDelimiter(Text.From(_), ".") else "0"
},
{"Level", "Level2"}
),
Final = Table.Pivot(Split, List.Distinct(Split[Level2]), "Level2", "Value")
in
Final
Power Query solution 3 for Pivot Hierarchical Sublevels, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Split = Table.TransformColumns(
Source,
{
{
"Level",
each
let
a = _,
b = Text.From(a),
c = if Text.Contains(b, ".") then b else b & ".0",
d = Table.FromRows({Text.Split(c, ".")}, {"Level", "B"})
in
d
}
}
),
Expand = Table.ExpandTableColumn(Split, "Level", {"Level", "B"}),
Sol = Table.Pivot(Expand, List.Distinct(Expand[B]), "B", "Value")
in
Sol
Power Query solution 4 for Pivot Hierarchical Sublevels, proposed by Abdallah Ally:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Group = Table.Group(
Source,
"Level",
{
"Data",
each Table.FromRows({[Value]}, List.Transform({0 .. List.Count([Value]) - 1}, Text.From))
},
0,
(x, y) => Value.Compare(Number.RoundDown(x), Number.RoundDown(y))
),
Result = Table.ExpandTableColumn(Group, "Data", Table.ColumnNames(Table.Combine(Group[Data])))
in
Result
Power Query solution 5 for Pivot Hierarchical Sublevels, proposed by Ramiro Ayala Chávez:
let
S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
a = Table.TransformColumnTypes(S, {"Level", type text}),
b = Table.TransformColumns(a, {"Level", each if Text.Length(_) = 1 then _ & ",0" else _}),
c = Table.SplitColumn(b, "Level", Splitter.SplitTextByDelimiter(","), {"L1", "L2"}),
d = Table.DemoteHeaders(
Table.Pivot(Table.Sort(c, {"L2", 0}), List.Distinct(c[L2]), "L2", "Value")
),
Sol = Table.ReplaceValue(d, "L1", Table.ColumnNames(b){0}, Replacer.ReplaceText, {"Column1"})
in
Sol
Power Query solution 6 for Pivot Hierarchical Sublevels, proposed by Alexandre Garcia:
let
A = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
B = Table.FromRows(
Table.ToList(
A,
each
let
x = Text.ToList(Text.From(_{0}))
in
{x{0}, x{2}? ?? "0", _{1}}
),
{"x", "y", "z"}
),
C = Table.Combine(
Table.Group(
B,
"x",
{"y", each Table.FromRecords({[Level = [x]{0}] & Record.FromList([z], [y])})}
)[y]
)
in
C
Power Query solution 7 for Pivot Hierarchical Sublevels, proposed by Krzysztof Kominiak:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
A = Table.AddColumn(Source, "tmp", each Number.Round(Number.Mod([Level], 1) * 10)),
B = Table.TransformColumns(A, {"Level", each Number.Round(_, 0)}),
Result = Table.Pivot(
Table.TransformColumnTypes(B, {{"tmp", type text}}),
List.Distinct(Table.TransformColumnTypes(B, {{"tmp", type text}})[tmp]),
"tmp",
"Value"
)
in
Result
Power Query solution 8 for Pivot Hierarchical Sublevels, proposed by Sahan Jayasuriya:
let
Source = Excel.CurrentWorkbook(){[Name = "Data"]}[Content],
SplitCol = Table.SplitColumn(
Table.TransformColumnTypes(Source, {{"Level", type text}}, "en-US"),
"Level",
each {
Text.BeforeDelimiter(_, "."),
if Text.AfterDelimiter(_, ".") = "" then "0" else Text.AfterDelimiter(_, ".")
},
{"Level", "Col"}
),
Pivot = Table.Pivot(SplitCol, List.Distinct(SplitCol[Col]), "Col", "Value", List.Sum)
in
Pivot
Solving the challenge of Pivot Hierarchical Sublevels with Excel
Excel solution 1 for Pivot Hierarchical Sublevels, proposed by Bo Rydobon 🇹🇭:
=LET(l,A2:A10,p,PIVOTBY(INT(l),MOD(l*10,10),B2:B10,SINGLE,,0,,0),IF(TAKE(p,1)&TAKE(p,,1)="","Level",p))
Excel solution 2 for Pivot Hierarchical Sublevels, proposed by Rick Rothstein:
=IFNA(DROP(REDUCE(E2:I2,D3:D5,LAMBDA(a,x,VSTACK(a,TRANSPOSE(FILTER(B2:B10,INT(A2:A10)=x))))),1),"")
Assuming the header are not there...
=LET(v,UNIQUE(INT(A2:A10)),h,HSTACK(v,IFNA(DROP(REDUCE({0,1,2,3,4},v,LAMBDA(a,x,VSTACK(a,TRANSPOSE(FILTER(B2:B10,INT(A2:A10)=x))))),1),"")),VSTACK(HSTACK("Level",SEQUENCE(,COLUMNS(h)-1,0)),h))
Excel solution 3 for Pivot Hierarchical Sublevels, proposed by John V.:
=LET(i,A2:A10,p,PIVOTBY(INT(i),MOD(10*i,10),B2:B10,SUM,,0,,0),IF((p<"")+SEQUENCE(ROWS(p))-1,p,"Level"))
Excel solution 4 for Pivot Hierarchical Sublevels, proposed by Kris Jaganah:
=LET(a,
A2:A10,
b,
INT(
a
),
c,
INT((a-b)*10),
d,
PIVOTBY(
b,
c,
B2:B10,
MIN,
,
0,
,
0
),
IF(
SCAN(
,
d,
CONCAT
)="",
"Level",
d
))
Excel solution 5 for Pivot Hierarchical Sublevels, proposed by Timothée BLIOT:
=PIVOTBY(
LEFT(
A2:A10
),
RIGHT(
TEXT(
A2:A10,
"0.0"
)
),
B2:B10,
SUM,
,
0,
,
0
)
Excel solution 6 for Pivot Hierarchical Sublevels, proposed by Duy Tùng:
=LET(a,PIVOTBY(INT(A2:A10),MOD(A2:A10*10,10),B2:B10,SUM,,0,,0),IF(SEQUENCE(ROWS(a),COLUMNS(a))=1,A1,a))
=LET(a,INT(A2:A10),REDUCE(HSTACK(A1,SEQUENCE(,MAX(FREQUENCY(a,a)),0)),UNIQUE(a),LAMBDA(c,v,IFNA(VSTACK(c,HSTACK(v,TOROW(FILTER(B2:B10,a=v)))),""))))
Excel solution 7 for Pivot Hierarchical Sublevels, proposed by Sunny Baggu:
=LET(
_a, FIXED(A2:A10, 1),
_b, UNIQUE(LEFT(_a)) + 0,
_c, TOROW(UNIQUE(RIGHT(_a))),
_d, (_b & "." & _c) + 0,
_e, XLOOKUP(_d, A2:A10, B2:B10, ""),
VSTACK(HSTACK(A1, _c), HSTACK(_b, _e))
)
Excel solution 8 for Pivot Hierarchical Sublevels, proposed by Anshu Bantra:
=LET(
data_,A2:B10,
rows_,--IFNA(TEXTBEFORE(CHOOSECOLS(data_,1),"."),CHOOSECOLS(data_,1)),
cols_,--IFNA(TEXTAFTER(CHOOSECOLS(data_,1),"."),0),
table_,PIVOTBY(rows_,cols_,CHOOSECOLS(data_,2),SUM,,0,,0),
matrix_, MAKEARRAY(COUNT(UNIQUE(rows_))+1,COUNT(UNIQUE(cols_))+1,LAMBDA(r,c,((r-1)+(c-1)))),
IF(matrix_=0,"Level",table_)
)
Excel solution 9 for Pivot Hierarchical Sublevels, proposed by Md. Zohurul Islam:
=LET(
u,
A2:A10,
v,
B2:B10,
a,
UNIQUE(
INT(
u
)
),
b,
SEQUENCE(
,
MAX(
a
)+2,
0
),
d,
MAP(
ABS(
a&"."&b
),
LAMBDA(
x,
XLOOKUP(
x,
u,
v,
""
)
)
),
e,
HSTACK(
VSTACK(
"Level",
a
),
VSTACK(
b,
d
)
),
e
)
Excel solution 10 for Pivot Hierarchical Sublevels, proposed by Pieter de B.:
=LET(
p,
PIVOTBY(
LEFT(
A1:A10
),
TEXTAFTER(
A1:A10,
".",
,
,
,
0
),
B1:B10,
MIN,
,
0,
,
0
),
IF(
SEQUENCE(
ROWS(
p
)
)-1,
p,
IF(
p="",
"Level",
p
)
)
)
Excel solution 11 for Pivot Hierarchical Sublevels, proposed by Hamidi Hamid:
=LET(x,INT(A2:A10),g,GROUPBY(x,B2:B10,ARRAYTOTEXT,,0),f,DROP(g,,1),s,HSTACK(TAKE(g,,1),IFERROR(DROP(REDUCE(0,f,LAMBDA(a,b,VSTACK(a,TEXTSPLIT(b,", ",,)))),1),"")),VSTACK(HSTACK("Level",DROP(SEQUENCE(,COLUMNS(s))-1,,-1)),s))
Excel solution 12 for Pivot Hierarchical Sublevels, proposed by Asheesh Pahwa:
=LET(
d,
A2:A10,
t,
TEXT(
d,
"0.0"
),
l,
UNIQUE(
LEFT(
d
)
),
r,
TOROW(
UNIQUE(
RIGHT(
d
)
)
),
h,
HSTACK(
0,
r
),
VSTACK(
HSTACK(
"Level",
h
),
HSTACK(
l,
XLOOKUP(
l&"."&h,
t,
B2:B10,
""
)
)
)
)
Excel solution 13 for Pivot Hierarchical Sublevels, proposed by ferhat CK:
=LET(a,PIVOTBY(IFNA(TEXTBEFORE(A2:A10,","),A2:A10),IFNA(TEXTAFTER(A2:A10,","),0),B2:B10,MAX,,0,,0),IF(SCAN(,a,COUNT)="","Level",a))
Excel solution 14 for Pivot Hierarchical Sublevels, proposed by Jaroslaw Kujawa:
=MAKEARRAY(4;6;LAMBDA(r;c;IF((r=1)*(c=1);"Level";IF(r=1;c-2;IF(c=1;r-1;IFNA(XLOOKUP(1*(r-1&"."&c-2);A3:A11;B3:B11);""))))))
Excel solution 15 for Pivot Hierarchical Sublevels, proposed by Jaroslaw Kujawa:
=LET(x;A3:A11;a;SEQUENCE(;1+MAX(1*TAKE(GROUPBY(RIGHT(x);x;MAX;;0);;1));0);b;SEQUENCE(MAX(1*TAKE(GROUPBY(LEFT(x);RIGHT(x);MAX;;0);;1)););c;MAKEARRAY(MAX(b);MAX(a)+1;LAMBDA(r;c;IFNA(XLOOKUP(1*(r&"."&c-1);x;OFFSET(x;;1));"")));HSTACK(VSTACK("Level";b);VSTACK(a;c)))
Excel solution 16 for Pivot Hierarchical Sublevels, proposed by Ankur Sharma:
=LET(
r,
A2:A10,
at,
ARRAYTOTEXT,
tb,
TEXTBEFORE,
a,
MAX(
--TEXTAFTER(
r,
".",
,
,
,
0
)
) + 1,
b,
at(
SEQUENCE(
1,
a,
0
)
),
c,
tb(
r,
".",
,
,
,
r
),
d,
DROP(
GROUPBY(
tb(
r,
".",
,
,
,
r
),
B2:B10,
at,
,
0
),
,
1
),
HSTACK(
VSTACK(
"Level",
UNIQUE(
c
)
),
TEXTSPLIT(
TEXTJOIN(
"-",
,
b,
d
),
", ",
"-",
,
,
""
)
)
)
Excel solution 17 for Pivot Hierarchical Sublevels, proposed by Meganathan Elumalai:
=LET(a,PIVOTBY(INT(A2:A10),TEXTAFTER(A2:A10,".",,,,0),B2:B10,SUM,,0,,0),IF(TAKE(a,1)&TAKE(a,,1)="","Level",a))
Excel solution 18 for Pivot Hierarchical Sublevels, proposed by Peter Bartholomew:
= LET(
textID, TEXT(level, "#0.0"),
level1, TEXTBEFORE(textID, "."),
level2, TEXTAFTER(textID, "."),
PIVOTBY(level1, level2, value, SUM,,0,,0)
)
&&&
