The question every executive eventually asks
"Why did this number change?" is the question that turns a successful data team into a trusted one. Answering it requires lineage — a graph showing how every column in every output flowed from upstream sources. At the table level ("this dashboard reads from this mart"), the column level ("revenue in the dashboard comes from amount_usd in fct_orders"), and ideally the row level ("this row's value was set by the run on 2026-04-30 at 03:14 UTC").
What gives you lineage today
- dbt's docs site renders a lineage graph for every model. Click a model, see what feeds it and what depends on it.
- Dagster models the lineage as the orchestration. Every asset's upstreams and downstreams are first-class.
- OpenLineage is an emerging open standard for emitting lineage events from any pipeline framework. Airflow, Dagster, Spark, Flink all have OpenLineage integrations.
- Marquez / DataHub / OpenMetadata are open-source platforms that store and visualize lineage emitted via OpenLineage.
The discipline, not just the tool
The tool gives you the graph; the discipline is to structure your transformations so the graph is meaningful. A dbt project where every mart depends on a staging layer, and every staging layer depends on a source, produces clean lineage. A dbt project where models do everything in one giant CTE chain produces a lineage graph that's true but useless.