Forum Discussion
Filter a table based on multiple selected values
purple_SP I hope this helps you. Thank You!
_Orders_BY_superhero_preference =
VAR SelectedOption =
SELECTEDVALUE ( SuperHeroes[name] )
VAR code =
SELECTEDVALUE ( SuperHeroes[code] )
VAR all_codes =
SELECTCOLUMNS ( SuperHeroes, "code", [code] )
RETURN
CALCULATE (
[_Orders],
FILTER (
OrderTable,
OrderTable[matched] = "Y"
&& OrderTable[order_number]
IN all_codes
&& SWITCH (
SelectedOption,
"Batman",
RELATED ( 'CustomerAttributes'[Fav_superHero] )
IN { "Batman", "Spiderman", "Superman" }
&& CONTAINSSTRING ( OrderTable[order_number], code ),
"Spiderman",
RELATED ( 'CustomerAttributes'[Fav_superHero] )
IN { "Batman", "Spiderman", "Superman" }
&& CONTAINSSTRING ( OrderTable[order_number], code ),
"Superman",
RELATED ( 'CustomerAttributes'[Fav_superHero] )
IN { "Batman", "Spiderman", "Superman" }
&& CONTAINSSTRING ( OrderTable[order_number], code )
)
)
)
Thanks for your reply Mahesh0016 .
It definitely helps. Would there be a way to account for cases where the different selected values require filtering different columns though?
For example say that the customer attribute table looked like this:
| Customer id | Favourite is Batman | Favourite is Spiderman | Favourite is Superman |
| 123 | 1 | 2 | 4 |
| 456 | 6 | 1 | 9 |
| 789 | 9 | 6 | 1 |
And lets say I wanted to filter customers based on three segments:
-If selected superhero is Batman, filter all customers where "Favourite is Batman" = 1
-If selected superhero is Superman, filter all customers where "Favourite is Superman" = 1
-If selected superhero is Spiderman, filter all customers where "Favourite is Spiderman" = 1
At the moment I can modify my original code like so:
_Orders_BY_superhero_preference =
VAR SelectedOption = SELECTEDVALUE(SuperHeroes[name])
VAR code = SELECTEDVALUE(SuperHeroes[code])
VAR all_codes = SELECTCOLUMNS(SuperHeroes,"code",[code])
RETURN CALCULATE([_Orders],FILTER(OrderTable, OrderTable[matched] = "Y" && OrderTable[order_number] IN all_codes && SWITCH(
SelectedOption,
"Batman", RELATED('CustomerAttributes'[Favourite_is_batman]) = 1 && CONTAINSSTRING(OrderTable[order_number],code),
"Spiderman", RELATED('CustomerAttributes'[Favourite_is_Spiderman]) = 1 && CONTAINSSTRING(OrderTable[order_number],code),
"Superman", RELATED('CustomerAttributes'[Favourite_is_Superman]) = 1 && CONTAINSSTRING(OrderTable[order_number],code)
)))
But this causes issues when two or more values are selected.
If I select Superman & Batman, is there a way to filter all customers where "Favourite is Batman" = 1 OR "Favourite is Superman" = 1?