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

Join us for an expert-led overview of the tools and concepts you'll need to become a Certified Power BI Data Analyst and pass exam PL-300. Register now.

Reply
Michael_HERE
Regular Visitor

How to replace a value in multiple columns when the columns have to be dynamically selected?

I need to replace a value in a set of columns (in this case null value with 0), but I cannot hard-code the columns. Instead, I need to determine the columns dynamically: only columns with a specific name pattern (e.g. starting with "Invoiced_") shall be considered.

 

I tried to pass the list of columns to the ReplaceValue function, but somehow my code doesn't work.  

 

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    FilteredList = List.Select(Table.ColumnNames(Table1), each Text.StartsWith( _ , "Invoiced_")),
    #"Replaced Value" = Table.ReplaceValue(Table1,null,0,Replacer.ReplaceValue, FilteredList)
in
    #"Replaced Value"

 

 

I get this error: 

Expression.Error: A cyclic reference was encountered during evaluation.

 

What did I do wrong? Or how can I solve this problem? 

Thanks  

1 ACCEPTED SOLUTION
wdx223_Daniel
Super User
Super User

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    FilteredList = List.Buffer(List.Select(Table.ColumnNames(Source), each Text.StartsWith( _ , "Invoiced_"))),
    #"Replaced Value" = Table.ReplaceValue(Source,null,0,Replacer.ReplaceValue, FilteredList)
in
    #"Replaced Value"

View solution in original post

6 REPLIES 6
wdx223_Daniel
Super User
Super User

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    FilteredList = List.Buffer(List.Select(Table.ColumnNames(Source), each Text.StartsWith( _ , "Invoiced_"))),
    #"Replaced Value" = Table.ReplaceValue(Source,null,0,Replacer.ReplaceValue, FilteredList)
in
    #"Replaced Value"

Wow, this worked. Thank you so much! 
If I'm reading this right, the trick was to create a new List instance, right? 

guess your code error came from the reference of Table1,

i just changed it to Source

Vijay_A_Verma
Super User
Super User

Use this

    let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    FilteredList = List.Select(Table.ColumnNames(Table1), each Text.StartsWith( _ , "Invoiced_")),
    #"Replaced Value" = Table.FromRecords(
    Table.TransformRows(Source, (r) => List.Accumulate(FilteredList, r, (s,c)=> 
        Record.TransformFields(s,{{c, each if _ = null then 0 else _}})))
        , Value.Type(Source)))
in
    #"Replaced Value"

Unfortunately, I get the same error. It occurs already in the second line. 

Maybe I should have mentioned that I am using PowerQuery within Excel, not Power BI (if that matters). 

Besides, the last closing parenthesis in your code is too much. 

Is it possible to post an Excel file having 2-3 rows of dummy data to Onedrive / Google drive and share the link here?

PQ in Excel or Power BI behave the same so that won't make a difference.

Helpful resources

Announcements
Join our Fabric User Panel

Join our Fabric User Panel

This is your chance to engage directly with the engineering team behind Fabric and Power BI. Share your experiences and shape the future.

June 2025 Power BI Update Carousel

Power BI Monthly Update - June 2025

Check out the June 2025 Power BI update to learn about new features.

June 2025 community update carousel

Fabric Community Update - June 2025

Find out what's new and trending in the Fabric community.