Forum Discussion

JamieMcFadden's avatar
JamieMcFadden
Regular Visitor
4 years ago
Solved

Reading to a new table only the text values

Hi all!  I have a table containing numeric values in some cells, and character values in other cells (as well as some cells that are blank and have null values).  I show a simple example below.

 

Is there a way to create a table from this original table, with just the character values, with the other cells null?

 

This is my first posting here.  If I am not following proper guidelines, or if my answer is not clear, please let me know.  Thanks!

 

Source Table
EntityCol1Col2Col3
Org15CD(blank)
Org210<null>0
Org3AB20CD
    
Table After Query
EntityCol1Col2Col3
Org1<null>CD<null>
Org2<null><null><null>
Org3AB<null>CD
  • You can do a single column like this:

    Table.TransformColumns(
        Source,
        {{"Col1",
          each if (try Number.FromText(_) otherwise null) = null then _ else null,
          type text
        }})

     

    To transform all of the columns, we can make it more dynamic as follows:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8i9KN1TSUTIFYmcXIKEUqwMWNAKyDQ1AAjpKBjBBYyDH0QlIGBlA1MfGAgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Entity = _t, Col1 = _t, Col2 = _t, Col3 = _t]),
        fn_num2null = (txt) => if Value.Is(try Number.FromText(txt) otherwise null, Number.Type) or Text.Length(txt) = 0 then null else txt,
        TransformList = List.Transform(Table.ColumnNames(Source), each {_, fn_num2null, type text}),
        #"Transformed Columns" = Table.TransformColumns(Source, TransformList)
    in
        #"Transformed Columns"

     

6 Replies

  • You can do a single column like this:

    Table.TransformColumns(
        Source,
        {{"Col1",
          each if (try Number.FromText(_) otherwise null) = null then _ else null,
          type text
        }})

     

    To transform all of the columns, we can make it more dynamic as follows:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8i9KN1TSUTIFYmcXIKEUqwMWNAKyDQ1AAjpKBjBBYyDH0QlIGBlA1MfGAgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Entity = _t, Col1 = _t, Col2 = _t, Col3 = _t]),
        fn_num2null = (txt) => if Value.Is(try Number.FromText(txt) otherwise null, Number.Type) or Text.Length(txt) = 0 then null else txt,
        TransformList = List.Transform(Table.ColumnNames(Source), each {_, fn_num2null, type text}),
        #"Transformed Columns" = Table.TransformColumns(Source, TransformList)
    in
        #"Transformed Columns"

     

  • Thank you for your fast reply.  I will try this out.  I am busy finishing up a project and will look at it shortly.  Thanks again!

    • JamieMcFadden's avatar
      JamieMcFadden
      Regular Visitor

      I tried this and it works as I asked.  I have a follow-up question.  If I have some other columns that I don't want to apply this rule to, how can I isolate the logic you gave me to just specific columns; in this example, only Col1, Col2 and Col3.  I expanded the example to show what I mean.  Thanks!

       

      Source Table    
      EntityCol1Col2Col3Col4AmtDate
      Org15CD(blank)56/1/2022
      Org210<null>0106/1/2022
      Org3AB20CD156/1/2022
            
      Table after query    
      EntityCol1Col2Col3Col4AmtDate
      Org1<null>CD<null>56/1/2022
      Org2<null><null><null>106/1/2022
      Org3AB<null>CD156/1/2022
      • AlexisOlson's avatar
        AlexisOlson
        Icon for Super User rankSuper User

        Replace the list of all of the table column names, Table.ColumnNames(Source), with whatever list of column names you actually want. E.g. {"Col1", "Col2", "Col3"}.

         

        You can either specify exactly the list you want or generate it some other way like starting with Table.ColumnNames(Source) and selecting the columns you do want (based on some condition) or filtering out specific columns you don't want.