Modern BI

Your Dashboard Number Is Wrong. Here's How to Find Where It Broke.

A wrong number on the dashboard? Trace it back layer by layer — presentation, semantic, pipeline, source — so the next one takes minutes.

Hugo Lu
Hugo Lu
August 10, 2026
4 min
read
Your Dashboard Number Is Wrong. Here's How to Find Where It Broke.

Last week a client told me they’d received a message saying: "the revenue number on the exec dashboard looks off, can someone check?" Four people spent the rest of the afternoon in a Slack thread trying to figure out whose problem it was.

That's the actual failure. Not that the number was wrong, numbers are wrong sometimes, pipelines are complicated  but that nobody in the thread could say, with any confidence, which layer broke it. Was it the chart? The metric definition? A job that ran on a half-built table at 4am? Nobody knew, so everybody started guessing, and guessing is what turns a five-minute fix into an afternoon.

This is a walkthrough of how to trace a wrong number back to its origin, layer by layer, and what has to be true upstream so the next one takes minutes instead of an afternoon.

The trust boundary nobody owns

Most data organisations split ownership somewhere around the warehouse wall. The platform team owns the pipeline: ingestion, transformation, orchestration, the stuff that runs at 3am with no audience. The BI or analytics team owns the dashboard: the thing the VP actually looks at.

Both teams can be doing their jobs well and the number can still be wrong, because the handoff between them belongs to nobody. The pipeline team's definition of "done" is the table landing. The BI team's definition of "correct" is the chart rendering. Neither of those is the same as "the number is right," and the gap between them is exactly where trust quietly dies.

This isn't a tooling problem in the sense of needing a better dashboard. It's a governance gap, a boundary where lineage, ownership and definitions stop being anyone's explicit responsibility and start being tribal knowledge held by whoever's been there longest.

Start at the end, not the beginning

Where a number breaks
Four layers. Check them in order.
Work backwards from the number. Most wrong numbers die in the first two layers you check — not in the pipeline everyone blames first.
Start here work backwards ↓
1
Presentation layer
Filters, date range, aggregation, or a join fan-out silently multiplying rows.
The tellSame wrong number in two independent tools? It's upstream of both — not here.
2
Semantic / model layer
A definition quietly changed in a PR, or a failing test everyone learned to ignore.
The tell"Who changed this, and when" should be answerable in seconds, not a git blame.
3
Pipeline
Partial loads, a job that ran out of order, a silent retry, a schema change three hops up.
Guarded byDependency-aware orchestration + column-level lineage.
4
Source
A vendor API changed, a CRM field got repurposed, someone edited a load-bearing spreadsheet.
Guarded byFreshness SLAs + quality gates that block, not log.

The instinct when a number looks wrong is to start guessing at the pipeline: rerun a job, check yesterday's load, ping the data engineer. That's usually the slow path, because you're searching a large space with no prioritisation.

The faster path runs backwards from the number itself. First, reproduce it. Then define "wrong" precisely, because the symptom tells you which layer to look at:

  • Stale — the number hasn't moved when it should have. Look at freshness, not logic.
  • Miscalculated — the number moves, but the math looks off. Look at the metric definition.
  • Filtered — the number is plausible but doesn't match a related view. Look at the presentation layer.
  • Double-counted — the number is too high, often by a suspiciously round multiple. Look for a join fan-out.

Precision here saves an afternoon. "The number is wrong" sends four people in four directions. "The number is 40% too high and moved yesterday" sends one person to the right layer.

Layer 1 — the presentation layer

Start here because it's the fastest to check and the easiest to rule out. Is the chart lying about data that's actually fine underneath?

Check the filters and date range first. the single most common cause of "wrong" numbers is a dashboard quietly filtering on the wrong period after a copy-paste edit. Then check aggregation: is this dashboard summing what another dashboard averages? Then check for join fan-out, where a one-to-many join silently multiplies rows and inflates a sum without anyone touching the underlying data.

The tell that it isn't a presentation-layer problem: the same number is wrong in two independent tools. If two dashboards built by different people, querying independently, both show the same wrong figure, the problem is upstream of both of them. That single check rules out an entire layer in under a minute.

Layer 2 — the semantic or model layer

If the presentation layer is clean, the next question is whether the definition itself is wrong, or was recently changed underneath you.

This is a dbt model problem more often than people expect: a metric's logic gets edited for a legitimate reason in one PR, and six weeks later nobody remembers that "active customer" now excludes trial accounts. Or a test has been failing quietly, and because it wasn't blocking, everyone learned to ignore the red icon next to it.

The question that matters here: "who changed this, and when"  should be answerable in seconds. If it takes an afternoon of git blame and asking around the team, that's not a data problem, that's a tooling and process problem, and it's fixable independently of whatever's wrong with this particular number.

Layer 3 — the pipeline

This is where the least visibility and the most failure modes live, and it's usually where the real answer is hiding once the first two layers check out clean.

Partial loads. A job that ran before its upstream dependency finished. A dependency that technically "succeeded" but ran against a half-built table because nothing enforced the ordering. A silent retry that quietly reprocessed a partition twice. A schema change three hops upstream that didn't break anything loudly, just changed what a column meant.

This is exactly the layer orchestration and lineage exist for. At Orchestra, this is a problem we wanted to fix: making sure a job can't start until everything it depends on has actually finished and making sure that when something does go wrong, you can trace a number back to its source in a few clicks rather than an archaeological dig through log files and Slack history.

Orchestra daily data sync
Source: Orchestra

Concretely, that means: dependency-aware scheduling so nothing runs on an incomplete upstream table, column-level lineage so you can click from "this cell in this dashboard" back to "this specific dbt model and this specific run," and alerting that tells you about a broken pipeline before a human notices the downstream symptom. 

The pattern worth internalising: if nothing downstream can start until everything upstream is verified complete, an entire category of "wrong number" incidents simply stops happening. 

At Orchestra our mission is to make data people's lives easier. That starts with making stuff like this simpler.

Layer 4 — the source

The layer nobody controls, which is exactly why it needs the most instrumentation, not the least.

A vendor changes an API response without telling you. Someone repurposes a CRM field for a new use case that has nothing to do with what it originally tracked. A person edits a spreadsheet that three pipelines quietly depend on. None of this is negligence,  it's just what happens when your data has sources outside your organisation's control.

The defence here isn't prevention, because you can't prevent what you don't control. It's early warning: freshness SLAs that tell you the moment a source stops updating on schedule, and quality gates that catch a malformed or out-of-range value before it's consumed downstream, rather than three weeks later when a confused executive asks about it. Orchestra's role in this layer is making sure those gates actually block bad data from propagating, rather than just logging a warning that nobody reads until after the damage is done.

How to make the next one take five minutes

The point of all of this isn't to get faster at the Slack forensics. It's to make the forensics unnecessary. What that takes, in practice:

Visual 3 · "How to make the next one take five minutes"

Make the next one a five-minute lookup
Five things that turn forensics into a lookup.
End-to-end lineage — raw source to dashboard cell, with no gaps at team boundaries.
Freshness SLAs surfaced to consumers — "is this current" is a fact on the dashboard, not a question in Slack.
Quality gates that fail loudly — a blocked pipeline beats a silently corrupted one.
Clear ownership of the pipeline-to-BI handoff — a name against the boundary, not just the two sides of it.
One canonical metric definition — defined once, consumed everywhere, not redefined per dashboard.
Some isn't all five
Most teams have some of these. Very few have all five — which is exactly why the boundary between pipeline and BI stays the place where trust breaks.

Most teams have some of these. Very few have all five, which is exactly why the boundary between pipeline and BI stays the place where trust breaks. This is the case Orchestra was built around: orchestration, lineage and quality gates aren't separate purchases, they're one system, because a lineage graph with gaps in it is barely better than no lineage graph at all.

Where warehouse-native BI changes the picture

Everything above gets meaningfully easier when the BI layer stops working off an extract and queries the warehouse directly.

Two of these layers effectively collapse. There's no separate copy of the data to diverge from the source of truth, so a chunk of "why do two dashboards disagree" incidents can't happen in the first place. And upstream problems surface immediately instead of being masked by a stale extract sitting quietly out of sync for a day. That's harder to hide, which is the entire point: a wrong number you can see immediately is vastly cheaper than one an extract has been quietly serving for a week.

I've written more on what that architecture looks like, and why it also happens to be the precondition for agents writing back safely, in the companion piece: Agents Can Read Your Data. What Happens When They Start Writing To It?. And once writeback enters the picture, the pipeline stops being a one-way feed into a dashboard and becomes part of a loop which means everything in this article about orchestration, lineage and quality gates matters even more, not less.

FAQ

How do you trace a wrong number in a dashboard back to its source?

Work backwards, not forwards. Reproduce the number, classify the symptom (stale, miscalculated, filtered, double-counted), then check presentation, semantic layer, pipeline and source in that order — each symptom points at a specific layer.

Why do two dashboards show different numbers for the same metric?

Usually a metric defined twice, in two places, by two people, that has quietly drifted apart. The fix is one canonical definition consumed by both, not a reconciliation exercise every time it happens.

What's the difference between data orchestration and data quality monitoring?

Orchestration controls when and in what order things run, so nothing executes against incomplete upstream data. Quality monitoring checks whether the output is correct once it has run. You need both — orchestration prevents a class of errors, monitoring catches what gets through.

What is a data freshness SLA, and how do you set one?

A stated commitment for how current a dataset should be — "updated within 2 hours of source" — that's monitored and surfaced to consumers, not just known internally by the data team. Set it based on how the data is actually used downstream, not on what's technically achievable.

Where should data quality checks live — in the pipeline or the BI layer?

As early as possible — ideally in the pipeline, before bad data reaches anything that consumes it. Checks in the BI layer catch problems after they've already propagated.

Who should own data quality, the platform team or the BI team?

Both, explicitly, at the boundary — which is different from neither owning it implicitly, which is the default state in most organisations.

Trust is a full-stack property

The wrong number on the exec dashboard was never really the problem. It was a symptom of a boundary that nobody owned, between a pipeline team optimising for "the table landed" and a BI team optimising for "the chart renders." Neither of those is the same as "the number is right," and the space between them is where the afternoon gets lost.

Fix the boundary - lineage that doesn't stop at the warehouse wall, freshness that's visible rather than assumed, quality gates that block rather than log, and one team accountable for the handoff and the next wrong number stops being a Slack investigation. It becomes a five-minute lookup.

Ready to experience next-gen analytics?

See how Astrato runs natively in your warehouse.