BugMojoBugMojoBugMojo
FeaturesPricingBlogGuidesAbout
Log inGet started
BugMojoBugMojo

Bug reports that actually help fix bugs — capture, replay, share.

A product of Softech Infra.

Product

  • Features
  • Pricing
  • Get started
  • Log in

Resources

  • Blog
  • Guides
  • Compare
  • Glossary

Company

  • About
  • Contact
  • Privacy
  • Sitemap
  • Engineering
  • Playbooks
© 2026 BugMojo. All rights reserved.
AllGuidesEngineeringPlaybooksCompareGlossaryAlternativesBy roleBug tracking by framework
  1. Home
  2. Blog
  3. Bug reporting by role
  4. Data Analysts
Bug reporting by role

Bug reporting for data analysts — the 2026 playbook

Role-specific bug-reporting playbook for data analysts: what to capture, how to file, and how to handoff cleanly to engineering — without bouncing tickets back.

5 min read·Business intelligence
Isometric line-art of a BI dashboard panel with one lime-highlighted filter pill tracing down through a ?filter= query-string ribbon to a console error glyph on a dark canvas

Why Data Analysts need a different playbook

Data analysts file a kind of bug nobody else does: the dashboard renders, no error pops, but the number is wrong. The breakage almost always lives in the filter state, and that state is not in the screenshot you took. In Tableau, Power BI, and Metabase the active filters are encoded in the URL query string; in Apache Superset they sit behind a native_filters_key permalink. If an engineer re-types those filters by hand from your screenshot, one wrong letter case or one mis-formatted date silently returns different rows and no error fires. The bug you can hand over as an exact filter URL is the bug that gets fixed on the first pass.

This is the 2026 playbook for filing a BI dashboard bug an engineer can actually reproduce: where filter state really lives in Tableau, Power BI, Metabase, and Superset, why a numeric between filter or an off-by-one date boundary produces a wrong total that only repros with the literal filter string, and how an AI coding agent can read the captured filter URL, console, and failing data query over MCP and draft the reproduction before you finish writing the ticket. Gartner estimates poor data quality costs organizations an average of 12.9 million dollars per year, so a dashboard showing the wrong figure is not cosmetic when a pricing or staffing decision rides on it.

Common pitfalls

The recurring mistakes that get bug reports bounced back — and how to avoid them.

A screenshot of the dashboard does not carry the filter state

In Tableau, Power BI, and Metabase the active filters live in the URL query string, and in Superset behind a native_filters_key permalink. A picture of the chart shows the wrong number but not the inputs that produced it, so capture the full URL or permalink, not just the screen.

Power BI table and field names are case-sensitive in the URL filter

Microsoft documents that in a filter like ?filter=Table/Field eq 'value' the Table and Field names are case-sensitive (the value is not). Re-key Store as store from a screenshot and the filter silently returns different rows with no error, which is the classic works-on-my-filter mismatch. (Microsoft Learn.)

A date filter boundary includes the whole day you thought you excluded

Power BI expands Table/Date gt '2018-08-03' to '2018-08-03T00:00:00', so any Aug 3 row with a nonzero time component is included. That off-by-one-day behavior reads like a calculation bug but is a filter-boundary rule, and it only reproduces with the exact date string from the URL. (Microsoft Learn.)

URL filters are not a security mechanism and can be changed after load

Microsoft states plainly that anyone with report access can open the Filters pane and change or remove a URL filter after the page loads. So the filtered link you sent does not guarantee the recipient or the engineer sees the same state, which is a quiet source of cannot-reproduce confusion. (Microsoft Learn.)

Real-world examples

What these bugs look like in practice, and how to file them cleanly.

The dashboard total is wrong for a specific date filter

What it looks like: A KPI or sum looks right for most ranges but is off for one date window. It reads like a broken measure, but the math is fine and the boundary is being read differently than you assume.

How to file it: Reproduce with the literal date string from the URL, not a re-typed date. Power BI reads Date gt '2018-08-03' as midnight, so rows with a nonzero time on the 3rd get pulled in. Attach the exact filter query string and the resulting number so an engineer can confirm boundary versus calculation.

texttext
# The literal filter from the URL, not a re-typed date
?filter=Sales/OrderDate gt '2018-08-03'
# Power BI expands this to '2018-08-03T00:00:00'
# -> any 2018-08-03 row with a time component IS included -> total looks 1 day off

A between filter breaks the cards but the UI hides the real state

What it looks like: A numeric between filter on a Metabase dashboard accepts only one bound, the connected question cards error out, and the filter status just reads '2 selections' instead of the actual numbers. A screenshot of the filter panel does not reveal what triggered the failure.

How to file it: Do not rely on the filter UI. Capture the dashboard URL (Metabase encodes the filter as ?param=value, ampersand-separated) plus the console and the question's underlying query, so the person fixing it sees the literal inputs, not a picture of the controls. (Metabase issue #54364.)

texttext
# Metabase writes the filter into the URL as you set it
/dashboard/42?revenue_between=1000   # only ONE bound supplied
# UI reads '2 selections'; connected cards throw -> capture the URL, not the panel

A Superset dashboard hangs with filters out of scope until the permalink loads

What it looks like: With 'Select first filter value by default' plus tabs, the dashboard hangs and the filters report as out of scope until the user clicks them or reloads. The plain page URL does not carry the state that reproduces it.

How to file it: Copy the Superset permalink that contains native_filters_key, not the address-bar URL. The reproduction depends entirely on that key, so a capture that records the resolved permalink, the network calls, and the console is what an engineer can replay. (Apache Superset issue #20797.)

texttext
# Capture the PERMALINK, not the page URL
https://superset.example.com/superset/dashboard/p/AbC123/   # encodes native_filters_key
# the bare /dashboard/sales/ URL loses the filter scope that triggers the hang

Workflow comparison

The same bug, filed two ways — with and without a capture tool.

FeatureBugMojoScreenshot / re-typed URL
Capture the exact filter state that produced the numberFull filter URL + permalink captured liveScreenshot of the chart, state lost
Preserve Superset native_filters_key / Metabase query paramsResolved permalink + query string retainedBare page URL, filter scope dropped
AI agent reads the filter URL + console + failing query via MCPYes — Claude Code or Cursor parses it directlyNo — a human re-keys the URL from an image
Pair the rendered chart with console + the data requestCaptured together in one reportSeparate tabs, manually correlated
Validate the warehouse query / SQL that returned the wrong rowsNot its job — pair with dbt tests / query logsNot captured either
Deep semantic-layer or measure debugging in the BI toolNo — use Tableau / Power BI native lineageNo
rrweb DOM session replayScrubbable, on-demandVaries / always-on only
Zero-setup Quick CaptureNo project, no SDKAccount / SDK required
The BugMojo column is highlighted. The closing rows are BugMojo’s core wedge: rrweb session replay, MCP for AI agents, console + network capture, and zero-setup Quick Capture.
Capture your next bug in 15 seconds

BugMojo records the DOM, console, and network — then ships a one-click ticket with the full replay attached. No SDK, no setup.

Try BugMojo free

Frequently asked questions

Frequently asked questions

Sources

  1. Filter a Report Using Query String Parameters in the URL — case-sensitive Table/Field, 10-expression AND limit, 2,000-char URL cap, date gt '2018-08-03' reads as midnight, 'URL filters are not a security mechanism' — Microsoft Learn (2025-12-01)
  2. How View URLs Are Structured — Tableau filters via case-sensitive ?Field=value, commas for multiple values, ampersands for multiple filters, date format yyyy-mm-dd hh:mm:ss — Tableau (Salesforce) (2024)
  3. Issue #54364: numeric between dashboard filter with partial input breaks connected cards; status shows '2 selections' instead of the limits — Metabase (GitHub) (2025)
  4. Issue #20797: dashboard does not load with 'Select first filter value by default'; filters out of scope until native_filters_key permalink refresh — Apache Superset (GitHub) (2024)
  5. Dashboard filters — entering a value changes the URL to include it (?param=value, ampersand-separated) — Metabase Docs (2025)
  6. Data Quality: Why It Matters and How to Achieve It — poor data quality costs organizations an average of $12.9 million per year — Gartner (2024)
  7. Specification 2025-11-25 — Model Context Protocol connects LLM applications to external data sources and tools — Model Context Protocol (2025-11-25)
Share:

More roles

Pick another — each guide has its own gotchas, comparison, and fixes.

Product Managers
Product management
QA Engineers
Quality assurance
Backend Developers
Backend engineering
Designers
Product design
Developers
Software engineering
Founders
Startups & founders

On this page

  • Why Data Analysts need a different playbook
  • Common pitfalls
  • Real-world examples
  • Workflow comparison