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

July 7 - July 17 | Round 2 of the Power BI Dataviz World Championships. Don't miss your chance! Learn more

Reply
ChemEnger
Advocate V
Advocate V

Dynamically apply column transformations

I have a 'data' table where I'd like to dynamically change the number of decimal places.

I use a 'dictionary' table that holds the names of the columns in 'data' along with the desired number of decimal places, e.g.

ColumnNameDecimal
Input2
Temperature1
Pressure0
Weight3

 

I would like to be able to perform a TransformColumns operation on 'data', such as

Table.TransformColumns(data, {{"Temperature", each Number.Round(_, 1), type number}})
But driven dynamically from the 'dictionary' table
I am thinking that looping through the number of decimal places might be a start and can easily generate a list like:
  MinDecimal = List.Min(dictionary[Decimal]),
  MaxDecimal = List.Max(dictionary[Decimal]),
  Range = List.Generate(() => MinDecimal, each _ <= MaxDecimal, each _ + 1)

It feels like I could then use a recursive function (with or without the Range list) to select one by one the columns that need each transform, something like the answer from @ImkeF  in Table Transformations for Dynamic Columns :

fnTransform = (InputTable as table, ListOfColNames, TransformFunction as function) =>
let
    TransformFunctionList = List.Transform(ListOfColNames, (x) => {x, TransformFunction}),
    Transform = Table.TransformColumns(InputTable, TransformFunctionList)
in
    Transform
// Somehow loop n = from MinDecimal to MaxDecimal
ColumnsToTransform = Table.SelectRows(dictionary, each [Decimal] = n)[ColumnName],
Transform = fnTransform(data, ColumnsToTransform, each Number.Round(_, n), type number)

but I am stumped as to the way to use a loop to make this work...

1 ACCEPTED SOLUTION
ImkeF
Community Champion
Community Champion

Hi @ChemEnger ,
it could work like so:

(InputTable as table, dictionary as table) =>
  let
    TransformFunctionList = List.Transform(
      Table.ToRecords(dictionary), 
      (record) => {record[ColumnName], each Number.Round(_, record[Decimal]), type number}
    ), 
    Transform = Table.TransformColumns(InputTable, TransformFunctionList)
  in
    Transform

 No real recursion needed. Just transform your dictionary table into a list of records and create the transformation list elements out of it.

Imke Feldmann (The BIccountant)

If you liked my solution, please give it a thumbs up. And if I did answer your question, please mark this post as a solution. Thanks!

How to integrate M-code into your solution -- How to get your questions answered quickly -- How to provide sample data -- Check out more PBI- learning resources here -- Performance Tipps for M-queries

View solution in original post

2 REPLIES 2
ImkeF
Community Champion
Community Champion

Hi @ChemEnger ,
it could work like so:

(InputTable as table, dictionary as table) =>
  let
    TransformFunctionList = List.Transform(
      Table.ToRecords(dictionary), 
      (record) => {record[ColumnName], each Number.Round(_, record[Decimal]), type number}
    ), 
    Transform = Table.TransformColumns(InputTable, TransformFunctionList)
  in
    Transform

 No real recursion needed. Just transform your dictionary table into a list of records and create the transformation list elements out of it.

Imke Feldmann (The BIccountant)

If you liked my solution, please give it a thumbs up. And if I did answer your question, please mark this post as a solution. Thanks!

How to integrate M-code into your solution -- How to get your questions answered quickly -- How to provide sample data -- Check out more PBI- learning resources here -- Performance Tipps for M-queries

Spot on, thank you @ImkeF.

 

I was looking at something similar on Medium - Transform Multiple Columns Based On Other Columns In Power Query but your solution worked first time 🙂

Helpful resources

Announcements
FabCon and SQLCon Barcelona 2026

FabCon & SQLCon – Barcelona 2026

Join us in Barcelona for FabCon and SQLCon, the Fabric, Power BI, SQL, and AI community event. Save €200 with code FABCMTY200.

60 days of Data Days Carousel

Data Days 2026

Join Data Days 2026: 60 days of free live/on-demand sessions, challenges, study groups, and certification opportunities.

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.

Top Kudoed Authors