Forum Discussion

Dicken's avatar
Dicken
Icon for Post Prodigy rankPost Prodigy
4 months ago
Solved

Transform columns / type

Hello,  can anyone explain why when using transform columns if the function is used on it's own, the declared column type also changes, but if the full syntax is used, it just the column values are...
  • m_dekorte's avatar
    4 months ago

    Hi Dicken,

     

    When you write:

    Table.TransformColumns(Source, {"anumber", Number.From})

    you are passing Power Query the built-in Number.From function directly. Because that function has a known return type of number, Power Query can often detect that and update the column’s type automatically.

     

    When you write:

    Table.TransformColumns(Source, {"anumber", each Number.From(_)})

    you are creating a new inline anonymous function. Even though it calls Number.From, that function itself is untyped. As a result, only the values are converted.

     

    To ascribe type explicitly when using each, pass the new column type as third argument:

    Table.TransformColumns(Source, {"anumber", each Number.From(_), type number})

     

    When you write:

    ascribeNum = (x) as number => Number.From(x),
    transform = Table.TransformColumns(Source, {"anumber", ascribeNum})
    you are creating a new function with a return type of number. Like when passing the built-in Number.From function directly, Power Query can often detect that and update the column’s type.

     

    I hope this is helpful.

  • Ahmedx's avatar
    4 months ago

    In the third parameter you can specify the column type
    Why does Power Query behave this way? Is it because of "lazy evaluation"