Beta

Cross Source Refs

Reference any source, anywhere.

A formula in one source can read a column in another.

Quarterly Revenue

source · A
QuarterTotal
Q1$47,700
Q2$56,700
Q3$64,600
Q4$75,300

Q4 row publishes downstream

Forecast Plan

source · B
Q1_target = [Quarterly Revenue!Total] * 1.18
QuarterTarget
Q1 next$88,854
Q2 next$99,000

The syntax

Square brackets, one pipe.

A reference reads like a sentence. Open the brackets, name the source, name the column.

[Quarterly Revenue!Total]

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

A small grammar, that holds it all.

Spaces are fine. Casing is fine. The bracket carries the source. The pipe carries the join.

  • Pull a single cell, an entire column, or an aggregate. The engine treats them as one expression.
  • A change upstream propagates downstream in the same beat. No build step. No publish.
  • The bracket also reads inside any function. SUM, AVG, IF, ROUND all accept cross source values.

The graph

Sources hold, hands.

A workspace settles into a few sources and a web of references between them.

RevenuePipelineForecast

Topology

Three sources, one truth.

Two upstream sources feed one downstream. Edit either upstream. The downstream redraws cleanly.

forecast = [Revenue!Total] * 1.18
cap = [Plan!Ceiling]
health = [Churn!Mean]

Stack

Three lines, three feeds.

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

Loops fail loudly.

The engine watches the graph during evaluation. The first cycle short circuits. The rest of the sheet keeps running.

Why

One workspace, one truth.

∞

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

Questions, answered.

How do I write the reference?+

Wrap the source name and column with a pipe between them, like [Quarterly Revenue!Total]. Spaces are fine.

Will it loop forever?+

No. The engine watches the dependency graph and short circuits a cycle the moment it sees one.

Do aggregates work across sources?+

Yes. SUM([Quarterly Revenue!Total]) totals the column from the other source.

Will charts see the updated value?+

Yes. A change upstream propagates through every reference and every chart in one pass.

Wire your sources. Read across the page.