 Share
Explore

# How this works

## The Key Results table

Key Result
Due Date
- the goal due date for your key result
table

Key Result
- a “Lookup” column to the Key Results table
- the Display column
Days to complete
Dependent on
- a “Lookup” to this same Tasks table with a filter added under “Item Settings” for the lookup column options. This filter prevents tasks from becoming dependent on themselves.

`[Key Result]=thisRow.[Key Result] AND Task!=thisRow.Task AND thisRow.[Row ID].Contains(CurrentValue.[Parent Path]).Not()`

Start Date
- the estimated date the task needs to start on and it’s calculated and based on the total days for completion of this task and any dependent tasks it may have.

`[Key Result].[Due Date].ToDate() - Days(thisRow.[Total days to complete])`

End Date
- the estimated finish date for the task which uses the estimated start date and estimated days to complete.

`[Start Date].ToDate() + Days(thisRow.[Days to complete])`

Total days to complete
- this is a sum of the estimated total days to complete this task and the task it is dependent on. The trick in the solution is in this formula. If there are 3 tasks; Task 1 depended on Task 2 and Task 2 dependent on Task 3, and if each task takes 4 days, then Task 3 would have “4 + 0” which is a total of 4, Task 2 would have “4 + 4” which is a total of 8, and Task 1 would have a total of “4 + 8” which is equal to 12 days.

`[Days to complete] + thisTable.Filter([Dependent on]=thisRow).[Total days to complete].Max(0)`

Row ID
- this is simply used as a unique row identifier. This is required for the filter in the “Dependent on” column.

`RowId(thisRow)`

Parent Path
- traces the Row ID’s of chain of dependent rows and is used in the “Dependent on” filter.

`If(`` thisRow.[Dependent on].IsBlank(),`` List(thisRow.[Row ID]),`` List(thisRow.[Row ID], thisTable.Filter([Row ID]=thisRow.[Dependent on].[Row ID]).[Parent Path]).ListCombine()``)` 