Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
4 years ago
Solved

Expression.Error: We cannot convert a value of type Function to type Number.

Hello

 

Any idea why the below results in error?

 

= Table.RemoveRows(#"Changed Type", each not Text.Contains([A], "some1") and [B]<0)

 

Expression.Error: We cannot convert a value of type Function to type Number.
Details:
Value=[Function]
Type=[Type]

 

I do have specified in a previous step [A] to be text and [B] to be integer.

 

Thanks!

  • Anonymous's avatar
    Anonymous
    4 years ago

    Hi  Anonymous , 

     

    As far as I know "each not Text.Contains([A], "some1") and [B]<0" part works as a function.

    As  HotChilli mentioned Table.RemoveRows will use number in second part. 

    Table.RemoveRows(table as table, offset as number, optional count as nullable number) as table

    Table.SelectRows will use function in second part. So I suggest you to use Table.SelectRows in your code, it will work.

    Table.SelectRows(table as table, condition as function) as table

    My Sample: 

    Result is as below.

    M Code:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCs7PTTVU0lEyVIrVgfCMgDxdCNcRJqtrDJc2BnKBvFgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [A = _t, B = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"A", type text}, {"B", Int64.Type}}),
        #"Remove rows" = Table.SelectRows(#"Changed Type", each not Text.Contains([A], "some1") and [B]<0)
    in
        #"Remove rows"

     

    Best Regards,
    Rico Zhou

     

    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

     

     

3 Replies

  • HotChilli's avatar
    HotChilli
    Icon for Community Champion rankCommunity Champion

    Table.RemoveRows   takes a table and a number as parameters.  The code here passes a function as the 2nd parameter.

    • Anonymous's avatar
      Anonymous
      Not applicable

      Hi  Anonymous , 

       

      As far as I know "each not Text.Contains([A], "some1") and [B]<0" part works as a function.

      As  HotChilli mentioned Table.RemoveRows will use number in second part. 

      Table.RemoveRows(table as table, offset as number, optional count as nullable number) as table

      Table.SelectRows will use function in second part. So I suggest you to use Table.SelectRows in your code, it will work.

      Table.SelectRows(table as table, condition as function) as table

      My Sample: 

      Result is as below.

      M Code:

      let
          Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCs7PTTVU0lEyVIrVgfCMgDxdCNcRJqtrDJc2BnKBvFgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [A = _t, B = _t]),
          #"Changed Type" = Table.TransformColumnTypes(Source,{{"A", type text}, {"B", Int64.Type}}),
          #"Remove rows" = Table.SelectRows(#"Changed Type", each not Text.Contains([A], "some1") and [B]<0)
      in
          #"Remove rows"

       

      Best Regards,
      Rico Zhou

       

      If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.