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

The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now! Learn more

Reply
DeltaMetal
New Member

Efficient Query?

Hi

 

Is there a better way for writing the same code as I have do this on 8 columns and then repeat it for 5 Changes?

 

 

    #"Replaced Value1" = Table.ReplaceValue(#"Replaced Value", each [Exchange1], each if[Exchange1] = "LIFFE" then [ExchangeName1] else [Exchange1], Replacer.ReplaceText,{"Exchange1"}),
    #"Replaced Value2" = Table.ReplaceValue(#"Replaced Value", each [Exchange2], each if[Exchange2] = "LIFFE" then [ExchangeName2] else [Exchange2], Replacer.ReplaceText,{"Exchange2"}),
    #"Replaced Value3" = Table.ReplaceValue(#"Replaced Value", each [Exchange3], each if[Exchange3] = "LIFFE" then [ExchangeName3] else [Exchange3], Replacer.ReplaceText,{"Exchange3"}),
    #"Replaced Value4" = Table.ReplaceValue(#"Replaced Value", each [Exchange4], each if[Exchange4] = "LIFFE" then [ExchangeName4] else [Exchange4], Replacer.ReplaceText,{"Exchange4"}),
    #"Replaced Value5" = Table.ReplaceValue(#"Replaced Value", each [Exchange5], each if[Exchange5] = "LIFFE" then [ExchangeName5] else [Exchange5], Replacer.ReplaceText,{"Exchange5"}),
    #"Replaced Value6" = Table.ReplaceValue(#"Replaced Value", each [Exchange6], each if[Exchange6] = "LIFFE" then [ExchangeName6] else [Exchange6], Replacer.ReplaceText,{"Exchange6"}),
    #"Replaced Value7" = Table.ReplaceValue(#"Replaced Value", each [Exchange7], each if[Exchange7] = "LIFFE" then [ExchangeName7] else [Exchange7], Replacer.ReplaceText,{"Exchange7"}),
    #"Replaced Value8" = Table.ReplaceValue(#"Replaced Value", each [Exchange8], each if[Exchange8] = "LIFFE" then [ExchangeName8] else [Exchange8], Replacer.ReplaceText,{"Exchange8"}),

 

4 REPLIES 4
v-yanjiang-msft
Community Support
Community Support

Hi @DeltaMetal ,

Is your problem solved? If so, would you mind accept the helpful replies as solutions? Then we are able to close the thread. More people who have the same requirment will find the solution quickly and benefit here, thank you!

Best Regards,
Community Support Team _ kalyj

wdx223_Daniel
Super User
Super User

= let a=Table.ColumnNames(PreviousStepName) in Table.FromRecords(Table.TransformRows(PreviousStepName,each Record.TransformFields(_,List.Transform(a,(x)=>{x,(y)=>if Record.Field(_,x)="LIFFE" then Record.FieldOrDefault(_,Text.Replace(x,"Exchange","ExchangeName"),null) else y}))))

AlexisOlson
Super User
Super User

You can unpivot the ExchangeN columns before doing the replacement and pivot back if needed.

 

Try pasting this query into the Advanced Editor of a new blank query and look through each applied step for an example of what I mean:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8vF0c3NV0lFyNAQSQA6YbQRhQzjGSrE60TApJ0MkKSdkdU5AdbEA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Exchange1 = _t, ExchangeName1 = _t, Exchange2 = _t, ExchangeName2 = _t, Exchange3 = _t, ExchangeName3 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Exchange1", type text}, {"ExchangeName1", type text}, {"Exchange2", type text}, {"ExchangeName2", type text}, {"Exchange3", type text}, {"ExchangeName3", type text}}),
    #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type),
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Added Index", {"Index"}, "Attribute", "Value"),
    #"Split Column by Character Transition" = Table.SplitColumn(#"Unpivoted Other Columns", "Attribute", Splitter.SplitTextByCharacterTransition((c) => not List.Contains({"0".."9"}, c), {"0".."9"}), {"Column", "ID"}),
    #"Pivoted Column" = Table.Pivot(#"Split Column by Character Transition", List.Distinct(#"Split Column by Character Transition"[Column]), "Column", "Value"),
    #"Replaced Value" = Table.ReplaceValue(#"Pivoted Column", each [Exchange], each if [Exchange] = "LIFFE" then [ExchangeName] else [Exchange],Replacer.ReplaceText,{"Exchange"}),
    #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Replaced Value", {"Index", "ID"}, "Attribute", "Value"),
    #"Replaced Value1" = Table.ReplaceValue(#"Unpivoted Columns",each [Attribute], each [Attribute] & [ID],Replacer.ReplaceText,{"Attribute"}),
    #"Removed Columns" = Table.RemoveColumns(#"Replaced Value1",{"ID"}),
    #"Pivoted Column1" = Table.Pivot(#"Removed Columns", List.Distinct(#"Removed Columns"[Attribute]), "Attribute", "Value"),
    #"Removed Columns1" = Table.RemoveColumns(#"Pivoted Column1",{"Index"})
in
    #"Removed Columns1"

 

The main idea is to reshape the data from something like this:

AlexisOlson_0-1661881886253.png

Into something like this:

AlexisOlson_1-1661881913472.png

And then do the replacement on a single column.

Anonymous
Not applicable

As far as I know you can only replace value on multiple columns if the value is the same...

= Table.ReplaceValue(#"Grouped Rows",null,0,Replacer.ReplaceValue,{"Jobs Raised", "WeeklyUsage"})

would replace null with 0 on columns Jobs Raised and Weekly Usage.

 

I don't know of any way to combine replacements for different values i.e. if null = 0 if True =1 if False = 2 etc. across multiple columns so they would each need a seperate step.

Helpful resources

Announcements
Power BI DataViz World Championships

Power BI Dataviz World Championships

The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now!

December 2025 Power BI Update Carousel

Power BI Monthly Update - December 2025

Check out the December 2025 Power BI Holiday Recap!

FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.