COALESCE

COALESCE(a, b, …)

Gives the first of its values that isn't blank, such as the % complete or 0 when none is entered. It fills blanks only: an error isn't skipped, so if the value it reaches fails, the result is that error. When every value is blank, the result is blank.

Arguments

ArgumentWhat to give it
a, b, …Two or more values to try in order, all the same kind: all dates, all text, and so on. A bare number among durations counts as working days.

Examples

Formula
=COALESCE([% complete], 0)

The task's % complete, with 0 for tasks that have none entered, so they add up and compare like the rest.

Formula
=COALESCE([Phase], "Unassigned")

The task's phase, or "Unassigned" where it has none, so grouping by the column doesn't leave a blank group.

Formula
=COALESCE(MAX(Predecessors[Finish date]), DATADATE())

The latest predecessor finish, or the data date for a task with no predecessors.

Formula on WBS rows
=COALESCE(MIN(Tasks[Total float]), 0d)

On a WBS row: the lowest float under the node, and 0d for a node with no tasks.

Reach for something else when

You wantUse
A fallback when a value fails, not when it is blankIFERROR
To know whether a value is blankISBLANK
Different values on a conditionIF

Common questions

What does "COALESCE gives Text in one place and Number in another" mean?

Every value fills the same column, so they must be the same kind. Give text a text fallback: COALESCE([Phase], "None"), not COALESCE([Phase], 0).

The editor refuses this
=COALESCE([Phase], 0)

Why didn't COALESCE replace an error?

COALESCE fills blanks, and a failed value isn't blank. Wrap the value in IFERROR as well: COALESCE(IFERROR(ONLY(Predecessors)[Finish date], BLANK()), [Start date]).