- Well, hello there.
And welcome back to Thomas Frank Explains.
In this video,
I'm gonna to teach you about one of the most useful features
in Notion,
specifically in Notion's databases.
This is a feature that you might already use,
but you may not know exactly what you're doing with it.
And you may not know about all of its different capabilities
and limitations.
That feature is called Forcing Functions.
So what is a forcing function?
Well, a forcing function is a filter applied
to a database view in Notion,
that forces new rows to take on certain
values in certain properties when they are added to that
database view.
Now wake up,
I know your eyes glazed over a little bit there.
That is literally the simplest way to define what a
Forcing Function is.
But actually,
if I just explain it to you through an example,
it's actually very easy to understand.
A forcing function basically forces a new row to take on a
certain property.
So I've got this little table here,
which is a task table.
And if we go over to this view of the task table called
Today,
I have a linked database of that exact database where
we have a single filter.
This filter says that we only want to show rows where this
due property,
which is a date property,
is today.
So this is very useful for our task manager,
where I want to see only things that are due today.
And what we can see here is one of these problems,
or I guess tasks,
which is due today here.
But also what this filter is going to do is,
if I add a new row like so,
we have completely blank properties for everything,
except that due has been set to today.
So that is what forcing functions do,
they force new rows to have certain default values in
certain properties.
And this is incredibly powerful.
You can use it to create views that will force certain dates
to be applied certain statuses to be applied.
In fact,
almost every property in Notion is able to take advantage of
forcing functions except for four of them.
And I'm going to get to that in just a second,
but first I want to guide you through yet another example of
how forcing functions can be incredibly useful.
So, if you've used Notion even a little bit,
you've probably seen this other type of database view,
which is called Board View.
And board view actually uses forcing functions inherently
because it creates a Kanban board where the columns
are defined by a property that's in your database.
Usually there's going to be a select property,
sometimes it can be a multi-select property.
It can be a person property,
but that property is creating these columns,
which means anytime we create a new row inside one of these
columns like this,
we are utilizing a forcing function to auto apply this
doing tag to this select property.
So if I just type test here,
you're going to be able to see that when we click into it,
the status has been set to doing.
So, one thing that I love to do,
and I do with almost any table that I create,
is I use a forcing function to auto apply a default status
property to whatever selects that I'm using here,
because I don't want the status property to be empty,
in many cases.
So what we could do is if we're on the table here,
when we're not using a board view,
so that forcing function isn't inherent,
we can go over and we can create a filter.
And if I add a filter here and I use the status property
I can select Is,
and I can select a specific value,
so maybe To Do or Doing or Done.
But what I can also do is simply click this little drop down
here and change Is to, Is Not Empty.
And what this is going to do is it will set a default
status.
So let's type Test 2 here,
but that default status is not a specific item that we
picked.
Sometimes we want to just make sure that the status column
isn't empty and that has a default value.
So if I click into here,
we're going to see that the status has been set To Do,
even though our filter criteria is not To Do,
it just says Is Not Empty.
So when you create a forcing function like this,
how is Notion picking which of the selected values to
actually apply when a new row is created?
Well you can probably guess it.
It is simply the first one in the list,
which means if we want to have a default value,
all we're gonna do is drag these around.
And now that Doing as the top one,
if I create a new row,
call it Test 3,
it is going to automatically get the Doing property.
So we'll go ahead and set this back to the middle here.
So To Do is number one.
And if you've ever used Ultimate Tasks,
which is my free but comprehensive task and
project management template,
link in the description down below,
you will know that I use this for several different
properties in the main tasks database.
So here we have the Today view in Ultimate Tasks.
And if we click filter here,
we have a lot of filters going on.
But the top group you see here is an example of
this Is Not Empty trick in action, twice.
We have a property called Kanban-State and we have a
property called Priority.
And because I have Is Not Empty for both of them,
anytime I create a new task in this inbox,
like so,
I'm going to get those default properties set.
Now, there are a lot of properties here in Ultimate Tasks,
but you can see we have To Do
automatically applied to Kanban-State,
and we have Medium automatically applied to Priority.
This is where that default trick can work really well.
All you need to do is make sure a Medium is above High.
So Medium is always the one that is automatically applied,
but because we are using Is Not Empty,
if I change that over to highlighter on,
it's not going to leave our database view.
That is the real power of using Is Not Empty there.
We're not going to force things to leave our database view
that we want to see just because certain properties get
changed,
but we do have the ability to set a default property,
nonetheless.
Now, earlier on in the video,
I mentioned that you could use forcing functions for all
Notion's properties except for four.
And I just realized I misspoke on that.
The actual number is six, kind of seven.
So let me explain,
most of the properties that you can not really use
forcing functions to change are down here in the
advanced section.
You cannot change Formulas,
you cannot change Roll-ups
and you cannot change Created Time, Created By,
Last Edited Time, Last Edited By.
You can use them on relations,
and I'll get to that in a second.
These properties,
other than relation,
are really just read only properties.
They are showing you information that you can't really
change or that you could change elsewhere,
indirectly in your workspace,
in the case of a Roll-up or in the case of a Formula.
The other property that's included here is Files and Media.
And the reason that only kind of applies is that you can
technically write a forcing function where you have a file
property,
not having anything in it being empty.
But if you try to write a forcing function where it's not
empty,
where it actually has something in it,
it's not going to work.
And what do I mean by it's not going to work?
Well, let me go ahead here and create a filter that uses one
of our properties that cannot be used for forcing
functions.
And I'm just going to pick a formula here.
So Days Left is not empty,
I could set any of these different values,
it's not going to matter if I try to create a
forcing function using a formula or again,
any of the other properties that won't work.
And what happens if I try to create a new row with this type
of a forcing function applied is I get a blank new page.
And it looks like the status column actually has had its
To Do tag applied.
I believe that it's an update Notion has made,
it used to be completely blank,
but because we're trying to write to a read only property,
this Days Left here,
we don't get a new row in our database.
You'll notice we don't have a new row right here.
So we would have to literally set something and I could set
a due date, like, you know,
the seventh here and I can make this a title Test.
And now we actually do have it there because Days Left is
not empty.
So if we want to be able to use forcing functions,
we need to get these filters that target read only
properties out of our filter criteria for a specific view.
We can use them if we simply want to filter by them,
we want to see what data inside of our database that already
exists fits certain criteria.
But if we want to utilize forcing functions,
we need to make sure that our filters in a particular view
are only targeting writeable properties.
So at this point,
we have looked at how to automatically apply a due date
using our Today view and the Do filter,
or Date filter.
We've looked at automatically applying a status tag.
The next thing that I want to cover is using a relation as a
forcing function,
and this unlocks a ton of different capabilities in Notion.
And it's actually the driving force behind some of my more
complex templates like Creator's Companion,
and Ultimate Tasks.
And I think you're going to find this very, very useful.
So, what if we have two different databases,
one for our tasks,
and then one for, say, classes?
We've got like Chemistry,
we've got anti-gravity Dodge ball.
We have Biology,
your typical high school classes.
And then we have tags and we want to apply a class to each
of our tasks here.
Well, I can create a new task,
I can just call this Problem Set Two,
and I can automatically apply a relation,
like you would.
So let's just say,
this is going to be a Trigonometry problem here,
but what if I wanted to have a task list inside of each of
these classes where that relation would be
automatically applied?
Well, we can actually do that.
So let's go into chemistry here and we can just open this
page,
so this is now the chemistry class page.
I'll go ahead and make this a full width page.
And if we look at the filter criteria for this linked
database view of our task database,
what we're going to see is a filter that says
Where Class Contains Chemistry.
So Class is our relation property,
Contains is one of our four different options here.
And Chemistry is the name of the page that we're looking at.
Well now I've got a forcing function,
which will automatically apply the chemistry class relation
to anything it created here.
So now we have a pretty realistic looking,
second chemistry assignment here.
If we go back to our main task list,
we are going to see that there,
along with this class relation,
but you can make this even more powerful because as you can
see over here,
we have five different classes and each one,
going to biology and show you,
has its own relation.
So this filter is not filtering for the biology class.
And you might be asking yourself,
do I have to come in here and change the filter,
every single time I create a new class in this database,
even if I'm using a database template?
And in fact,
you don't actually have to do that because Notion has this
great feature called a Self Referential Filter.
So if we expand this so I can get access to three dot menu
and go to our templates here,
we're going to see that we have something called
Class Template.
And this is what I've used to create all of these different
classes.
So if we go in here and click Edit,
what you're going to see is that the linked database
inside this class template is filtering to show itself.
This is called a Self Referential Filter.
And when we create an instance of this template,
which is just a copy of the template for a specific class,
this is going to be updated to match the new name of the
new page.
So I will show you that action,
create a new class here,
and we'll call this class Gravity Dodge ball,
because you gotta cover all your bases with Dodge ball.
And I'm going to click a class template to apply the
template,
which brings in our linked database.
And now, if we look at the filter criteria,
we see class contains Gravity Dodge ball.
So this has been updated for us and we don't have to do
any additional work.
So those are forcing functions.
They are one of the most powerful features that you're going
to find in Notion.
And they are very,
very helpful for building database setups and often
multi database setups.
There are some limitations and bugs.
If you're using Notion's web clipper,
it will not respect any forcing functions when bringing in
web clipper content.
So you can't like automatically set a status for that kind
of stuff,
as far as I've tested.
And if you do a CSV merge,
which I do all the time,
bringing in CSV files from Excel into Notion,
those rows will also not respect forcing functions.
Unfortunately, if anyone from Notion is watching this,
consider this my vote to force those two different types of
data coming in from external ways,
to actually respect forcing functions,
that would be very nice.
I have not yet tested this with the API either.
So I would love to know down in the comments below,
if you found any other limitations,
I'm going to test those at some point,
just haven't had time,
but when you're just manually building things
and manually creating new rows and databases using filters
to create,
forcing functions is incredibly handy.
Hopefully you found this video helpful.
This is a bit more of an advanced topic that would have been
talked about recently on the channel or recently I've been
working through this series of beginner tutorials called
Notion Fundamentals.
If you want to check that out,
along with all the written content and templates and example
files,
you can go over to thomasjfrank.com/fundamentals or
subscribe to the channel for more tutorials coming in all
the time and templates build guides,
all kinds of stuff like that.
Speaking of templates,
over at thomasjfrank.com/templates,
I have free templates for task and project management for
note taking,
for habit tracking,
all kinds of cool stuff.
And you can also learn about my premium template,
Creator's Companion,
which is for content creators who want to take their game
and organization to the next level.
I'll have all that stuff down in the description below.
And if you have questions,
keep on scrolling past that description and ask your
questions in the comment section,
or hit me up on Twitter.
I'm @tomfrankly, over there,
and I am very responsive,
especially to questions about Notion when I can answer them.
So thanks, as always, for watching,
I'll have a couple more videos on screen you can check out
if you want to keep watching,
keep learning about Notion,
otherwise thanks, as always, for hanging out
and I'll see ya in the next video.
(hip hop music)