Every cell holds a number, an absence, or an error, and that list is closed.
Every cell holds a number, an absence, or an error. Nothing else is ever a value.
A number is a finite 64-bit float. A computation that comes out infinite or not a number is an error in the cell where it happened.
An absence means there is nothing to report, such as an average over no rows. A sum over no rows is zero, but an average over no rows has no value, and the grid shows the difference.
An error shows a code that says what went wrong. The codes follow Excel's spelling, such as #DIV/0 and #NA, with #ERR for anything without a more specific code.
plan = team
2024-01 2024-02 2024-03
Invoices 1 0 1
Revenue 2500 0 2500
ARPU 2500 #DIV/0 2500The team plan sold nothing in February, so ARPU divides zero by zero there. That is one cell. Every other cell computes normally, and a cell that reads the broken one holds an error that still points at where it started.
A grid always comes back whole. A driver whose formula does not parse fills its own row with errors, and every other driver in the model still computes its numbers.