Forum Discussion
bartvana
Jun 05, 2021Iron Contributor
Power Query: Filter table based on list with wildcards
I have this list in an Excel sheet: FOL/ CREDIT ... I need my Power Query to filter a given table so that everything beginning with "FOL/" and "CREDIT" in the column "Name" (eg. FOL/1254, FOL/...
- Jun 05, 2021
As variant, if you would like to filter first table on the texts in the second table from which first table text start
the query could be like
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], #"Added Custom" = Table.AddColumn( Source, "Custom", each [a=[A], b=List.Contains( List.Transform( Table2[B], each Text.StartsWith(a, _) ), true ) ][b] ), #"Filtered Rows" = Table.SelectRows( #"Added Custom", each ([Custom] = true) ), #"Removed Other Columns" = Table.SelectColumns( #"Filtered Rows", {"A"} ) in #"Removed Other Columns"
List.Transform checks if for any element of second table column A starts from it. With List.Contains we check if there are at least one TRUE. Finally filter on this column and remove it.
bartvana
Jun 05, 2021Iron Contributor
Yes, but I want it to fetch the "begins with" string from another table... How could that be done?
SergeiBaklan
Jun 05, 2021Diamond Contributor
As variant, if you would like to filter first table on the texts in the second table from which first table text start
the query could be like
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Added Custom" = Table.AddColumn(
Source,
"Custom",
each
[a=[A],
b=List.Contains(
List.Transform(
Table2[B],
each Text.StartsWith(a, _)
),
true
)
][b]
),
#"Filtered Rows" = Table.SelectRows(
#"Added Custom", each ([Custom] = true)
),
#"Removed Other Columns" = Table.SelectColumns(
#"Filtered Rows",
{"A"}
)
in
#"Removed Other Columns"
List.Transform checks if for any element of second table column A starts from it. With List.Contains we check if there are at least one TRUE. Finally filter on this column and remove it.
- bartvanaJun 07, 2021Iron ContributorYes, thank you, that's exactly what I needed.
- SergeiBaklanJun 07, 2021Diamond Contributor
You are welcome.
Perhaps variant with function will be more transparent.
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], fnIsBeginsWith = (str, list) => List.Contains( List.Transform(list, each Text.StartsWith(str, _)), true), #"Added Custom" = Table.AddColumn( Source, "Custom", each fnIsBeginsWith([A], Table2[B]) ), #"Filtered Rows" = Table.SelectRows( #"Added Custom", each ([Custom] = true) ), #"Removed Other Columns" = Table.SelectColumns( #"Filtered Rows", {"A"} ) in #"Removed Other Columns"