Insert the number of blank rows after the records as per Number column. Hence, after record A, 3 number of rows should be inserted. After B, 2 rows, after C, no rows, after D, 9 rows and so on.
📌 Challenge Details and Links
ExcelBI Power Query Challenge Number: 35
Challenge Difficulty: ⭐️⭐️⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Insert blank rows based on with Power Query
Power Query solution 1 for Insert blank rows based on, proposed by Bo Rydobon 🇹🇭:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
Rs = Table.Combine(List.Transform(Table.ToRows(Source),each Table.FromRows({_}& List.Repeat({{null,null}},_{1}),Table.ColumnNames(Source) )))
in
Rs
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
Rs = Table.Combine(Table.AddColumn(Source, "A", each Table.FromRows( {Record.ToList(_)} & List.Repeat({{null,null}},[Number]),Table.ColumnNames(Source)))[A])
in
Rs
Power Query solution 2 for Insert blank rows based on, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
DataCol = Table.AddColumn(Source, "Custom", each {[Data]} & List.Repeat({null}, [Number])),
NumberCol = Table.AddColumn(DataCol, "Custom1", each {[Number]} & List.Repeat({null}, [Number])),
Solution = Table.Combine(
Table.AddColumn(
NumberCol,
"New",
each Table.FromColumns({[Custom], [Custom1]}, {"Data", "Number"})
)[New]
)
in
Solution
Power Query solution 3 for Insert blank rows based on, proposed by Luan Rodrigues:
let
Fonte = Data,
a = Table.SelectRows(
Table.AddColumn(Fonte, "Personalizar", each List.Repeat({null}, [Number])),
each [Number] <> 0
),
b = Table.ExpandListColumn(a, "Personalizar")[[Data], [Personalizar]],
c = Table.RenameColumns(b, {{"Personalizar", "Number"}}),
d = Fonte,
e = Table.Combine({d, c}),
f = Table.Sort(e, {{"Data", Order.Ascending}, {"Number", Order.Descending}}),
g = Table.AddColumn(f, "Personalizar", each if [Number] = null then null else [Data])[
[Personalizar],
[Number]
],
Result = Table.RenameColumns(g, {{"Personalizar", "Data"}})
in
Result
Power Query solution 4 for Insert blank rows based on, proposed by Brian Julius:
let
Source = Table.RenameColumns(BlanksRaw, {{"Data", "Dat"}, {"Number", "Num"}}),
Placeholder = Table.AddColumn(
Table.TransformColumnTypes(Source, {{"Num", Int64.Type}}),
"Temp",
each "^" & Text.Repeat("#", [Num])
),
SplitByChar = Table.ExpandListColumn(
Table.TransformColumns(
Placeholder,
{
{
"Temp",
Splitter.SplitTextByRepeatedLengths(1),
let
itemType = (type nullable text) meta [Serialized.Text = true]
in
type {itemType}
}
}
),
"Temp"
),
DataCol = Table.AddColumn(SplitByChar, "Data", each if [Temp] = "^" then [Dat] else null),
NumberCol = Table.SelectColumns(
Table.AddColumn(DataCol, "Number", each if [Temp] = "^" then [Num] else null),
{"Data", "Number"}
)
in
NumberCol
Power Query solution 5 for Insert blank rows based on, proposed by Bhavya Gupta:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
ExpectedOutput = Table.Combine(
List.Transform(
Table.ToRecords(Source),
each Table.FromRecords(
{_}
& List.Transform(
{1 .. _[Number]},
each Record.FromList(
List.Repeat({null}, Table.ColumnCount(Source)),
Table.ColumnNames(Source)
)
)
)
)
)
in
ExpectedOutput
Power Query solution 6 for Insert blank rows based on, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(
Source,
{{"Data", type text}, {"Number", Int64.Type}}
),
#"Added Custom" = Table.AddColumn(#"Changed Type", "Index", each {0 .. [Number]}),
#"Expanded Index" = Table.ExpandListColumn(#"Added Custom", "Index"),
#"Added Conditional Column" = Table.AddColumn(
#"Expanded Index",
"Data.",
each if [Index] = 0 then [Data] else null
),
#"Added Conditional Column1" = Table.AddColumn(
#"Added Conditional Column",
"Number.",
each if [Index] = 0 then [Number] else null
),
#"Removed Other Columns" = Table.SelectColumns(#"Added Conditional Column1", {"Data.", "Number."})
in
#"Removed Other Columns"
Power Query solution 7 for Insert blank rows based on, proposed by Matthias Friedmann:
let
Source = Excel.CurrentWorkbook(){[Name="DataNumber"]}[Content],
#"Added Custom" = Table.AddColumn(Source, "Custom", each {0..[Number]}),
#"Expanded Custom" = Table.ExpandListColumn(#"Added Custom", "Custom"),
#"Replaced Value" = Table.ReplaceValue(#"Expanded Custom",null, each [Custom], (a,b,c) => if c <> 0 then "" else a,{"Data", "Number"})[[Data],[Number]]
in
#"Replaced Value"
The replace step is a superb and versatile technique.
I ❤ it. You can see more on it also here:
https://www.linkedin.com/pulse/adjust-multiple-columns-power-query-another-column-matthias-friedmann/
Power Query solution 8 for Insert blank rows based on, proposed by Victor Wang:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Result = Table.Combine(
Table.TransformRows(
Source,
each
let
n = List.Repeat({null}, [Number])
in
Table.FromColumns({{[Data]} & n, {[Number]} & n}, {"Data", "Number"})
)
)
in
Result
Power Query solution 9 for Insert blank rows based on, proposed by Venkata Rajesh:
let
Source = Data,
Expected = Table.AddColumn(Source, "Result",
each let
_rows = List.Repeat({""},[Number])
in hashtag#table({"Data", "Number"}, List.Zip({{[Data]} & _rows,{[Number]} & _rows}))),
Remove = Table.RemoveColumns(Expected,{"Data", "Number"}),
Expand = Table.ExpandTableColumn(Remove, "Result", {"Data", "Number"}, {"Data", "Number"})
in
Expand
Power Query solution 10 for Insert blank rows based on, proposed by Krzysztof Kominiak:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
Result = Table.ExpandTableColumn(
Table.SelectColumns(
Table.Group(Source, {"Data"},
{{"Ntabs", each _ & Table.Repeat(
hashtag#table(Table.ColumnNames(_),{List.Repeat({""}, 2)}), _[Number]{0}), type table}},
GroupKind.Local),{"Ntabs"}),
"Ntabs", Table.ColumnNames(Source))
in
Result
Power Query solution 11 for Insert blank rows based on, proposed by Sandeep Marwal:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
#"Grouped Rows" = Table.Group(
Source,
{"Data"},
{{"Count", each _ & Table.FromColumns({{0 .. _[Number]{0} - 1}})}}
),
#"Removed Columns" = Table.RemoveColumns(#"Grouped Rows", {"Data"}),
#"Expanded Count" = Table.ExpandTableColumn(
#"Removed Columns",
"Count",
{"Data", "Number"},
{"Data", "Number"}
)
in
#"Expanded Count"
Power Query solution 12 for Insert blank rows based on, proposed by Mahmoud Bani Asadi:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
result = Table.Combine(
List.Transform(
Table.Split(Source, 1),
each Table.InsertRows(_, 1, List.Repeat({[Data = "", Number = ""]}, _[Number]{0}))
)
)
in
result
Power Query solution 13 for Insert blank rows based on, proposed by Thomas DUCROQUETZ:
let
Source = YourRawData,
ColumnNames = Table.ColumnNames(Source),
blankRow = Record.FromList(List.Repeat({null}, List.Count(ColumnNames)), ColumnNames),
RowList = Table.ToRecords(Source),
TransformRows = List.Transform(
RowList,
each List.InsertRange({_}, 1, List.Repeat({blankRow}, Number.From([Number])))
),
FinalResult = Table.FromRecords(List.Combine(TransformRows))
in
FinalResult
Power Query solution 14 for Insert blank rows based on, proposed by Rolando Bouloy, STEM MBA, LLM:
lete additional column)
Pascal_Case = IF(Sheet1[Pascal Case]="VarName1","Var_Name1",
IF(Sheet1[Pascal Case]="Var2Name09", "Var_2Name09",
IF(Sheet1[Pascal Case]="Pascal3Case", "Pascal3_Case",
IF(Sheet1[Pascal Case]="ThisIsPascalCase", "This_Is_Pascal_Case",
IF(Sheet1[Pascal Case]="TextString", "Text_String",
IF(Sheet1[Pascal Case]="ABCCBA", "A_B_C_C_B_A", Sheet1[Pascal Case]))))))
Solving the challenge of Insert blank rows based on with Excel
Excel solution 1 for Insert blank rows based on, proposed by Bo Rydobon 🇹🇭:
=LET(
t,
TEXTSPLIT(
CONCAT(
A2:A9&"-"&B2:B9&REPT(
"|",
1+B2:B9
)
),
"-",
"|",
,
,
""
),
DROP(
IFERROR(
--t,
t
),
-1
)
)
Excel solution 2 for Insert blank rows based on, proposed by Bo Rydobon 🇹🇭:
=LET(
n,
B2:B9,
s,
SCAN(
0,
n,
LAMBDA(
a,
b,
a+1+b
)
),
IFNA(
INDEX(
A2:B9,
XMATCH(
SEQUENCE(
MAX(
s
)
),
s-n
),
{1,
2}
),
""
)
)
Excel solution 3 for Insert blank rows based on, proposed by Rick Rothstein:
=LET(
f,
LAMBDA(
c,
TEXTSPLIT(
CONCAT(
c&REPT(
"|",
1+B2:B9
)
),
,
"|"
)
),
HSTACK(
f(
A2:A9
),
f(
B2:B9
)
)
)
Excel solution 4 for Insert blank rows based on, proposed by محمد حلمي:
=REDUCE(
A1:B1,
A2:A9,
LAMBDA(
a,
v,
LET(
s,
OFFSET(
v,
,
1
)+1,
x,
SEQUENCE(
s
),
VSTACK(
a,
IF(
x=1,
HSTACK(
v,
s-x
),
""
)
)
)
)
)
Excel solution 5 for Insert blank rows based on, proposed by محمد حلمي:
=REDUCE(
Table1[hashtag#Headers],
Table1[Data],
LAMBDA(
a,
d,
VSTACK(
a,
EXPAND(
OFFSET(
d,
,
,
,
2
),
OFFSET(
d,
,
1
)+1,
,
""
)
)
)
)
Excel solution 6 for Insert blank rows based on, proposed by محمد حلمي:
=LET(
r,
Table1[Number],
a,
TEXTSPLIT(
CONCAT(
REPT(
r&Table1[Data]&" ",
1+r
),
" "
),
,
" ",
1
),
v,
IF(MAP(SEQUENCE(
ROWS(
a
)
),
LAMBDA(x,
SUM(--(TAKE(
a,
x
)=INDEX(
a,
x
)))))=1,
a,
""),
IFERROR(
HSTACK(
RIGHT(
v
),
LEFT(
v
)+0
),
""
))
Excel solution 7 for Insert blank rows based on, proposed by 🇰🇷 Taeyong Shin:
=LET(
Data,
Table1[Data],
Num,
Table1[Number],
Thunk,
MAP(
Data,
Num,
LAMBDA(
a,
b,
LAMBDA(
IF(
b,
VSTACK(
HSTACK(
a,
b
),
EXPAND(
"",
b,
2,
""
)
),
HSTACK(
a,
b
)
)
)
)
),
Unpack,
LAMBDA(
n,
INDEX(
Thunk,
n,
1
)()
),
REDUCE(
Unpack(
1
),
SEQUENCE(
ROWS(
Thunk
)-1
)+1,
LAMBDA(
a,
b,
VSTACK(
a,
Unpack(
b
)
)
)
)
)
Excel solution 8 for Insert blank rows based on, proposed by Aditya Kumar Darak 🇮🇳:
=LET(
_d,
Table1,
_e,
LAMBDA(
a,
b,
LET(
cr,
INDEX(
_d,
b,
0
),
n,
INDEX(
cr,
2
),
s,
VSTACK(
a,
cr
),
IF(
n,
VSTACK(
s,
& IFNA(
{"",
""},
SEQUENCE(
n
)
)
),
s
)
)
),
_c,
REDUCE(
"",
SEQUENCE(
ROWS(
_d
)
),
_e
),
_r,
DROP(
_c,
1
),
_r
)
Excel solution 9 for Insert blank rows based on, proposed by Aditya Kumar Darak 🇮🇳:
=LET(
_d,
Table1,
_e,
LAMBDA(
a,
b,
VSTACK(
a,
EXPAND(
INDEX(
_d,
b,
0
),
INDEX(
_d,
b,
2
) + 1,
,
""
)
)
),
_c,
REDUCE(
"",
SEQUENCE(
ROWS(
_d
)
),
_e
),
_r,
DROP(
_c,
1
),
_r
)
Excel solution 10 for Insert blank rows based on, proposed by Duy Tùng:
=REDUCE(
A1:B1,
B2:B9,
LAMBDA(
x,
y,
VSTACK(
x,
EXPAND(
TAKE(
A9:y,
1
),
y+1,
,
""
)
)
)
)
Excel solution 11 for Insert blank rows based on, proposed by Bhavya Gupta:
=LET(
Data,
Table1[Data],
Number,
Table1[Number],
R,
ROWS(
Data
),
IFNA(
INDEX(
HSTACK(
Data,
Number
),
XLOOKUP(
SEQUENCE(
SUM(
Number
)+R
),
SCAN(
0,
Number+1,
LAMBDA(
a,
b,
a+b
)
)-Number,
SEQUENCE(
R
)
),
{1,
2}
),
""
)
)
Solving the challenge of Insert blank rows based on with Python
Python solution 1 for Insert blank rows based on, proposed by Igor Perković:
import pandas as pd
import numpy as np
df = pd.read_excel('PQ_Challenge_35_Problem.xlsx', sheet_name = 'Start')
steps = df['Number'].values.tolist()
for e,i in enumerate(steps):
for r in range(0,i):
df.loc[e+r/100+.05] = [np.nan, np.nan]
df = df.sort_index().reset_index(drop=True)
df.to_excel('Result_35.xlsx',index=False)
Data source is allocated in "Start" worksheet and result is in a new file...
Solving the challenge of Insert blank rows based on with SQL
SQL solution 1 for Insert blank rows based on, proposed by Zoran Milokanović:
WITH -- Microsoft SQL Server 2019
SOLUTION
AS
(
SELECT
1 AS ORDINAL_NUMBER, D.DATA, D.NUMBER
FROM DATA D
UNION ALL
SELECT
S.ORDINAL_NUMBER + 1 AS ORDINAL_NUMBER, S.DATA, S.NUMBER
WHERE
S.ORDINAL_NUMBER <= S.NUMBER
)
SELECT
ORDER BY
S.DATA, S.ORDINAL_NUMBER
;
&&
