Rotate the grid given in A4:E7 as per values given in B1. The answer is shown for 2 rows rotation. If B1 = no of rows in the grid, then rotation will reset. Hence, in above case if B1 is 4, then that is equivalent to rotation of 0. If B1 is 7, then that is equivalent to 3.
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 148
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Rotate Grid by Count with Power Query
Power Query solution 1 for Rotate Grid by Count, proposed by Bo Rydobon 🇹🇭:
let
Row = 2,
z = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Rotate = Table.FirstN(
Table.RemoveFirstN(Table.Repeat(z, 2), Number.Mod(Row, Table.RowCount(z))),
Table.RowCount(z)
)
in
Rotate
Power Query solution 2 for Rotate Grid by Count, proposed by Zoran Milokanović:
let
Source = Excel.CurrentWorkbook(){[Name = "TableProblem"]}[Content],
DemotedHeaders = Table.DemoteHeaders(Source),
TableRowCount = Table.RowCount(DemotedHeaders),
SourceRow = Excel.CurrentWorkbook(){[Name = "TableRow"]}[Content],
DemotedHeadersRow = Table.DemoteHeaders(SourceRow),
InitialValue = Number.FromText(DemotedHeadersRow{0}[Column2]),
// Reverse rotation supported
Value = Number.Sign(InitialValue) * Number.Mod(Number.Abs(InitialValue), TableRowCount),
TableToRecords = Table.ToRecords(DemotedHeaders),
RotatingRows = List.FirstN(
List.Skip(TableToRecords & TableToRecords & TableToRecords, TableRowCount - Value),
TableRowCount
),
TableFromRecords = Table.FromRecords(RotatingRows),
PromotedHeaders = Table.PromoteHeaders(TableFromRecords, [PromoteAllScalars = true])
in
PromotedHeaders
Power Query solution 3 for Rotate Grid by Count, proposed by Aditya Kumar Darak 🇮🇳:
let
Row = 3,
Data = Excel.CurrentWorkbook(){[Name = "data"]}[Content],
Generate = List.Generate(
() => [x = 0, y = null],
each [x] <= Table.RowCount(Data),
each [x = [x] + 1, y = Data{Number.Mod([x] + Row, Table.RowCount(Data))}],
each [y]
),
Return = Table.FromRecords(List.Skip(Generate))
in
Return
Power Query solution 4 for Rotate Grid by Count, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Origen = Excel.CurrentWorkbook(){[Name = "Tabla1"]}[Content],
Row = Excel.CurrentWorkbook(){[Name = "Tabla2"]}[Content][Columna2],
Index = Table.TransformColumns(
Table.AddIndexColumn(Origen, "Idx", 0),
{"Idx", each Number.Mod(List.Sum({_} & Row), Table.RowCount(Origen))}
),
Orden = Table.Sort(Index, {{"Idx", Order.Ascending}}),
Sol = Table.RemoveColumns(Orden, {"Idx"})
in
Sol
Power Query solution 5 for Rotate Grid by Count, proposed by Luan Rodrigues:
let
Linha = 2,
Fonte = Table.Distinct(
Table.RemoveLastN(Table.RemoveFirstN(Table.Repeat(Tabela1, Linha), Linha), Linha)
)
in
Fonte
Power Query solution 6 for Rotate Grid by Count, proposed by Brian Julius:
let
Source = Table.DemoteHeaders(Excel.CurrentWorkbook(){[Name = "Table1"]}[Content]),
AddIndex = Table.AddIndexColumn(Source, "Index", 0, 1, Int64.Type),
ShiftIndex = Table.Sort(
Table.AddColumn(AddIndex, "ShiftedIndex", each Number.Mod([Index] + Shift, 4)),
{"ShiftedIndex", Order.Ascending}
),
Clean = Table.RemoveColumns(ShiftIndex, {"Index", "ShiftedIndex"})
in
Clean
Power Query solution 7 for Rotate Grid by Count, proposed by Jaroslaw Kujawa:
let
Source = Excel.CurrentWorkbook(){[Name = table_name]}[Content]
in
Table.RemoveColumns(
Table.Sort(
Table.AddColumn(
Table.AddIndexColumn(Source, "Index", 0, 1, Int64.Type),
"Custom",
each Number.Mod([Index] + rows, Table.RowCount(Source))
),
{{"Custom", Order.Ascending}}
),
{"Index", "Custom"}
)
Power Query solution 8 for Rotate Grid by Count, proposed by Anup Kumar:
let
Source = Excel.CurrentWorkbook(){[Name = "Data_Range"]}[Content],
Rotater = List.Last(Excel.CurrentWorkbook(){[Name = "Rotate_N"]}[Content][Column1]), //
Added_0_Index = Table.AddIndexColumn(Source, "Index", 0, 1, Int64.Type),
Rotator_Column = Table.AddColumn(Added_0_Index, "N", each Rotater),
ModuloModified = Table.AddColumn(
Rotator_Column,
"Modulo",
each 1 + Number.Mod([N] + [Index], Table.RowCount(Source)),
type number
),
SortByModuloModified = Table.Sort(ModuloModified, {{"Modulo", Order.Ascending}}),
Solution = Table.RemoveColumns(SortByModuloModified, {"Index", "N", "Modulo"})
in
Solution
Power Query solution 9 for Rotate Grid by Count, proposed by Sue Bayes:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
Row = List.Min(Excel.CurrentWorkbook(){[Name="Table2"]}[Content][Column2]),
TableRowCount = Table.RowCount(Source),
Rotation = if Row < TableRowCount then Row else Row - TableRowCount,
SplitTable = Table.SplitAt(Source, Rotation),
SplitTable1 = SplitTable{1},
SplitTable2 = SplitTable{0},
Append = Table.Combine({SplitTable1, SplitTable2}),
Type = Table.TransformColumnTypes(Append,List.Transform(Table.ColumnNames(Append), each {_, type text}))
in
Type
hashtag#powerquery hashtag#powerbi hashtag#excel
Practise makes you better 😀 thank you Excel BI
Solving the challenge of Rotate Grid by Count with Excel
Excel solution 1 for Rotate Grid by Count, proposed by Bo Rydobon 🇹🇭:
=LET(z,A4:E7,r,ROWS(z),TAKE(DROP(VSTACK(z,z),MOD(B1,r)),r))
Excel solution 2 for Rotate Grid by Count, proposed by Rick Rothstein:
=LET(a,A4:E7,TAKE(DROP(VSTACK(a,a),MOD(B1,ROWS(a))),4))
Excel solution 3 for Rotate Grid by Count, proposed by Rick Rothstein:
=LET(a,A4:E7,r,ROWS(a),TAKE(DROP(VSTACK(a,a),MOD(B1,r)),r))
Excel solution 4 for Rotate Grid by Count, proposed by John V.:
=MAKEARRAY(4,5,LAMBDA(r,c,INDEX(A4:E7,1+MOD(B1+r-1,4),c)))
✅ =INDEX(A4:E7,1+MOD(B1+{0;1;2;3},4),{1,2,3,4,5})
✅ =CHOOSEROWS(A4:E7,1+MOD(B1+{0;1;2;3},4))
✅ =SORTBY(A4:E7,1+MOD(B1+{0;1;2;3},4))
Excel solution 5 for Rotate Grid by Count, proposed by محمد حلمي:
=LET(r,ROWS(A4:A7),
CHOOSEROWS(A4:E7,MOD(SEQUENCE(r,,B1),r)+1))
Excel solution 6 for Rotate Grid by Count, proposed by Kris Jaganah:
=LET(a,B1,b,A4:E7,c,MOD(a,ROWS(b)),d,SEQUENCE(ROWS(b)),e,IF(d<=c,d+c,d-c),SORTBY(b,e,1))
Excel solution 7 for Rotate Grid by Count, proposed by Aditya Kumar Darak 🇮🇳:
=CHOOSEROWS(A4:E7, MOD(SEQUENCE(ROWS(A4:E7)) + B1 - 1, ROWS(A4:E7)) + 1)
Excel solution 8 for Rotate Grid by Count, proposed by Timothée BLIOT:
=LET(A,A4:E7, MAKEARRAY(ROWS(A),COLUMNS(A), LAMBDA(x,y, INDEX(A,MOD(x+B1-1,4)+1,y) )))
Excel solution 9 for Rotate Grid by Count, proposed by Hussein SATOUR:
=LET(a, A4:E7, b, ROWS(a), c, SEQUENCE(b), d, MOD(B1, b), CHOOSEROWS(a, c+d-IF(c+d>b, b, 0)))
Excel solution 10 for Rotate Grid by Count, proposed by Sunny Baggu:
=LET(_rcal,MOD(B1,4)+SEQUENCE(ROWS(A4:E7)),
_ract,IF(_rcal>ROWS(A4:E7),_rcal-ROWS(A4:E7),_rcal),
CHOOSEROWS(A4:E7,_ract))
Excel solution 11 for Rotate Grid by Count, proposed by Sunny Baggu:
=LET(_rownum,B1,_tbl,A4:E7,
_rows,_rownum+SEQUENCE(ROWS(_tbl)),
_col1,SEQUENCE(_rownum+ROWS(_tbl)),
_col2,MOD(SEQUENCE(ROWS(_col1))-1,4)+1,
CHOOSEROWS(_tbl,XLOOKUP(_rows,_col1,_col2)))
Excel solution 12 for Rotate Grid by Count, proposed by Charles Roldan:
=LAMBDA(x,y, CHOOSEROWS(TEXT(x, "#"),
1 + MOD(-1 + y + SEQUENCE(ROWS(x)), ROWS(x)))
)(A4:E7, B1)
Excel solution 13 for Rotate Grid by Count, proposed by Tolga Demirci, PMP, PMI-ACP, MOS-Expert:
=LET(x;COUNTA(A4:A7);y;A4:E7;IF(MOD(B1;x)=0;TAKE(VSTACK(IFERROR(DROP(y;B1);"");TAKE(y;B1));-x);TAKE(VSTACK(IFERROR(DROP(y;MOD(B1;x));"");TAKE(y;MOD(B1;x)));-x)))
Excel solution 14 for Rotate Grid by Count, proposed by Stefan Olsson:
=LET(grid, A4:E7,
rotate, MOD(B1, rows(grid)),
bottom, QUERY(grid, "Limit "&rotate, 0),
top, QUERY(grid, "Offset "&rotate, 0),
IF(rotate=0, grid, {top; bottom})
)
Excel solution 15 for Rotate Grid by Count, proposed by Ziad A.:
=LET(r,MOD(SEQUENCE(4,1,B1),4),CHOOSEROWS(A4:E7,r+(r>=0)))
Excel solution 16 for Rotate Grid by Count, proposed by Abhishek Kumar Jain:
=LET(a,A4:E7,b,ROWS(a),c,MOD(B1,b),d,MOD(SEQUENCE(4,,B1),b)+1,INDEX(a,IF(d=0,b,d),SEQUENCE(,COLUMNS(a))))
Excel solution 17 for Rotate Grid by Count, proposed by Guillermo Arroyo:
=LET(d,A4:E7,r,ROWS(d),SORTBY(d,MOD(SEQUENCE(r)-B1-1,r)))
Excel solution 18 for Rotate Grid by Count, proposed by Guillermo Arroyo:
=LET(d,A4:E7,r,ROWS(d),p,MOD(B1,r),IF(p,VSTACK(TAKE(d,p-r),DROP(d,p-r)),d))
Excel solution 19 for Rotate Grid by Count, proposed by Gabriel Raigosa:
=LET(r,B1,m,A4:E7,SI(O(r<0,r>4),m,APILARV(EXCLUIR(m,4-r),EXCLUIR(m,-r))))
ENG:
=LET(r,B1,m,A4:E7,IF(OR(r<0,r>4),m,VSTACK(DROP(m,4-r),DROP(m,-r))))
Excel solution 20 for Rotate Grid by Count, proposed by roberto mensa:
=1 and B1=3 are reversed)
instead the correct sequence is
MOD(SEQUENCE(ROWS(A4:E7),,-B1),ROWS(A4:E7))
Excel solution 21 for Rotate Grid by Count, proposed by roberto mensa:
=LET(a,A4:E7,INDEX(a,MOD(SEQUENCE(ROWS(a),,-B1),ROWS(a))+1,SEQUENCE(,COLUMNS(a))))
&&&
