Formulas in Owl

A formula works something out for every row of a table: for every task, every WBS node, every resource, or once for the whole project. It reads the schedule as CPM dated it, so [Total float] < 5d is TRUE on each task with less than five days of float, and it updates whenever the schedule changes.

You write a formula once, for the row, never for a cell. There are no cell addresses like A5. [Total float] always means the float of the row being worked out, and other rows are reached by name: MAX(Predecessors[Finish date]) is the latest finish among this task's predecessors. Because nothing depends on a position, a formula gives the same answer however the grid is filtered, sorted or collapsed.

Where you write one

The same language and the same editor serve every place Owl works something out.

You wantWriteWhere
A new column of values on every taskA formula columnThe + at the end of the grid's header row → New formula column
A different value on the WBS summary rows of that columnThe column's WBS formulaSelect a WBS row's cell in the column and edit its formula
One value for the whole project: a total, a count, a dateA measure+ → New project measure in a column header; read it in a guardrail, an analytic or another formula as Project[Name]
A value for every resourceA resource formulaA resource's page → Formulas → + Formula
A rule the schedule must keepA guardrailGuardrails in the project tree → +. Its Only where and Passes when parts are formulas
A chart of a value over timeA formula column the chart readsWrite the column in the grid, then pick it in the chart; Edit its formula opens it there

A formula can also read your own data tables, such as an imported cost ledger or delivery log: see Tables and your own data.

Filters, colors, and group and sort don't take formulas directly. They list your formula columns beside the built-in fields, marked fx, so you write the column once and filter, color or group by it anywhere. New formula column… in the Colors window starts one for you.

Write your first formula column

  1. Click + at the end of the grid's header row and choose New formula column.

  2. Name it in the box on the left of the formula bar, for example Near critical.

  3. Type the formula. Suggestions appear as you type: fields after [, functions and relations at the start of a name. Press Tab to take one.

    Formula
    =[Total float] < 10d AND NOT [Critical]
  4. Press Enter to save. The column fills in for every task.

To change it later, double-click its header, or select one of its cells and press Enter, F2 or =.

Tip: Not sure where to start? The lightbulb in the formula bar lists worked examples for the table you're writing on. Pick one and change it.

Getting help while you type

You seeIt does
The argument hint above the bar, SUM(list)Shows the function you're inside and bolds the argument you're on. The ⓘ beside it opens that function's page here
An ⓘ on a function in the suggestionsOpens the function's page without leaving the formula
fx in the formula barInsert a function: browse functions by what they do, fill in the arguments, and see the formula it writes. More on … opens the function's page
The function referenceEvery function, by category, with a search box

Reading the results

A cell showsIt means
A valueThe formula worked out for that row
NothingThe value is blank for that row: the task has no baseline, a list had nothing in it, a field isn't set. Hover the cell for the reason
!The formula failed for that row: a division by zero, a date that can't be read. Hover the cell for the reason and the task it came from

A blank isn't 0 and isn't an error. Only that row is affected: the rest of the column still works out. See blanks and errors.

If you save a formula the editor can't accept, it says why in a sentence under the bar, with a Use … button when there's an obvious fix, and the column keeps its last good values until you fix it.

Guardrails are formulas too

A guardrail checks every row of the table it applies to (each activity, each WBS node, each relationship, the project, …). Its Passes when formula is TRUE where the row is fine.

The formula gives a rowThe guardrail
TRUEPasses it
FALSEFails it, and lists it
BlankDoesn't check it. Rows left out by Only where are blank, and so is a row whose formula reads something missing
An errorLists it under Couldn't check, apart from the failures
Formula
=[Duration] <= 44d

A typical Passes when: no activity longer than 44 working days of its own calendar.

Common questions

Is this Excel?

It reads like Excel, and most functions have the names and arguments you know. What changes is what a formula is about:

In Excel you'd writeIn Owl you write
A5, B2:B10[Duration] for this row; Predecessors[Duration] for related rows
VLOOKUP, XLOOKUPTask("A1000")[Finish date], or a relation like Predecessors
SUMIF, COUNTIFSUM(FILTER(All, All[Phase] = "Civil")[Duration])
B2 - A2 on two datesWORKDAYS([Start date], [Finish date]) for working time, CALDAYS(…) for calendar days
"2026-03-01" or DATE(2026,3,1)DATE(2026, 3, 1): there are no date literals
NOW()TODAY() or DATADATE()

Why is my formula refused when it works in Excel?

Owl checks a formula before it saves it, against the real fields of your project, and refuses anything that would fail on every row: a misspelt field (“[Finsh] isn't a field. Did you mean [Finish date]?”), two dates subtracted, a list where one value is needed. The sentence under the bar says what to write instead.

Can a formula change the schedule?

No. A formula only reads. To ask what the schedule would do if something changed, use a what-if: CPM dates a copy of the schedule with your change, and the formula reads the copy.

Can Owl write formulas for me?

Yes. Ask in the chat ("add a column with each task's float in weeks", "add a guardrail that no activity runs past its baseline finish by more than 10 days") and Owl writes the formula column or guardrail. It shows up in the grid like one you wrote, and you can open and change it.

Where to go next

To learnRead
Fields, durations, dates, text, blanksHow a formula reads
Predecessors, Upstream, FILTER, the WBS, resourcesReading other rows
Asking CPM "what if…", the baseline, revisionsWhat-ifs and other schedules
Hours and cost week by week, history across updatesValues over time
One functionThe function reference