Home » Transpose Team Problem Table

Transpose Team Problem Table

Transpose the problem table into result table. Sorting to be done on Team column

📌 Challenge Details and Links
ExcelBI Power Query Challenge Number: 103
Challenge Difficulty: ⭐️⭐️⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn

Solving the challenge of Transpose Team Problem Table with Power Query

Power Query solution 1 for Transpose Team Problem Table, proposed by Bo Rydobon 🇹🇭:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  TP = Table.Group(
    Table.Transpose(Table.DemoteHeaders(Source)), 
    "Column1", 
    {
      "T", 
      each Table.ExpandListColumn(
        Table.TransformColumns(
          Table.SelectRows(
            Table.Skip(
              Table.Transpose(
                Table.FirstN(Table.FillUp(_, Table.ColumnNames(_)), 2), 
                {"Dept", "Team"}
              )
            ), 
            each [Dept] <> null
          ), 
          {"Team", each Text.Split(Text.From(_), ", ")}
        ), 
        "Team"
      )
    }, 
    0, 
    (b, e) => Number.From(Text.End(e, 1) < "A")
  ), 
  Ans = Table.RenameColumns(
    Table.ExpandTableColumn(TP, "T", {"Dept", "Team"}), 
    {"Column1", "Group"}
  )
in
  Ans
Power Query solution 2 for Transpose Team Problem Table, proposed by Zoran Milokanović:
let
  Source = Excel.CurrentWorkbook(){[Name = "Input"]}[Content], 
  Flatten = Table.FromColumns(
    List.Transform(Table.ToColumns(Source), each {List.RemoveNulls(_){0}}), 
    Table.ColumnNames(Source)
  ), 
  Unpivot = Table.UnpivotOtherColumns(Flatten, {}, "A", "Team"), 
  GroupDept = Table.SelectRows(
    Table.FillDown(
      Table.SplitColumn(
        Unpivot, 
        "A", 
        each 
          let
            f = Text.StartsWith(_, "G")
          in
            {if f then _ else null, if f then null else _}, 
        {"Group", "Dept"}
      ), 
      {"Group"}
    ), 
    each ([Dept] <> null)
  ), 
  Team = Table.ExpandListColumn(
    Table.ReplaceValue(GroupDept, null, null, (x, y, z) => Text.Split(Text.From(x), ", "), {"Team"}), 
    "Team"
  )
in
  Team
Power Query solution 3 for Transpose Team Problem Table, proposed by Aditya Kumar Darak 🇮🇳:
let
  Source = Excel.CurrentWorkbook(){[Name = "data"]}[Content], 
  Unpivot = Table.UnpivotOtherColumns(Source, {}, "Group", "Dept"), 
  Index = Table.AddIndexColumn(Unpivot, "Index", 1), 
  Team = Table.AddColumn(
    Index, 
    "Team", 
    each 
      if Text.Length(Text.Select([Group], {"0" .. "9"})) > 0 then
        Text.Split(Text.From(Unpivot[Dept]{[Index]}), ", ")
      else
        null
  ), 
  Filter = Table.SelectRows(Team, each [Team] <> null), 
  Expand = Table.ExpandListColumn(Filter, "Team"), 
  Sort = Table.Sort(Expand, each Number.From([Team])), 
  Return = Table.RemoveColumns(Sort, "Index")
in
  Return
Power Query solution 4 for Transpose Team Problem Table, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Unpivot = Table.Unpivot(Source, Table.ColumnNames(Source), "Group", "Dept"), 
  Select = Table.SelectRows(
    Table.FromColumns(
      Table.ToColumns(Unpivot) & {List.Skip(Unpivot[Dept]) & {null}}, 
      Table.ColumnNames(Unpivot) & {"Team"}
    ), 
    each Text.Contains([Group], "G")
  ), 
  Team = Table.TransformColumns(
    Select, 
    {
      "Team", 
      each 
        let
          a = try Text.Split(_, ", ") otherwise {_}, 
          b = List.Transform(a, Number.From)
        in
          b
    }
  ), 
  Sort = Table.Sort(Table.ExpandListColumn(Team, "Team"), {{"Team", Order.Ascending}})
in
  Sort
Power Query solution 5 for Transpose Team Problem Table, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Unpivot = Table.Unpivot(Source, Table.ColumnNames(Source), "Dept", "Team"), 
  Group = Table.AddColumn(
    Unpivot, 
    "Group", 
    each if Text.Contains([Dept], "G") then [Dept] else null
  ), 
  FD = Table.SelectRows(Table.FillDown(Group, {"Group"}), each not Text.Contains([Dept], "G")), 
  Expand = Table.Sort(
    Table.ExpandListColumn(
      Table.TransformColumns(
        FD, 
        {
          "Team", 
          each 
            let
              a = try Text.Split(_, ", ") otherwise {_}, 
              b = List.Transform(a, Number.From)
            in
              b
        }
      ), 
      "Team"
    ), 
    "Team"
  ), 
  Order = Table.SelectColumns(Expand, {"Group", "Dept", "Team"})
in
  Order
Power Query solution 6 for Transpose Team Problem Table, proposed by Luan Rodrigues:
let
  Fonte = Tabela1, 
  col = Table.UnpivotOtherColumns(Fonte, {}, "Atributo", "Dept"), 
  tab = Table.TransformColumns(
    Table.SelectRows(col, each not Text.StartsWith([Atributo], "G")), 
    {
      {
        "Dept", 
        each List.Transform(
          Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv)(Text.From(_)), 
          Number.From
        )
      }
    }
  ), 
  fil = Table.SelectRows(col, each Text.StartsWith([Atributo], "G")), 
  add = Table.AddColumn(fil, "Team", (x) => tab{[Atributo = x[Dept]]}[Dept]), 
  res = Table.Sort(Table.ExpandListColumn(add, "Team"), {"Team"})
in
  res
Power Query solution 7 for Transpose Team Problem Table, proposed by Hussein SATOUR:
let
  Source = Excel.CurrentWorkbook(){[Name = "data"]}[Content], 
  TransTab = Table.Transpose(Source), 
  AddG = Table.AddColumn(
    TransTab, 
    "Group", 
    each if Text.Start([Column1], 1) = "G" then [Column1] else null
  ), 
  FilledD = Table.FillDown(AddG, {"Group"}), 
  NotG = Table.SelectRows(FilledD, each not Text.StartsWith([Column1], "G")), 
  MergValues = Table.CombineColumns(
    NotG, 
    {"Column2", "Column3", "Column4"}, 
    Combiner.CombineTextByDelimiter("", QuoteStyle.None), 
    "Team"
  ), 
  SplitValues = Table.ExpandListColumn(
    Table.TransformColumns(
      MergValues, 
      {
        {
          "Team", 
          Splitter.SplitTextByDelimiter(", ", QuoteStyle.Csv), 
          let
            itemType = (type nullable text) meta [Serialized.Text = true]
          in
            type {itemType}
        }
      }
    ), 
    "Team"
  ), 
  RenamCol = Table.RenameColumns(SplitValues, {{"Column1", "Dept"}})
in
  RenamCol
Power Query solution 8 for Transpose Team Problem Table, proposed by Sandeep Marwal:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  S1 = Table.Transpose(Source), 
  S2 = Table.CombineColumns(
    Table.TransformColumnTypes(S1, {{"Column2", type text}}, "en-IN"), 
    {"Column2", "Column3", "Column4"}, 
    Combiner.CombineTextByDelimiter("", QuoteStyle.None), 
    "Merged"
  ), 
  S3 = Table.AddColumn(
    S2, 
    "Custom", 
    each if List.Contains({"G1", "G2", "G3"}, [Column1]) then [Column1] else null
  ), 
  S4 = Table.FillDown(S3, {"Custom"}), 
  S5 = Table.SplitColumn(
    S4, 
    "Merged", 
    Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), 
    {"Merged.1", "Merged.2", "Merged.3"}
  ), 
  S6 = Table.TransformColumnTypes(
    S5, 
    {{"Merged.1", type text}, {"Merged.2", Int64.Type}, {"Merged.3", Int64.Type}}
  ), 
  S7 = Table.TransformColumnTypes(S6, {{"Merged.1", Int64.Type}}), 
  S8 = Table.RemoveRowsWithErrors(S7, {"Merged.1"}), 
  S9 = Table.Group(
    S8, 
    {"Column1", "Custom"}, 
    {{"Count", each Table.ToRows(_[[Merged.1], [Merged.2], [Merged.3]])}}
  ), 
  S10 = Table.ExpandListColumn(S9, "Count"), 
  S11 = Table.ExpandListColumn(S10, "Count"), 
  S12 = Table.SelectRows(S11, each ([Count] <> null)), 
  S13 = Table.RenameColumns(S12, {{"Custom", "Group"}, {"Column1", "Dept"}, {"Count", "Team"}}), 
  S14 = Table.ReorderColumns(S13, {"Group", "Dept", "Team"})
in
  S14
Power Query solution 9 for Transpose Team Problem Table, proposed by Henriette Hamer:
let
 Source = Excel.CurrentWorkbook(){[Name="Input"]}[Content],
 TT = Table.Transpose(Source),
 AC = Table.AddColumn(TT, "G", each if Text.Middle([Column1],0,1) = "G" then [Column1] else null),
 FD = Table.FillDown(AC,{"G"}),
 FR = Table.SelectRows(FD, each not Text.StartsWith([Column1], "G")),
 IMC = Table.AddColumn(FR, "Merged", each Text.Combine({Text.From([Column2], "nl-NL"), [Column3], [Column4]}, ""), type text),
 RmC1 = Table.RemoveColumns(IMC,{"Column2", "Column3", "Column4"}),
 RV = Table.ReplaceValue(RmC1," ","",Replacer.ReplaceText,{"Merged"}),
 SCbD = Table.SplitColumn(RV, "Merged", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), {"Merged.1", "Merged.2", "Merged.3"}),
 UC = Table.UnpivotOtherColumns(SCbD, {"Column1", "G"}, "Attribute", "Value"),
 RmC2 = Table.RemoveColumns(UC,{"Attribute"}),
 RoC = Table.ReorderColumns(RmC2,{"G", "Column1", "Value"}),
 RnC = Table.RenameColumns(RoC,{{"G", "Group"}, {"Column1", "Dept"}, {"Value", "Team"}}),
 #"Changed Type" = Table.TransformColumnTypes(RnC,{{"Team", Int64.Type}})
in
 #"Changed Type"

Fails the moment there is a department that starts with a "G" and when there are more than 3 departments per group and probably also when there are more then 3 teams.


                    
                  
          
Power Query solution 10 for Transpose Team Problem Table, proposed by Obi E, MPH:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table4"]}[Content], 
  TT = Table.Transpose(Source), 
  AC = Table.AddColumn(TT, "G", each if Text.Middle([Column1], 0, 1) = "G" then [Column1] else null), 
  FD = Table.FillDown(AC, {"G"}), 
  FR = Table.SelectRows(FD, each not Text.StartsWith([Column1], "G")), 
  IMC = Table.AddColumn(
    FR, 
    "Merged", 
    each Text.Combine({Text.From([Column2], "nl-NL"), [Column3], [Column4]}, ""), 
    type text
  ), 
  RmC1 = Table.RemoveColumns(IMC, {"Column2", "Column3", "Column4"}), 
  RV = Table.ReplaceValue(RmC1, " ", "", Replacer.ReplaceText, {"Merged"}), 
  SCbD = Table.SplitColumn(
    RV, 
    "Merged", 
    Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), 
    {"Merged.1", "Merged.2", "Merged.3"}
  ), 
  UC = Table.UnpivotOtherColumns(SCbD, {"Column1", "G"}, "Attribute", "Value"), 
  RmC2 = Table.RemoveColumns(UC, {"Attribute"}), 
  RoC = Table.ReorderColumns(RmC2, {"G", "Column1", "Value"}), 
  RnC = Table.RenameColumns(RoC, {{"G", "Group"}, {"Column1", "Dept"}, {"Value", "Team"}}), 
  #"Changed Type" = Table.TransformColumnTypes(RnC, {{"Team", Int64.Type}})
in
  #"Changed Type"

Solving the challenge of Transpose Team Problem Table with Excel

Excel solution 1 for Transpose Team Problem Table, proposed by Bo Rydobon 🇹🇭:
=REDUCE({"Group","Dept","Team"},A1:J1,LAMBDA(a,v,LET(z,A2:J4,c,XMATCH(v,A1:J1),
IF(RIGHT(v)<"a",VSTACK(a,IFNA(HSTACK(v,DROP(REDUCE(0,SEQUENCE(ROWS(z)),
LAMBDA(b,r,LET(d,INDEX(z,r,c),IF(d="",b,VSTACK(b,IFNA(HSTACK(d,--TEXTSPLIT(@TOCOL(DROP(INDEX(z,r,),,c),3),,", ")),d)))))),1)),v)),a))))
Excel solution 2 for Transpose Team Problem Table, proposed by محمد حلمي:
=LET(r,A1:J4,c,COLUMN(r),
e,MATCH(c,FIND("G",A1:J1)*c),
REDUCE({"Group","Dept","Team"},UNIQUE(e,1),LAMBDA(a,d,LET(
i,FILTER(r,d=e),
s,--TEXTSPLIT(CONCAT(DROP(i,1,1)&"/"),",","/",1),
VSTACK(a,IFNA(HSTACK(@i,
TOCOL(IF(s,DROP(TAKE(i,,1),1)),2),TOCOL(s,2)),@i))))))
Excel solution 3 for Transpose Team Problem Table, proposed by Oscar Mendez Roca Farell:
=TEXTSPLIT(TEXTJOIN(",", , LET(_f,FILTER(A1:J4&"",LEFT(A1:J1)="G"), REDUCE("",SEQUENCE(ROWS(_f)-1), LAMBDA(i, x, LET(_d, DROP(_f,1),_c,INDEX(_d, ,x), VSTACK(i, INDEX(_f,1, x)&"|"&DROP(REDUCE("", SEQUENCE(SUM(--(_c>""))), LAMBDA(j, y, LET(_m,CHOOSECOLS(A2:J4&"", TOCOL(XMATCH(_c,A1:J1), 2)), VSTACK(j, INDEX(_c, y)&"|"&TEXTSPLIT(TEXTJOIN("", , INDEX(_m, y, )), , ", "))))), 1))))))), "|", ",")
Excel solution 4 for Transpose Team Problem Table, proposed by Sunny Baggu:
=LET(
 _t, WRAPROWS(TOCOL(A2:J4, 3), 2),
 _G, MAP(TAKE(_t, , 1), LAMBDA(x, FILTER(A1:J1, BYCOL(N(A2:J4 = x), LAMBDA(a, SUM(a)))))),
 _rng, SORT(HSTACK(_G, _t)),
 _tbl, DROP(
 REDUCE(
 "",
 SEQUENCE(ROWS(_rng)),
 LAMBDA(x, y,
 VSTACK(
 x,
 IFNA(
 DROP(
 REDUCE(
 "",
 SEQUENCE(COLUMNS(_rng)),
 LAMBDA(a, v, HSTACK(a, TEXTSPLIT(INDEX(INDEX(_rng, y, ), v), , ", ")))
 ),
 ,
 1
 ),
 ""
 )
 )
 )
 ),
 1
 ),
 TRANSPOSE(SCAN("", TRANSPOSE(_tbl), LAMBDA(a, v, IF(v = "", a, v))))
)
Excel solution 5 for Transpose Team Problem Table, proposed by LEONARD OCHEA 🇷🇴:
=LET(t,A1:J4,s,SCAN(0,"G"<>LEFT(INDEX(t,1,)),LAMBDA(a,b, IF(b,a+b,0))),d,COLUMN(t),f,INDEX(t,1,d-s),g,INDEX(t,1,d), h,INDEX(t,s+1,d),i,REDUCE(,h,LAMBDA(a,b,HSTACK(a,IF(b<>"",TOCOL(TEXTSPLIT(b,", ")),"")))),j,IF(s,f&"-"&g&"-"&i,NA()), k,TOCOL(TRANSPOSE(j),3),VSTACK(HSTACK("Group","Dept","Team"),TEXTSPLIT(TEXTJOIN("@",,k),"-","@")))
Excel solution 6 for Transpose Team Problem Table, proposed by Md. Zohurul Islam:
=LET(u,A1:J1,v,A2:J4,hdr,HSTACK("Group","Dept","Team"),
w,SCAN(,IF(LEFT(u)="G",u,""),LAMBDA(x,y,IF(y="",x,y))),
z,REDUCE(hdr,TOCOL(UNIQUE(w,1)),LAMBDA(x,y,LET(
a,BYROW(WRAPROWS(TOCOL(FILTER(v,w=y),3),2),ARRAYTOTEXT),
b,DROP(REDUCE("",a,LAMBDA(p,q,LET(j,TEXTSPLIT(q,", "),k,TAKE(j,,1),m,VSTACK(p,IFNA(HSTACK(k,TOCOL(--DROP(j,,1))),k)),m))),1),
c,IFNA(HSTACK(y,b),y),
VSTACK(x,c)
))),
z)
Excel solution 7 for Transpose Team Problem Table, proposed by Asheesh Pahwa:
=LET(hea,A1:J1,arr,A2:J4,whl,
A1:J4,fil,TRANSPOSE(FILTER(hea,NOT(ISNUMBER(--RIGHT(hea,1))))),n,MAP(fil,LAMBDA(x,LET(a,INDEX(arr,,MATCH(x,hea,0)),
FILTER(a,a<>0)))),c,TEXTJOIN("|",,n),d,TEXTSPLIT(c,", ","|",,,), e,TOCOL(d&"-"&fil), f,HSTACK(TEXTAFTER(e,"-"),
TEXTBEFORE(e,"-")), g,FILTER(f,TAKE(f,,-1)<>""),h,FILTER(TRANSPOSE(whl), ISNUMBER(-- RIGHT(TAKE(TRANSPOSE(whl),,1),1))),i,TOCOL(TAKE(h,,1)&"-"&TAKE(h,,-COLUMNS(h)+1)),j,HSTACK(TEXTAFTER(i,"-"), TEXTSPLIT(i,"-")),k,XLOOKUP(TAKE(g,,1),TAKE(j,,1),TAKE(j,,-1)), HSTACK(k,g))
Excel solution 8 for Transpose Team Problem Table, proposed by Md Ismail Hosen:
=LAMBDA(Data, LET(Header, CHOOSEROWS(Data, 1), ExceptHeader, DROP(Data, 1), GroupCols, FILTER(Header, LEFT(Header, 1) = "G"), fx_ForGroup, LAMBDA(GroupName, LET(ColData, CHOOSECOLS(ExceptHeader, XMATCH(GroupName, Header, 0)), DeptTeamData, DROP(REDUCE("", ColData, LAMBDA(a,v, IF(v = "", a, VSTACK(a, LET(DeptCol, XMATCH(v, Header, 0), DeptColData, CHOOSECOLS(ExceptHeader, DeptCol), Teams, TRANSPOSE(TEXTSPLIT(@FILTER(DeptColData, DeptColData <> ""), ", ")) * 1, Result, HSTACK(EXPAND(v, ROWS(Teams), 1, v), Teams), Result))))), 1), Result, HSTACK(EXPAND(GroupName, ROWS(DeptTeamData), , GroupName), DeptTeamData), Result)), OutputHeader, {"Group","Dept","Team"}, Result, REDUCE(OutputHeader, GroupCols, LAMBDA(a,v, VSTACK(a, fx_ForGroup(v)))), Result))(A1:J4)
Excel solution 9 for Transpose Team Problem Table, proposed by Narayanan J 🇮🇳:
=LET(tbl,A1:J4,hd,TAKE(tbl,1),dt,DROP(tbl,1)&"",rpt,LAMBDA(h,d,DROP(TEXTSPLIT(REPT(TEXTJOIN(",",1,h)&"|",d),",","|"),-1)),dpt,rpt(hd,ROWS(dt)),grp,rpt(SCAN("",hd,LAMBDA(a,h,IF(LEFT(h)="G",h,a))),ROWS(dt)),splt,LAMBDA(a,b,c,TEXTJOIN(",",TRUE,a&":"&&b&":"&TEXTSPLIT(c,,", "))&","),ar,MAP(grp,dpt,dt,LAMBDA(g,dp,d,IFS(d="",NA(),g=dp,NA(),TRUE,splt(g,dp,d)))),DROP(TEXTSPLIT(TEXTJOIN(,0,TOCOL(ar,3)),":",","),-1))
Excel solution 10 for Transpose Team Problem Table, proposed by Narayanan J 🇮🇳:
=LET(tbl,INPUT,hdng,TOCOL(INPUT[hashtag#Headers]),hs,SEQUENCE(ROWS(hdng)),hss,SCAN(0,hdng,LAMBDA(a,h,IFS(LEN(h)>2,a,LEFT(h)<>"G",a,TRUE,MATCH(h,hdng,0)))),arr,MAKEARRAY(ROWS(tbl),ROWS(hdng),LAMBDA(r,c,LET(pos,1+(r-1)*c+(c-1),grp,INDEX(hss,c),dpt,INDEX(hs,c),data,""&INDEX(tbl,r,c),op,INDEX(hdng,grp)&":"&INDEX(hdng,dpt)&":"&data,IFS(data="","",grp=dpt,"",TRUE,SUBSTITUTE(op," ",""))))),col,TOCOL(arr,TRUE,TRUE),lst,FILTER(col,col<>"",""),cont,LAMBDA(txt,LET(c,TEXTSPLIT(txt,,":"),TEXTJOIN(",",TRUE,INDEX(c,1)&":"&INDEX(c,2)&":"&TRANSPOSE(DROP(TEXTSPLIT(txt,",",":"),2))))),a,TEXTSPLIT(TEXTJOIN(",",TRUE,MAP(lst,cont)),":",","),IFERROR(VALUE(a),a))

&&

Leave a Reply