Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Try your skills in the Power BI Dataviz World Championship! Round one ends June 26. Join now

Reply
SaaM
Helper II
Helper II

Refactor a function

Hello,

 

I am trying to refactor this function that I apply on 10 differents columns.

 

fnConcatenate = (tbl as table) => Table.AddColumn(tbl, "field_1_combined", each if [id]>[linenumber] then Text.Combine(Table.SelectRows(tbl, (sel)=> sel[key] = [key] and sel[id]>= [id])[#"field_1"]) else [#"field_1"]),


fnConcatenate = (tbl as table) => Table.AddColumn(tbl, "field_2_combined", each if [id]>[linenumber] then Text.Combine(Table.SelectRows(tbl, (sel)=> sel[key] = [key] and sel[id]>= [id])[#"field_2"]) else [#"field_2"]),
 
... 

fnConcatenate = (tbl as table) => Table.AddColumn(tbl, "field_10_combined", each if [id]>[linenumber] then Text.Combine(Table.SelectRows(tbl, (sel)=> sel[key] = [key] and sel[id]>= [id])[#"field_10"]) else [#"field_10"]),

 

Is it possible to have something like this

 

fnConcatenate = (tbl as table, field as text) => Table.AddColumn(tbl, "field" + "_combined", each if [id]>[linenumber] then Text.Combine(Table.SelectRows(tbl, (sel)=> sel[key] = [key] and sel[id]>= [id])[#"field"]) else [#"field"]),

?

 

Thanks

 

Kind regards

Saam

1 ACCEPTED SOLUTION
Anonymous
Not applicable

try

 

 

 

fnConcatField = (tbl as table, field as text) => Table.AddColumn(tbl, field & "_combined", each 
                                if [id]>[linenumber] then Text.Combine( Table.Column(Table.SelectRows(tbl, (sel)=> sel[key] = [key] and sel[id]>= [id]), field)) else Record.Field(_, field))

 

 

try something like this (I haven't tested it)  

View solution in original post

3 REPLIES 3
Anonymous
Not applicable

try

 

 

 

fnConcatField = (tbl as table, field as text) => Table.AddColumn(tbl, field & "_combined", each 
                                if [id]>[linenumber] then Text.Combine( Table.Column(Table.SelectRows(tbl, (sel)=> sel[key] = [key] and sel[id]>= [id]), field)) else Record.Field(_, field))

 

 

try something like this (I haven't tested it)  

lbendlin
Super User
Super User

Column names can be created dynamically

 

fnConcatenate = (tbl as table, field as text) => Table.AddColumn(tbl, field + "_combined", 

 

but they cannot be referenced (easily) dynamically. Have you considered using Expression.Evaluate() for this?

I never used Expression.Evaluate()

I will look for this approach

 

Thanks

 

Kind regards,

Saam

Helpful resources

Announcements
Fabric Data Days is here Carousel

Fabric Data Days 2026

Don't miss out on Data Days, June 15 through August 7. Learn Fabric, Power BI, SQL, AI and more.

Power BI DataViz World Championships carousel

Power BI DataViz World Championships - June 2026

A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.