Here is how to build a decision tree matrix to dynamically filter by variable criteria in Notion.
When challenged to find a way to set a database view to dynamically filter based on variable criteria, my first thought was, “Well no, that’s not possible.” But then the voice in my head that says that every challenge has a solution stepped in and gave me a shove. So I tried thinking about it in a different way, and came up with the Decision Tree Matrix for Dynamic Filtering. Here’s how I did it.
The Case Study
We have a very large database that catalogs hundreds of games in our game library. Each game is categorized by various metadata, including genre and controller type. We want a way for the Notion library to suggest games to us based on our mood for that day. Rather than manually creating many filters for all of the various combinations of genre and controller type that we might be in the mood to play on a given day, let’s create a single dynamic filter that updates based on what we tell it we are in the mood for.
- Create a parent database that all of the games in the game library relate to (this is the Mood Matrix). There only needs to be a single row in this database, which will be updated based on mood
- Within the parent database, create select properties to simulate the “questions”, for example, “Controller Type”, “Genre”, etc. Mirror the options within the select property to match the options in the game library
- Within the game library database, use rollups to pull the “answers” to the “questions” from the Mood Matrix
- Also within the game library database, create a formula property called “Match” with a formula similar to the following:
if(contains(Genre, Mood Genre) && contains(Controller Type, Mood Controller Type), true, false)
Add additional criteria that you want to match against…
This will automatically tick the “Match” checkbox if a game matches all of your mood criteria.
5. Set a filter on the games library to show only games where the “Match” checkbox is checked.
Here’s a simple example of this in action: