You want to track Objectives and Key Results in Notion but need a single database that shows progress rolled up from individual tasks to key results and then to objectives. Without proper relations, you end up with disconnected tables and manual progress calculations. Notion’s relation and rollup features let you link databases so that a change in a task automatically updates the key result, and the key result update flows up to the objective. This article shows you how to build a three-level OKR system with multi-level aggregation using Notion’s database relations, rollups, and formulas.
Key Takeaways: Building Multi-Level OKR Aggregation in Notion
- Database relation between Tasks and Key Results: Links each task to its parent key result so progress can be rolled up.
- Database relation between Key Results and Objectives: Links each key result to its parent objective for the second level of aggregation.
- Rollup property with Average or Sum aggregation: Aggregates task completion percentages into key results and then into objectives.
- Formula property for final percentage display: Converts raw rollup values into a clean 0–100% progress bar.
Why Use Notion Relations for Multi-Level OKR Aggregation
An OKR framework has three layers. At the top are Objectives, the ambitious goals you want to achieve. Below them are Key Results, the measurable outcomes that prove the objective is met. At the bottom are Tasks, the day-to-day work items that contribute to each key result. Without relations, updating a task’s status requires you to manually recalculate the key result and objective progress. Notion’s relation property creates a direct link between rows in different databases. A rollup property then pulls data from the related rows and lets you aggregate it — for example, averaging all task completion percentages to show the key result progress. A final formula property formats the number as a percentage. This setup gives you a live dashboard where any task update flows upward instantly.
Steps to Build the Three-Level OKR System
Create the Three Databases
- Create the Objectives database
In your Notion workspace, click + New Page. Name it “Objectives.” Add the following properties: Name (title), Owner (select), Timeline (date), and Status (select with options: On Track, At Risk, Behind). - Create the Key Results database
Click + New Page and name it “Key Results.” Add properties: Name (title), Target Value (number), Current Value (number), and Owner (select). - Create the Tasks database
Click + New Page and name it “Tasks.” Add properties: Name (title), Status (select with options: Not Started, In Progress, Done), Assigned To (select), and Due Date (date).
Link Tasks to Key Results
- Add a relation property to Tasks
Open the Tasks database. Click the + button in the properties header. Select Relation. Name it “Key Result.” In the database picker, choose the “Key Results” database. Click Create relation. A corresponding relation property automatically appears in the Key Results database. - Link tasks to key results
For each task row, click the Key Result cell. Search for and select the correct key result. One task can link to only one key result. One key result can have many tasks.
Link Key Results to Objectives
- Add a relation property to Key Results
Open the Key Results database. Click the + button in the properties header. Select Relation. Name it “Objective.” Pick the “Objectives” database. Click Create relation. - Link key results to objectives
For each key result, click the Objective cell and select the parent objective. Each key result belongs to exactly one objective.
Add a Task Completion Percentage Property
- Add a formula property to Tasks
In the Tasks database, click the + button. Select Formula. Name it “Completion %.” Enter this formula:if(prop("Status") == "Done", 100, if(prop("Status") == "In Progress", 50, 0))
This assigns 100% to done tasks, 50% to in-progress tasks, and 0% to not started tasks.
Roll Up Task Progress into Key Results
- Add a rollup property to Key Results
In the Key Results database, click the + button. Select Rollup. Name it “Task Progress.” For the Relation field, choose the relation property named “Tasks” (created automatically when you added the relation in Tasks). For the Property field, choose “Completion %.” For Calculate, choose Average. This averages all linked task completion percentages.
Roll Up Key Result Progress into Objectives
- Add a rollup property to Objectives
Open the Objectives database. Click the + button. Select Rollup. Name it “KR Progress.” For Relation, choose the relation property named “Key Results” (created automatically). For Property, choose “Task Progress.” For Calculate, choose Average. This averages the rollup values from all linked key results.
Format the Final Progress as a Percentage
- Add a formula property to Objectives
Click the + button in the Objectives database. Select Formula. Name it “Overall Progress.” Enter this formula:round(prop("KR Progress") 100) / 100
This rounds the value to two decimal places. To display it as a percentage, change the property format to Percent in the property settings. - Test the aggregation
Create a task linked to a key result. Set its status to Done. Check the key result’s Task Progress rollup — it should show 100%. Check the objective’s Overall Progress — it should also reflect the change.
Common Mistakes and Limitations
Rollup Shows 0% or No Value
This happens when the relation property in the rollup is not set to the correct linked database. Open the rollup property settings in Key Results. Confirm that Relation points to the relation that links to Tasks, not to Objectives. Also check that the Property field points to the Completion % formula, not to another property like Status.
One Task Linked to Multiple Key Results
Notion’s basic relation property allows only one-to-many links. If you try to link one task to two key results, the rollup will count it twice. To avoid this, keep each task under a single key result. If a task truly contributes to two key results, create a duplicate task row with a note explaining the duplication.
Formula Not Updating Automatically
Notion’s rollups and formulas recalculate when any related row changes. If the progress does not update, refresh the page by pressing F5 or closing and reopening the database. If the issue persists, check that the rollup property is not set to Show original instead of an aggregation function like Average or Sum.
Aggregation Method Gives Wrong Result
Using Average for task completion percentages works well when all tasks are equally weighted. If some tasks are more important, replace the simple formula with a weighted formula. For example, add a Weight number property to Tasks. Then use a formula like prop("Completion %") prop("Weight") and roll up the sum of weighted values. Divide by the sum of weights in the objective formula.
Notion OKR Database Structure: Properties Comparison
| Database | Key Properties | Aggregation Method |
|---|---|---|
| Objectives | Name, Owner, Timeline, Status | Rollup (Average) of Key Result progress |
| Key Results | Name, Target Value, Current Value, Owner | Rollup (Average) of Task completion % |
| Tasks | Name, Status, Assigned To, Due Date | Formula (0, 50, 100 based on Status) |
You now have a live OKR system where updating a task’s status automatically recalculates the key result and objective progress. To extend this, add a Progress Bar formula using slice("██████████", 0, round(prop("Overall Progress") 10)) for a visual bar. For advanced use, create a dashboard view that filters objectives by owner or timeline using linked database views.