Generate the result table from problem table.
📌 Challenge Details and Links
ExcelBI Power Query Challenge Number: 85
Challenge Difficulty: ⭐️⭐️⭐️⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Extract Results From Input with Power Query
Power Query solution 1 for Extract Results From Input, proposed by Bo Rydobon 🇹🇭:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Unpivot = Table.UnpivotOtherColumns(
Table.FillDown(Source, {"Company"}),
{"Company", "Dept"},
"A",
"V"
),
RC = Table.TransformColumns(
Unpivot,
{"A", each "Total " & (if Text.Contains(_, "R") then "Revenue" else "Cost")}
),
Group = Table.Combine(
Table.Group(
RC,
"Company",
{
"T",
each Table.AddColumn(
Table.Pivot(Table.RemoveColumns(_, "Dept"), List.Distinct([A]), "A", "V", List.Sum),
"Total Profit",
each [Total Revenue] - [Total Cost]
)
}
)[T]
),
Total = Table.FromColumns(
List.Transform(Table.ToColumns(Group), each _ & {try List.Sum(_) otherwise "Grand Total"}),
Table.ColumnNames(Group)
)
in
Total
Power Query solution 2 for Extract Results From Input, proposed by Zoran Milokanović:
let
Source = Table.UnpivotOtherColumns(
Table.FillDown(Excel.CurrentWorkbook(){[Name = "Input"]}[Content], {"Company"}),
{"Company", "Dept"},
"A",
"V"
),
Grouping = Table.Group(
Source,
{"Company"},
{
{"Total Revenue", each List.Sum(List.Alternate(Table.Sort(_, {"Dept", "A"})[V], 1, 1, 0))},
{"Total Cost", each List.Sum(List.Alternate(Table.Sort(_, {"Dept", "A"})[V], 1, 1, 1))},
{
"Total Profit",
each
let
t = Table.Sort(_, {"Dept", "A"})[V]
in
List.Sum(
List.Transform(List.Positions(t), each if Number.Mod(_, 2) = 0 then - t{_} else t{_})
)
}
}
),
Solution = Table.FromColumns(
List.Transform(
Table.ToColumns(Grouping),
each _ & {if Value.Is(_{0}, type number) then List.Sum(_) else "Grand Total"}
),
Table.ColumnNames(Grouping)
)
in
Solution
Power Query solution 3 for Extract Results From Input, proposed by Kris Jaganah:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Fill = Table.FillDown(Source, {"Company"}),
Unpivot = Table.UnpivotOtherColumns(Fill, {"Company", "Dept"}, "Attribute", "Value"),
Rev_cost = Table.AddColumn(
Unpivot,
"Revenue / Cost",
each if Text.Contains([Attribute], "Rev") then "Total Revenue" else "Total Cost"
),
Group = Table.Group(
Rev_cost,
{"Company", "Revenue / Cost"},
{{"US$", each List.Sum([Value]), type number}}
),
Index = Table.AddIndexColumn(Group, "Index", 1, 1, Int64.Type),
Pivot = Table.Pivot(
Index,
List.Distinct(Index[#"Revenue / Cost"]),
"Revenue / Cost",
"US$",
List.Sum
),
Up = Table.FillUp(Pivot, {"Total Cost"}),
Filter = Table.SelectRows(Up, each ([Total Revenue] <> null)),
Profit = Table.AddColumn(Filter, "Total Profit", each [Total Revenue] - [Total Cost]),
Cols = Table.ColumnNames(Profit),
Group1 = Table.Group(
Profit,
{},
List.Zip(
{
Cols,
{each "Grand Total"}
& List.Transform(List.Skip(Cols), (x) => each List.Sum(Table.Column(_, x)))
}
)
),
Append = Table.Combine({Profit, Group1}),
#"Sorted Rows" = Table.Sort(Append, {{"Index", Order.Ascending}}),
#"Removed Columns" = Table.RemoveColumns(#"Sorted Rows", {"Index"})
in
#"Removed Columns"
Power Query solution 4 for Extract Results From Input, proposed by Kris Jaganah:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Fill = Table.FillDown(Source, {"Company"}),
Unpivot = Table.UnpivotOtherColumns(Fill, {"Company", "Dept"}, "Attribute", "Value"),
Rev_cost = Table.AddColumn(
Unpivot,
"Revenue / Cost",
each if Text.Contains([Attribute], "Rev") then "Total Revenue" else "Total Cost"
),
Group = Table.Group(
Rev_cost,
{"Company", "Revenue / Cost"},
{{"US$", each List.Sum([Value]), type number}}
),
Pivot = Table.Pivot(
Group,
List.Distinct(Group[#"Revenue / Cost"]),
"Revenue / Cost",
"US$",
List.Sum
),
Profit = Table.AddColumn(Pivot, "Total Profit", each [Total Revenue] - [Total Cost]),
Type = Table.TransformColumnTypes(Profit, {{"Total Profit", type number}}),
Sorted = Table.Sort(Type, {{"Total Profit", Order.Descending}}),
Cols = Table.ColumnNames(Sorted),
Group1 = Table.Group(
Sorted,
{},
List.Zip(
{
Cols,
{each "Grand Total"}
& List.Transform(List.Skip(Cols), (x) => each List.Sum(Table.Column(_, x)))
}
)
),
Append = Table.Combine({Sorted, Group1})
in
Append
Power Query solution 5 for Extract Results From Input, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
FD = Table.FillDown(Source, {"Company"}),
Group = Table.Group(
FD,
{"Company"},
{
{
"All",
each [
a = Table.RemoveColumns(_, {"Company", "Dept"}),
b = Table.SelectColumns(
a,
List.Select(Table.ColumnNames(a), each Text.Contains(_, "Rev"))
),
c = List.Sum(List.Combine(Table.ToColumns(b))),
d = Table.SelectColumns(
a,
List.Select(Table.ColumnNames(a), each Text.Contains(_, "Cost"))
),
e = List.Sum(List.Combine(Table.ToColumns(d))),
f = c - e
][[c], [e], [f]]
}
}
),
Expand = Table.ExpandRecordColumn(
Group,
"All",
{"c", "e", "f"},
{"Total Revenue", "Total Cost", "Total Profit"}
),
Sol = Table.FromRows(
Table.ToRows(Expand)
& {{"Grand Total"} & List.Transform(List.Skip(Table.ToColumns(Expand)), List.Sum)},
Table.ColumnNames(Expand)
)
in
Sol
Power Query solution 6 for Extract Results From Input, proposed by Luan Rodrigues:
let
Fonte = Tabela1,
pb = Table.FillDown(Fonte,{"Company"}),
rev = Table.RemoveColumns(pb,{"Dept"}),
out = Table.UnpivotOtherColumns(rev, {"Company"}, "Atributo", "Valor"),
ext = Table.TransformColumns(out, {{"Atributo", each Text.Start(Text.AfterDelimiter(_, " "),3), type text}}),
sub = Table.ReplaceValue(ext,each [Atributo],
each if [Atributo] = "Rev" then "Total Revenue" else "Total Cost",Replacer.ReplaceText,{"Atributo"}),
pv = Table.Pivot(sub, List.Distinct(sub[Atributo]), "Atributo", "Valor", List.Sum),
add = Table.AddColumn(pv, "Total Profit", each [Total Revenue]-[Total Cost]),
cls = Table.Sort(add,each List.PositionOf(pb[Company],[Company] ) ),
total = cls & hashtag#table({"Company","Total Revenue","Total Cost","Total Profit"},{{"Gran Total",List.Sum(cls[Total Revenue]),List.Sum(cls[Total Cost]),List.Sum(cls[Total Profit])}})
in
total
Power Query solution 7 for Extract Results From Input, proposed by Brian Julius:
let
Source = Table.FillDown(Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], {"Company"}),
UnpivotOther = Table.RemoveColumns(
Table.UnpivotOtherColumns(Source, {"Company", "Dept"}, "Attribute", "Value"),
"Dept"
),
Split = Table.SplitColumn(
UnpivotOther,
"Attribute",
Splitter.SplitTextByPositions({5}),
{"Attribute.1"}
),
ReplaceRev = Table.ReplaceValue(Split, "Rev", "Revenue", Replacer.ReplaceValue, {"Attribute.1"}),
GroupSum = Table.Group(
ReplaceRev,
{"Company", "Attribute.1"},
{{"Total", each List.Sum([Value]), type number}}
),
Pivot = Table.Pivot(GroupSum, List.Distinct(GroupSum[Attribute.1]), "Attribute.1", "Total"),
Rename = Table.RenameColumns(Pivot, {{"Revenue", "Total Revenue"}, {"Cost", "Total Cost"}}),
Subtract = Table.AddColumn(
Rename,
"Total Profit",
each [Total Revenue] - [Total Cost],
type number
),
UnpivotOther2 = Table.UnpivotOtherColumns(Subtract, {"Company"}, "Attribute", "Value"),
GroupSum2 = Table.AddColumn(
Table.Group(UnpivotOther2, {"Attribute"}, {{"Value", each List.Sum([Value]), type number}}),
"Company",
each "Grand Total"
),
Pivot2 = Table.Pivot(GroupSum2, List.Distinct(GroupSum2[Attribute]), "Attribute", "Value"),
AppendGT = Table.Combine({Subtract, Pivot2})
in
AppendGT
Power Query solution 8 for Extract Results From Input, proposed by Eric Laforce:
let
Source = Excel.CurrentWorkbook(){[Name = "tData85"]}[Content],
//-- Sum all table values
fxTSum = (t as table) => List.Sum(Table.ToList(t, List.Sum)),
//-- Sum all table values from a list of Columns Names only
fxTCSum = (t as table, cn as list) => fxTSum(Table.SelectColumns(t, cn)),
CN = Table.ColumnNames(Source),
CN_Rev = List.Select(CN, each Text.Contains(_, "Rev")),
CN_Cost = List.Select(CN, each Text.Contains(_, "Cost")),
Fill_Company = Table.FillDown(Source, {"Company"}),
Group = Table.Group(
Fill_Company,
{"Company"},
{{"TR", each fxTCSum(_, CN_Rev)}, {"TC", each fxTCSum(_, CN_Cost)}}
),
Append_GT = Table.Combine(
{
Group,
Table.FromRecords(
{[Company = "Grand Total", TR = List.Sum(Group[TR]), TC = List.Sum(Group[TC])]}
)
}
),
Add_TP = Table.AddColumn(Append_GT, "TP", each [TR] - [TC]),
Rename = Table.RenameColumns(
Add_TP,
{{"TR", "Total Revenue"}, {"TC", "Total Cost"}, {"TP", "Total Profit"}}
)
in
Rename
Power Query solution 9 for Extract Results From Input, proposed by Victor Wang:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
fillCompany = Table.FillDown(Source, {"Company"}),
removeDept = Table.RemoveColumns(fillCompany, {"Dept"}),
Unpivot = Table.UnpivotOtherColumns(removeDept, {"Company"}, "Attribute", "Value"),
cleanAttribute = Table.TransformColumns(
Unpivot,
{{"Attribute", each Text.Start(Text.AfterDelimiter(_, " "), 3), type text}}
),
Pivot = Table.Pivot(
cleanAttribute,
List.Distinct(cleanAttribute[Attribute]),
"Attribute",
"Value",
List.Sum
),
addProfit = Table.AddColumn(Pivot, "Prof", each [Rev] - [Cos]),
stupidTotalRow = Table.FromRows(
Table.ToRows(addProfit)
& {
{"Grand Total"}
& List.Transform(
List.Skip(Table.ColumnNames(addProfit)),
each List.Sum(Table.Column(addProfit, _))
)
},
{"Company", "Total Revenue", "Total Cost", "Total Profit"}
)
in
stupidTotalRow
Power Query solution 10 for Extract Results From Input, proposed by Sandeep Marwal:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
#"Filled Down" = Table.FillDown(Source, {"Company"}),
#"Removed Columns" = Table.RemoveColumns(#"Filled Down", {"Dept"}),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(
#"Removed Columns",
{"Company"},
"Attribute",
"Value"
),
#"Extracted Text After Delimiter" = Table.TransformColumns(
#"Unpivoted Other Columns",
{
{
"Attribute",
each if Text.AfterDelimiter(_, " ") = "Rev" then "Revenue" else Text.AfterDelimiter(_, " ")
}
}
),
#"Pivoted Column" = Table.Pivot(
#"Extracted Text After Delimiter",
List.Distinct(#"Extracted Text After Delimiter"[Attribute]),
"Attribute",
"Value",
List.Sum
),
#"Inserted Subtraction" = Table.AddColumn(
#"Pivoted Column",
"Profit",
each [Revenue] - [Cost],
type number
),
Custom2 = Table.ToRows(#"Inserted Subtraction"),
Custom1 = Table.Profile(
#"Inserted Subtraction",
{{"New", each true, each try List.Sum(_) otherwise "Total"}}
)[New],
Custom3 = Table.FromRows(Custom2 & {Custom1}, Table.ColumnNames(#"Inserted Subtraction"))
in
Custom3
Power Query solution 11 for Extract Results From Input, proposed by Gráinne Duggan:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Fill = Table.RemoveColumns(Table.FillDown(Source, {"Company"}), {"Dept"}),
Unpivot = Table.UnpivotOtherColumns(Fill, {"Company"}, "Attribute", "Value"),
RevCost = Table.TransformColumns(
Unpivot,
{{"Attribute", each Text.AfterDelimiter(_, " "), type text}}
),
ReplcRev = Table.ReplaceValue(RevCost, "Rev", "Revenue", Replacer.ReplaceValue, {"Attribute"}),
PivCol = Table.Pivot(ReplcRev, List.Distinct(ReplcRev[Attribute]), "Attribute", "Value", List.Sum),
calcProfit = Table.AddColumn(#"PivCol", "Total Profit", each [Revenue] - [Cost], Currency.Type),
TotRevCalc = List.Sum(calcProfit[Revenue]),
TotCostCalc = List.Sum(calcProfit[Cost]),
TotProfitCalc = List.Sum(calcProfit[Total Profit]),
TotLineRecord = Record.ToTable(
Record.FromList(
{"Grand Total", TotRevCalc, TotCostCalc, TotProfitCalc},
{"Company", "Revenue", "Cost", "Total Profit"}
)
),
GrandTot = Table.Pivot(TotLineRecord, List.Distinct(TotLineRecord[Name]), "Name", "Value"),
AppendQry = Table.Combine({calcProfit, GrandTot}),
Type = Table.TransformColumnTypes(
AppendQry,
{
{"Company", type text},
{"Revenue", Currency.Type},
{"Cost", Currency.Type},
{"Total Profit", Currency.Type}
}
)
in
Type
Power Query solution 12 for Extract Results From Input, proposed by Roy Wilson:
let
Source=Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
FdDrp=
let
FDown=Table.FillDown(Source,{"Company"}),
DpCol=Table.RemoveColumns(FDown,"Dept")
in DpCol,
Piv=let
Unpivoted=Table.UnpivotOtherColumns(FdDrp,{"Company"},"Attribute","Value"),
AddCondCol=Table.AddColumn(Unpivoted,"Type",eachifText.Contains([Attribute],"Revenue")then"Rev"elseifText.Contains([Attribute],"Rev")then"Rev"else"Cost"),
Grp=Table.Group(AddCondCol,{"Company","Type"},{{"Total",eachList.Sum([Value]),typenumber}}),
Repiv=Table.Pivot(Grp,List.Distinct(Grp[Type]),"Type","Total",List.Sum),
SetOrd=Table.Sort(Repiv,{{"Company",Order.Descending}})
in SetOrd,
Totals=
let
TotCol=Table.AddColumn(Piv,"TotalProfit",each[Rev]-[Cost],Int64.Type),
RenameCols=Table.RenameColumns(TotCol,{{"Cost","TotalCost"},{"Rev","TotalRevenue"}}),
typeChange=Table.TransformColumnTypes(RenameCols,{{"TotalRevenue",Int64.Type},{"TotalCost",Int64.Type}}),
ColNmes=Table.ColumnNames(typeChange),
MakeRecord=List.Accumulate(ColNmes,[],(s,c)=>Record.AddField(s,c,tryList.Sum(Table.Column(RenameCols,c))otherwise"Total")),
AddTotRow=Table.InsertRows(typeChange,Table.RowCount(typeChange),{MakeRecord})
in
AddTotRow
in
Totals
Power Query solution 13 for Extract Results From Input, proposed by Serbay K.:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Fill = Table.FillDown(Source, {"Company"}),
AddRevenue = Table.AddColumn(
Fill,
"Revenue",
each List.Sum(
List.Transform(
List.Select(Record.FieldNames(_), each Text.Contains(_, "Rev")),
(name) => Record.Field(_, name)
)
),
type number
),
AddCost = Table.AddColumn(
AddRevenue,
"Cost",
each List.Sum(
List.Transform(
List.Select(Record.FieldNames(_), each Text.Contains(_, "Cost")),
(name) => Record.Field(_, name)
)
),
type number
),
AddProfit = Table.AddColumn(
AddCost,
"Profit",
each try [Revenue] - [Cost] otherwise Error.Record,
type number
),
Group = Table.Group(
AddProfit,
{"Company"},
{
{"Total Revenue", each List.Sum([Revenue]), type number},
{"Total Cost", each List.Sum([Cost]), type number},
{"Total Profit", each List.Sum([Profit]), type number}
}
),
AddTotal = Table.Group(
Group,
{},
{
{"Company", each "Grand Total"},
{"Total Revenue", each List.Sum([Total Revenue]), type number},
{"Total Cost", each List.Sum([Total Cost]), type number},
{"Total Profit", each List.Sum([Total Profit]), type number}
}
),
Output = Table.Combine({Group, AddTotal})
in
Output
Power Query solution 14 for Extract Results From Input, proposed by Mohand Tahar IGGUI:
let
Source = Excel.CurrentWorkbook(){[Name = "Tableau1"]}[Content],
#"Title 1" = Table.TransformColumnTypes(
Source,
{
{"Company", type text},
{"Dept", type text},
{"2019 Revenue", Int64.Type},
{"2019 Cost", Int64.Type},
{"2020 Cost", Int64.Type},
{"2020 Rev", Int64.Type},
{"2021 Cost", Int64.Type},
{"2021 Rev", Int64.Type},
{"2022 Rev", Int64.Type},
{"2022 Cost", Int64.Type}
}
),
#"title 2" = Table.FillDown(#"Title 1", {"Company"}),
#"title 3" = Table.RemoveColumns(#"title 2", {"Dept"}),
#"title 4" = Table.AddColumn(
#"title 3",
"Total revenue",
each List.Sum({[2019 Revenue], [2020 Rev], [2021 Rev], [2022 Rev]}),
Int64.Type
),
#"title 5" = Table.AddColumn(
#"title 4",
"Total Cost",
each List.Sum({[2019 Cost], [2020 Cost], [2021 Cost], [2022 Cost]}),
Int64.Type
),
#"title 6" = Table.Group(
#"title 5",
{"Company"},
{
{"Total Revenue", each List.Sum([Total revenue]), type number},
{"Total Cost", each List.Sum([Total Cost]), type number}
}
),
#"title 7" = Table.AddColumn(#"title 6", "Total Profit", each [Total Revenue] - [Total Cost]),
#"title 8" = Table.TransformColumnTypes(#"title 7", {{"Total Profit", type number}})
in
#"title 8"
Solving the challenge of Extract Results From Input with Excel
Excel solution 1 for Extract Results From Input, proposed by Bo Rydobon 🇹🇭:
=LET(a,SCAN(,A2:A15,LAMBDA(a,v,IF(v=0,a,v))),u,UNIQUE(a),r,"R"=TOCOL(MID(C1:J1,6,1)),
HSTACK(VSTACK(A1,u,"Grand Total"),VSTACK("Total "&{"Revenue","Cost","Profit"},
MMULT(MMULT(--IFNA(VSTACK(TOROW(a)=u,1),1),C2:J15),HSTACK(--r,1-r,2*r-1)))))
Excel solution 2 for Extract Results From Input, proposed by Bo Rydobon 🇹🇭:
=LET(a,SCAN(,A2:A15,LAMBDA(a,v,IF(v=0,a,v))),u,UNIQUE(a),
m,MMULT(MMULT(MMULT(N(TOROW(a)=u),C2:J15),N({"R","C"}=TOCOL(MID(C1:J1,6,1)))),{1,0,1;0,1,-1}),
VSTACK(HSTACK(A1,"Total "&{"Revenue","Cost","Profit"}),
HSTACK(u,m),HSTACK("Grand Total",MMULT(TOROW(N(u))+1,m))))
Excel solution 3 for Extract Results From Input, proposed by محمد حلمي:
=LET(
v,SCAN(,A2:A15,LAMBDA(a,b,IF(b="",a,b))),
u,UNIQUE(v),
r,LAMBDA(x,MAP(u,LAMBDA(a,
SUM(TOCOL(IF(FIND(x,C1:J1)*(v=a),C2:J15),2))))),
e,r("e"),
l,r("o"),
w,"Total ",
VSTACK(
HSTACK(A1,w&"Revenue",w&"Cost",w&"Profit"),
HSTACK(u,e,l,e-l),
HSTACK("Grand Total",SUM(e),SUM(l),SUM(e-l))))
Excel solution 4 for Extract Results From Input, proposed by 🇰🇷 Taeyong Shin:
=LET(F,LAMBDA(x,TOCOL(IF(C2:J15,x))),p,PIVOTBY(F(SCAN(,A2:A15,LAMBDA(a,v,IF(v>"",v,a)))),F(REGEXREPLACE(C1:J1,"(d+)|(Rev)$","${1:+Total$2:Revenue}")),F(C2:J15),SUM,,,-1,0,-1),t,MMULT(N(DROP(p,,1)),{1;-1}),HSTACK(p,IF(t,t,"TotalProfit")))
Excel solution 5 for Extract Results From Input, proposed by 🇰🇷 Taeyong Shin:
=LET(
c, A2:A15,h, C1:J1, n, ROW(c),
com, XLOOKUP(n, (c <> "") * n, c, , -1), ucom, UNIQUE(com),
Fx, LAMBDA(x, MMULT(MMULT(--(ucom = TOROW(com)), ISNUMBER(FIND(x, h)) * C2:J15), TOCOL(N(+h) + 1))),
d, HSTACK(ucom, Fx("R"), Fx("C"), Fx("R") - Fx("C")),
VSTACK(d, HSTACK("Grand Total", MMULT({1,1,1}, DROP(d, , 1))))
)
Excel solution 6 for Extract Results From Input, proposed by Oscar Mendez Roca Farell:
=LET(_m, MAP(A2:A15, LAMBDA(a, LOOKUP(2, 1/(LEN(A2:a)>1), A2:a))),_r, REDUCE(HSTACK(A1, "Total "&{"Revenue","Cost","Profit"}), UNIQUE(_m), LAMBDA(i, x, VSTACK(i, LET(_s, TOROW(BYROW(IFERROR(FIND({"*R";"*C"}, C1:J1), ), LAMBDA(r, SUM(FILTER(FILTER(C2:J15, _m=x), r))))), HSTACK(x,_s,SUM(_s*{1,-1})))))), VSTACK(_r, IFERROR((1/BYCOL(_r, LAMBDA(c, SUM(c))))^-1, "Grand Total")))
Excel solution 7 for Extract Results From Input, proposed by Sunny Baggu:
=LET(
_comp, SCAN("", A2:A15, LAMBDA(a, v, IF(LEN(v) > 1, v, a))),
_ucomp, UNIQUE(_comp),
_e1, LAMBDA(a, FILTER(C2:J15, ISERR(SEARCH(a, C1:J1)))),
_e2, LAMBDA(arr,
MAP(_ucomp, LAMBDA(x, SUM(FILTER(arr, _comp = x))))
),
_totalrev, _e2(_e1("cost")),
_totalcost, _e2(_e1("rev")),
_profit, _totalrev - _totalcost,
VSTACK(
{"Company", "Total Revenue", "Total Cost", "Total Profit"},
HSTACK(_ucomp, _totalrev, _totalcost, _profit),
HSTACK(
"Grand Total",
SUM(_totalrev),
SUM(_totalcost),
SUM(_profit)
)
)
)
Excel solution 8 for Extract Results From Input, proposed by Sunny Baggu:
=LET(
_fcomp, SCAN("", A1:A15, LAMBDA(a, v, IF(LEN(v) > 1, v, a))),
_comp, UNIQUE(_fcomp),
_col2, REDUCE(
"Total Revenue",
DROP(_comp, 1),
LAMBDA(a, v,
VSTACK(
a,
SUM(
FILTER(
FILTER(C2:J15, DROP(_fcomp, 1) = v),
ISNUMBER(SEARCH("rev", C1:J1)) * SEQUENCE(, COLUMNS(C1:J1))
)
)
)
)
),
_col3, REDUCE(
"Total Cost",
DROP(_comp, 1),
LAMBDA(a, v,
VSTACK(
a,
SUM(
FILTER(
FILTER(C2:J15, DROP(_fcomp, 1) = v),
ISNUMBER(SEARCH("cost", C1:J1)) * SEQUENCE(, COLUMNS(C1:J1))
)
)
)
)
),
_col4, IFERROR(_col2 - _col3, "Total Profit"),
_tbl, HSTACK(_comp, _col2, _col3, _col4),
VSTACK(_tbl, HSTACK("Grand Total", SUM(DROP(_col2, 1)), SUM(DROP(_col3, 1)), SUM(DROP(_col4, 1))))
)
Excel solution 9 for Extract Results From Input, proposed by Tolga Demirci, PMP, PMI-ACP, MOS-Expert:
=LET(t;LET(r;SEQUENCE(COUNTA(B2:B15));UNIQUE(DROP(TEXTSPLIT(CONCAT(MAP(LET(x;UNIQUE(A2:A15);FILTER(x;x<>0));FILTER(r;A2:A15<>0);VSTACK(DROP(FILTER(r;A2:A15<>0);1);MAX(r)+1)-FILTER(r;A2:A15<>0);LAMBDA(a;b;c;TEXTJOIN(";";;SEQUENCE(;c;b)&","&a)&";")));",";";";TRUE;0;"");;1)));HSTACK(t;MAP(t;LAMBDA(p;SUM(IFERROR(MAP(LET(m;FILTER(SEQUENCE(COUNTA(B2:B15));A2:A15<>0);DROP(TEXTSPLIT(CONCAT(MAP(LET(x;UNIQUE(A2:A15);FILTER(x;x<>0));m;LET(r;FILTER(SEQUENCE(COUNTA(B2:B15));A2:A15<>0);VSTACK(DROP(r;1);MAX(SEQUENCE(COUNTA(B2:B15)))+1)-r);LAMBDA(a;b;c;TEXTJOIN(";";;SEQUENCE(;c;b)&","&a)&";")));",";";";TRUE;0;"");;1));TAKE(MAP(C2:J15;LAMBDA(x;SUMIF(C1:J1;"*Rev*";x)));;1);LAMBDA(o;i;XLOOKUP(p;o;i)));""))));MAP(t;LAMBDA(p;SUM(IFERROR(MAP(LET(m;FILTER(SEQUENCE(COUNTA(B2:B15));A2:A15<>0);DROP(TEXTSPLIT(CONCAT(MAP(LET(x;UNIQUE(A2:A15);FILTER(x;x<>0));m;LET(r;FILTER(SEQUENCE(COUNTA(B2:B15));A2:A15<>0);VSTACK(DROP(r;1);MAX(SEQUENCE(COUNTA(B2:B15)))+1)-r);LAMBDA(a;b;c;TEXTJOIN(";";;SEQUENCE(;c;b)&","&a)&";")));",";";";TRUE;0;"");;1));TAKE(MAP(C2:J15;LAMBDA(x;SUMIF(C1:J1;"*Cost*";x)));;1);LAMBDA(o;i;XLOOKUP(p;o;i)));""))))))
Solving the challenge of Extract Results From Input with Python in Excel
Python in Excel solution 1 for Extract Results From Input, proposed by Alejandro Campos:
df = xl("A1:J15", headers=True).ffill()
df['Total Revenue'], df['Total Cost'] = df.filter(like='Rev')
.sum(1), df.filter(like='Cost').sum(1)
df['Total Profit'] = df['Total Revenue'] - df['Total Cost']
result = df.groupby('Company')[['Total Revenue', 'Total Cost', 'Total Profit']]
.sum().reset_index()
grand_total = result.sum(numeric_only=True).to_frame().T.assign(Company='Grand Total')
result = pd.concat([result, grand_total], ignore_index=True)
order = {c: i for i, c in enumerate(['MSFT', 'Berkshire', 'Exxon', 'Grand Total'])}
result['Order'] = result['Company'].map(order).fillna(len(order))
result = result.sort_values('Order').drop('Order', axis=1).reset_index(drop=True)
result
&&
