Topology
Three sources, one truth.
Two upstream sources feed one downstream. Edit either upstream. The downstream redraws cleanly.
Cross Source Refs
A formula in one source can read a column in another.
Quarterly Revenue
source · A| Quarter | Total |
|---|---|
| Q1 | $47,700 |
| Q2 | $56,700 |
| Q3 | $64,600 |
| Q4 | $75,300 |
Q4 row publishes downstream
Forecast Plan
source · B| Quarter | Target |
|---|---|
| Q1 next | $88,854 |
| Q2 next | $99,000 |
The syntax
A reference reads like a sentence. Open the brackets, name the source, name the column.
that is the whole grammar
// Plain reference, single value.forecast = [Quarterly Revenue!Total] * 1.18// Aggregate across the column.year_total = SUM([Quarterly Revenue!Total])
The shape
Spaces are fine. Casing is fine. The bracket carries the source. The pipe carries the join.
The graph
A workspace settles into a few sources and a web of references between them.
Topology
Two upstream sources feed one downstream. Edit either upstream. The downstream redraws cleanly.
Stack
A formula bar stacks references in plain text. Comments are welcome. Diff history is per source.
// engine guard
[A!x] → [B!y]
[B!y] → [A!x]
cycle caught · #ERROR
Cycle guard
The engine watches the graph during evaluation. The first cycle short circuits. The rest of the sheet keeps running.
Why
∞
depth, with cycle guard
1
source, many references
0s
wait, on propagation
A pipeline rebuilds the whole report on every change. Cross source references rebuild only the cells that depend on the change. The page stays calm.
In short
Wrap the source name and column with a pipe between them, like [Quarterly Revenue!Total]. Spaces are fine.
No. The engine watches the dependency graph and short circuits a cycle the moment it sees one.
Yes. SUM([Quarterly Revenue!Total]) totals the column from the other source.
Yes. A change upstream propagates through every reference and every chart in one pass.