Dashboard numbers look wrong
A dashboard widget shows a number you didn't expect. Almost always it's the time range, granularity, aggregation, filters, or sampling — not bad data.
Symptom
A widget shows a number that doesn’t match what you expected — cost too low, latency too high, a count that seems off. Almost always the data is right and the query is reading it differently than you assumed: the time range, granularity, aggregation, or filters change what a widget reports. Check those four before suspecting the underlying traces.
- A metric looks far higher or lower than reality.
- Two widgets that “should” match don’t.
- A number changed when you only changed the time range or granularity.
Quick checks
- The widget’s time range matches the window you have in mind.
- The granularity (bucket size) is what you expect — per-hour and per-day give different numbers.
- The aggregation (sum / average / median) answers the question you’re asking.
- No stray filter (model, status, attribute) is silently narrowing the data.
Causes and fixes
| Cause | What you see | Fix |
|---|---|---|
| Time range / granularity | A number changed when you only changed the window or bucket size | A chart reflects the selected window and bucket. Set both to match your expectation — average latency per hour and per day differ from the same traces. |
| Aggregation mismatch | Two widgets that “should” match don’t | Sum vs. average vs. median answer different questions — confirm the widget uses the one you mean. |
| Filters narrowing the data | A metric looks far lower than reality | A widget filter (model, status, attribute) silently excludes traces; clear it to compare against the full set. |
| Eval sampling | An eval-based metric covers fewer spans than total traffic | If a metric is built on evals run at a sampling rate, it covers a subset of spans, not all of them. |
| Timezone | An apparent gap or spike at a day boundary | Day boundaries follow the dashboard timezone — the boundary effect, not missing data. |
Diagnostic checks
Open the widget editor and read its time range, granularity, aggregation, group-by, and filters. Then cross-check one value against the trace explorer for the exact same window:
- Apply the same time range and filters in the trace explorer.
- Count the matching traces (or read the latency/cost column) and compare to the widget.
- If the two agree, the widget config — not the data — explains the number.
Minimal smoke test
Set the widget’s time range and granularity to match your expectation, clear extra filters, and confirm the value lines up with a trace-explorer count for the same window. They should reconcile within the rounding of the chosen aggregation.
Escalate
If a value still can’t be reconciled with the trace list for the same window, contact support@futureagi.com with the dashboard, the widget config, and the window.
Prevent recurrence
- Label widgets with their aggregation and window so readers don’t misread them.
- Keep one “all traffic, no filters” reference widget to sanity-check the others.
Next steps
Questions & Discussion