Forum Discussion

danielboi's avatar
danielboi
Helper I
4 years ago

Filter table in Power Query based on two columns

Hello guys,

 

trying to figure out what I though is an easy task so I can streamline my queries.

 

I have two colums I want to use to filter

 

Column 1: File name:

  • 2021 Consolidation.xlsm
  • 2021 Unconsolidated.xlsm

Column 2: Financial Statement item:

  • Sales
  • Sales Intercompany
  • Cost
  • Cost Intercompany

 

What I want to do is to remove the lines matching following criteria:

  • Column 1 text contains "unconsolidated"

AND

  • Column 2 contains "Sales Intercompany" or "Cost Intercompany"

 

I already have a solution to achieve that filtering, via a merch, but that seems too excessive for my goals.

 

D

4 Replies

  • Hey danielboi ,

     

    create a custom column using an if statement in combination with the function Text.Contains (https://docs.microsoft.com/en-us/powerquery-m/text-contains) like so

    if
    Text.Contains( [Column1] , "A")
    and
    ( 
    Text.Contains( [Column2] , "yellow") or Text.Contains( [Column2] , "red")
    )
    then "omit" else "keep"

    Be aware of the brackets.

    Then you can use to values to filter the table and remove the column after the filtering.

    Hopefully, this provides an idea on how to tackle your challenge.

    Regards,
    Tom
      

    • TomMartens's avatar
      TomMartens
      Super User

      Hey danielboi ,

      if you are familiar with M and the Advanced Editor you can use this one:

      let
          Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WclTSUSpKTVGK1YGwK1NzcvLL4dz0otTUPKXYWAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t]),
          #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}}),
      
      
          #"onego" = 
          Table.SelectRows (
              #"Changed Type" , (_) => 
          
               ( Text.Contains( [Column1] , "A") and 
      ( Text.Contains( [Column2] , "yellow") or Text.Contains( [Column2] , "red") ) = false 
      )
          )
      
      
      //     #"Added Custom" = Table.AddColumn(#"Changed Type", "condition", each if Text.Contains( [Column1] , "A") and 
      // ( Text.Contains( [Column2] , "yellow") or Text.Contains( [Column2] , "red") 
      // ) then "omit" else "keep")
      in
          #"onego"


      Regards,
      Tom

  • I'm a bit late to the party, but I have a different take - it requires a new column but depending on how big your model is, it might be OK.
    Create a concatenation of column 1 and 2.

    This creates strings like:

    unconsolidated Sales Intercompany

    unconsolidated Cost Intercompany

     

    In the new column, you can filter for those strings, using the usual Power Query column filter function (no actual coding required).

     

    Cheers