Forum Discussion

Dicken's avatar
Dicken
Post Prodigy
1 year ago
Solved

Transform Column / Type



Hello, 
Can some one explain this ;   

= Table.TransformColumns( Source, 
{ "Date", each Date.From(_)    } 

which does what it say   "date"  now = a date ; 
but if I dispense with the full syntax 

= Table.TransformColumns( Source, 
{ "Date", Date.From } )

I now also transforms the date type ?  which is useful, just wondered why  ? 

Richard.

  • Hi Dicken 

     

    I think it's the behavior of Table.TransformColumns. If you see 

    Table.TransformColumns - Table Function | Power Query M

    this function decides how to apply the transformation function to each value or whether to update the column type metadata.

     

    In { "Date", each Date.From(_) }, Table.TransformColumns only sees a custom lambda, “(x) => Date.From(x)”. It doesn’t know the return type of this lambda, so it leaves the column type metadata unchanged.

    While in { "Date", Date.From }, Table.TransformColumns sees a native function that has a declared return type in the M library (type date). Since it knows that return type, it sets the column’s metadata to date as well.

     

    Ran a simple test below, 

    let
        Query1 = 
      let
        Source = #table(type table [Date = text], {{"2025-08-22"}}),
        Transform1 = Table.TransformColumns(Source, {"Date", each Date.From(_)}),
        Transform2 = Table.TransformColumns(Source, {"Date", Date.From})
      in
        { Transform1, Transform2 }
    in
        Query1

3 Replies

  • Hi Dicken 

     

    I think it's the behavior of Table.TransformColumns. If you see 

    Table.TransformColumns - Table Function | Power Query M

    this function decides how to apply the transformation function to each value or whether to update the column type metadata.

     

    In { "Date", each Date.From(_) }, Table.TransformColumns only sees a custom lambda, “(x) => Date.From(x)”. It doesn’t know the return type of this lambda, so it leaves the column type metadata unchanged.

    While in { "Date", Date.From }, Table.TransformColumns sees a native function that has a declared return type in the M library (type date). Since it knows that return type, it sets the column’s metadata to date as well.

     

    Ran a simple test below, 

    let
        Query1 = 
      let
        Source = #table(type table [Date = text], {{"2025-08-22"}}),
        Transform1 = Table.TransformColumns(Source, {"Date", each Date.From(_)}),
        Transform2 = Table.TransformColumns(Source, {"Date", Date.From})
      in
        { Transform1, Transform2 }
    in
        Query1