Business Intelligence, Reporting, and Dashboards Questions
The reporting and presentation layer of analytics: semantic/metrics layers, report development and automation, self-service BI, and the architecture that feeds dashboards and reports. Covers dashboard and visualization design (tool selection across Tableau/Power BI/Looker-style platforms, drill-downs, information architecture, communicating metrics visually), refresh strategies, and query performance for interactive reporting workloads. Spans both the engineering behind the reporting layer and the design of the dashboards that consume it.
Your organization's analytics/warehouse cloud bill has grown significantly faster than the value being delivered, and leadership wants it addressed without breaking existing SLAs. Walk through how you would find where the cost is actually coming from, and describe the mix of technical changes and organizational controls (not just one or the other) you'd use to bring it back down sustainably.
Sample Answer
Direct answer
When an analytics or warehouse cloud bill grows faster than the value being delivered, fixing it sustainably means finding where the cost is actually concentrated (not guessing), then applying a mix of technical changes and organizational controls together, since technical fixes alone tend to get eroded by new, unmonitored usage, and organizational controls alone don't fix inefficient queries or storage that already exist.
Structured elaboration
Finding where the cost actually comes from: most cloud warehouses expose per-query or per-job cost/usage data; breaking this down by team, by report, and by query pattern usually reveals that cost is concentrated in a small number of expensive offenders (a handful of inefficient recurring queries, or a small number of teams running disproportionately expensive ad-hoc work) rather than being evenly distributed, which tells you where to focus effort first.
Technical changes, several levers together: storage costs come down through tiered storage (moving older, less-frequently-queried data to cheaper storage classes) and retention policies (not keeping data forever if it's never queried past a certain age). Compute costs come down through query optimization (fixing the specific expensive queries identified above), materialized views and precomputed aggregates for frequently-repeated expensive queries (the same discipline), and caching so repeated identical requests don't recompute from scratch. Data modeling choices (partitioning, clustering) reduce how much data a typical query has to scan.
Organizational controls: cost ownership (a team or individual accountable for a given workload's spend, so cost isn't nobody's problem), budgeting and cost alerts (a threshold that flags before a runaway cost becomes a monthly-bill surprise), tagging (so spend can actually be attributed to a team or project in the first place, which most of the technical analysis above depends on), and query quotas for ad-hoc usage (connecting to the workload-isolation discipline).
Measuring impact and guarding against regressions: after implementing changes, track cost trend against the specific levers pulled (did the queries you optimized actually get cheaper, did the retention policy actually reduce storage spend) rather than just watching the aggregate bill, since the aggregate can be affected by many things at once and won't tell you which specific change worked.
Worked example
An analytics warehouse bill has tripled year over year. Breaking cost down by team and query pattern reveals: 40% of compute cost comes from a single recurring dashboard refresh job that's scanning a full 2-year history of raw event data on every run, when it only actually needs the trailing 90 days; 25% comes from a handful of analysts running large, unbounded ad-hoc queries with no query-cost guardrails; and storage cost has grown steadily because no retention policy exists, keeping raw data indefinitely even though nothing older than a year has been queried in the last six months. The fix: repoint the dashboard refresh to query only the necessary trailing window (directly addressing the single biggest cost driver first, rather than spreading effort evenly across many smaller issues), add a query-cost warning/approval threshold for ad-hoc queries above a defined data-scanned limit, and implement a retention policy moving data older than a year to cheaper storage. Tracking cost specifically for the dashboard refresh job before and after the fix confirms it alone accounts for most of the total reduction, validating that this was the right lever to pull first rather than assuming the aggregate bill decrease proves every change helped equally.
Trade-offs and pitfalls
A retention or tiered-storage policy that moves data to cheaper, slower storage without warning can silently break a report that occasionally needs older data, turning a cost optimization into an unexpected incident; any retention change needs a clear communication and grace period, and ideally a way for someone to explicitly flag data that needs to stay in fast storage longer than the default policy. Cost-reduction efforts can also chase the wrong thing if measured only by the aggregate bill: a genuine business growth in usage (more legitimate reports, more real analysts) will also increase cost, and conflating that with waste risks cutting things that are actually delivering value in the name of hitting a cost target, which is exactly why breaking cost down by driver, and measuring the SPECIFIC levers pulled, matters more than watching one aggregate number.
Design an automated reporting pipeline that delivers a set of KPIs to stakeholders on a schedule, end to end: where the data comes from, how it gets transformed and where the metric logic lives, which serving layer or BI tool renders it, and how you catch and alert on problems before a stakeholder sees a wrong number. State the latency and scale targets you're designing for and justify the architecture choices against them.
Sample Answer
Direct answer
An automated reporting pipeline has five stages regardless of scale: get the data in, transform it and compute the metrics, serve it through a BI (business intelligence) tool, catch problems before a stakeholder sees them, and control who can see what. The design choices at each stage are driven almost entirely by the latency target and the scale (how many KPIs, how many consumers) you're actually designing for, not by defaulting to the most sophisticated option available.
Structured elaboration
Data sources and ingestion: identify every upstream system feeding the report and how each lands data (batch export, streaming, API pull), and whether any of them can silently go stale or fail without an obvious signal.
Transformation and metric layer: where the actual calculation logic lives. For a pipeline serving multiple KPIs to multiple audiences, this should be a shared, versioned layer (connecting to the semantic-layer and metric-registry discipline), not calculation logic duplicated inside each report.
Serving layer/BI tool choice: driven by the latency target. A daily-refresh executive summary can be served from a standard warehouse query through any BI tool; a sub-minute, high-concurrency requirement usually needs a dedicated caching or serving layer in front of the warehouse, because hitting the warehouse directly on every dashboard load doesn't scale to many concurrent viewers at low latency.
Data-quality checks: automated checks (row-count sanity, null checks, a comparison against a recent historical baseline) that run BEFORE the pipeline publishes new data, so a broken upstream feed doesn't quietly become a wrong number on someone's screen.
Alerting and monitoring: separate from data-quality checks on the data itself, operational monitoring on the pipeline (did the job run, how long did it take, did it fail) with alerts routed to whoever's on call, and a defined SLA (service-level agreement) for how fast a failure gets noticed and fixed.
Access controls: who can see this report, enforced consistently regardless of which BI tool or delivery mechanism serves it.
Reproducibility and auditability: being able to say exactly what data and what version of the transformation logic produced a given historical report, which matters both for debugging ('why did this number change') and for any audit requirement.
Worked example
Designing a pipeline to deliver 20 KPIs to executives across 50 regions, refreshed daily, with a short auto-generated narrative alongside the numbers: ingestion pulls from the regional operational databases nightly; transformation computes the 20 KPIs through the shared metric layer at region grain; the narrative is templated (a rules-based sentence generator referencing the computed deltas, e.g. 'Region X revenue is up 12% week-over-week, driven primarily by...') rather than a fully model-generated summary, because a templated narrative is auditable and reproducible in a way a freshly-generated one from a language model, on financial figures, is harder to guarantee is faithful to the underlying numbers without a verification step; data-quality checks confirm each region's KPI (key performance indicator) set is complete and within a plausible range of the prior day before publishing; if a region's data is missing or looks anomalous, that region's summary is flagged as 'data pending' rather than either blocking the entire 50-region report or silently showing stale numbers; and the report publishes by 7 AM local time per region, with an SLA that a failure is caught and someone paged within 30 minutes of the scheduled publish time.
Trade-offs and pitfalls
The biggest design trap on a pipeline like this is defaulting to the most sophisticated architecture (real-time streaming, a fully generative narrative) when the actual requirement is a daily cadence and a modest KPI count that a much simpler batch pipeline handles fine at a fraction of the operational cost; matching the architecture to the actual latency and scale requirement, not the most impressive-sounding one, is the real skill. The other recurring failure mode is treating data-quality checks and pipeline monitoring as the same thing: a pipeline can run successfully and on time (monitoring is green) while still producing subtly wrong numbers because an upstream source silently changed (data-quality checks would catch this, monitoring alone would not), so both need to exist as genuinely separate checks, not one standing in for the other.
Walk through the BI platforms you've actually worked with in production. For at least two of them, describe what you used each for, roughly what scale of data and users it handled, and one real limitation you ran into that you had to design around, not just a feature you disliked.
Sample Answer
Direct answer
Comparing BI (business intelligence) platforms honestly means describing real production use, not marketing feature lists: what you actually used a given tool for, roughly what scale it handled, and at least one genuine limitation you had to design around, since every mainstream BI platform can technically build a dashboard, the interesting differences show up under real production constraints.
Structured elaboration
What to cover for a platform you've genuinely used: typical use cases (was it the tool for executive-facing polished dashboards, or the tool analysts used for fast ad-hoc exploration, since many organizations run more than one BI tool for different jobs rather than one tool for everything), data sources and volume it handled (did it connect live to a warehouse or rely on extracts, and at what data scale did it stay performant versus start to strain), scheduling and refresh capabilities actually relied on (not just what's technically supported, but what you actually configured and how reliable it was in practice), and one real limitation, something specific enough to show you actually hit it in production, not a generic complaint.
What makes this a strong comparative answer versus a shallow one: naming the SPECIFIC limitation and what you did about it (worked around it, escalated to the vendor, chose a different tool for that specific need) rather than a vague "it has some limitations," and being honest that different tools are genuinely better suited to different jobs rather than claiming one tool is simply superior across the board, which reads as either inexperience or marketing-speak rather than real production judgment.
Worked example
A candidate describes two tools from real experience: one used primarily for governed, executive-facing dashboards, where its strength was a centralized semantic layer that kept metric definitions consistent across dozens of dashboards, but a real limitation was that building a genuinely custom, complex visualization outside its standard chart library required awkward workarounds, which pushed the team toward a second tool for that specific need. The second tool was used by analysts for fast ad-hoc exploration against a live warehouse connection, valued for its flexibility and quick iteration, but a real limitation surfaced at scale: with enough concurrent users running unbounded ad-hoc queries, warehouse contention became a genuine operational problem (connecting to the workload-isolation discipline) that required deliberate query-cost guardrails to manage, a limitation that wasn't obvious from initial evaluation and only showed up once usage grew past a certain point.
Trade-offs and pitfalls
A common weak answer here lists every feature a tool has without ever describing how it was actually used or what broke down in practice, which signals the candidate evaluated the tool's marketing material rather than operated it in production; the specific limitation, and especially what was actually done in response to it, is what demonstrates real hands-on judgment. It's also worth being careful not to overcorrect into pure tool-bashing: the goal is an honest, balanced account (what worked well AND what didn't), since a purely negative answer about every tool you've used raises its own question about whether the limitation was really the tool's fault or a mismatch in how it was being used.
For a table that will primarily be queried by BI tools and ad-hoc analysts, would you model it as one big denormalized table or as a proper star schema with separate fact and dimension tables? Walk through what actually drives that decision, and describe a middle-ground approach that gets you fast ad-hoc queries without giving up maintainability.
Sample Answer
Direct answer
For a table that's mainly going to be queried by BI (business intelligence) tools and ad-hoc analysts, the choice between one big denormalized table and a proper star schema (separate fact and dimension tables) mostly comes down to query patterns and how fast the model needs to change: a denormalized wide table is simpler and often faster for a small number of well-known, repeated queries, while a star schema stays maintainable and flexible as the number of distinct questions being asked grows.
Structured elaboration
What actually drives the decision:
- Query patterns: if analysts mostly run the same handful of known queries against the table, a denormalized table optimized for exactly those queries can be genuinely faster (no joins at query time) and simpler for a BI tool to point at directly. If the queries are unpredictable and ad-hoc (analysts constantly slicing by new combinations of attributes), a star schema's separated dimensions are more flexible because you're not locked into whatever columns got baked into the wide table.
- Update frequency: a wide table that duplicates dimension attributes (customer name, region, and so on) across every fact row means updating a dimension attribute (a customer's region changed) requires rewriting potentially millions of fact rows; a star schema updates the dimension table once.
- Storage cost: a wide table with duplicated dimension data costs more storage than a normalized star schema, though at most organizations' scale this matters less than the maintainability trade-off.
- Concurrency and BI-tool fit: many BI tools are actually optimized to generate efficient join SQL against a star schema (that's the modeling pattern the semantic layer usually expects), so fighting that with a pre-flattened table can sometimes cost you tooling features (drill-down, automatic aggregation) rather than gain you performance.
A hybrid approach that gets both: build the proper star schema as the source of truth (maintainable, correctly normalized, easy to update), and then materialize a denormalized, pre-joined table (or several, one per common query pattern) FROM the star schema specifically for the queries that need to be fast, refreshed on a schedule or incrementally. This way the flexibility and maintainability live in the star schema, and the raw query speed for known, high-frequency patterns lives in the derived flat table, and you're not choosing one trade-off for the entire workload.
Worked example
A BI table serving enterprise product analytics needs to support two very different needs: a small number of executive dashboards asking the same five questions every day (fast, predictable), and a data-science team running highly varied ad-hoc exploration (unpredictable, wide-ranging). The star schema stays the canonical model: fact_events joined to dim_user, dim_product, dim_date. For the executive dashboards' five known queries, a nightly job materializes a flat, pre-joined, pre-aggregated table with exactly the columns those five queries need, so the dashboard queries a single table with no joins and returns in under a second. The data-science team still queries the star schema directly for their unpredictable exploration, accepting the join cost in exchange for flexibility, since materializing every possible flat view they might want isn't feasible.
Trade-offs and pitfalls
The hybrid approach's real cost is that you're now maintaining two things instead of one: the star schema and however many derived flat tables serve specific query patterns, and those flat tables need their own refresh strategy and can drift out of sync with the star schema if the refresh job fails silently. It's also easy to over-build flat tables for query patterns that turn out to be one-off requests rather than genuinely repeated needs, which just adds maintenance burden without the performance payoff; the discipline that prevents this is only materializing a flat table once a query pattern has proven to be genuinely frequent, not preemptively for every dashboard request that comes in.
You want to move a set of dashboards to a more frequent refresh cadence than they run at today, without breaking anything or introducing new errors. Describe how you would plan and roll that change out, and separately, describe how you would handle the conversation when a stakeholder wants a cadence increase but you believe the cost or reliability trade-off doesn't justify it yet.
Sample Answer
Direct answer
Moving a set of dashboards to a faster refresh cadence, or negotiating a cadence with a stakeholder, is fundamentally a risk-management and trade-off conversation, not just a technical change: you need automation and monitoring strong enough to support the new cadence safely, a way to quantify what the change actually costs, and a phased rollout so a mistake shows up small before it shows up everywhere.
Structured elaboration
Planning a cadence increase (e.g. monthly to weekly): automation has to absorb work a person was previously doing manually at the slower cadence (if someone was manually spot-checking numbers once a month, that check either needs to be automated or the team accepts less manual scrutiny per report at the faster pace, and that trade-off should be explicit, not accidental). Incremental or sampling-based computation may be needed if recomputing the full historical dataset on every refresh doesn't scale to the new frequency. Monitoring and alerting need to be in place BEFORE the cadence increases, not after, since a faster cadence means less time to notice a problem before the next cycle overwrites or compounds it. Staffing and on-call needs to account for a genuinely higher volume of refresh cycles that could fail. A phased rollout, moving a small subset of reports first, watching error rates, then expanding, catches a systemic problem while it's still small.
Negotiating cadence with a stakeholder who wants it faster: quantify the actual cost (additional infrastructure spend, additional operational risk, additional engineering time) against the actual value (what decision genuinely gets made differently, sooner). This is the same underlying question as choosing an initial cadence: does the decision cadence actually justify the data cadence, just now applied to a negotiation instead of a greenfield design.
Piloting a new cadence before a broad rollout: introduce it to a small group first, recruit willing early participants rather than mandating it broadly, measure early signals (are they actually using the faster data, is anything breaking), collect feedback, and use that evidence, not a guess, to decide whether and how to roll it out further.
Worked example
A team wants to move core operational dashboards from monthly to weekly refresh. The plan: first, automate the manual spot-check a data analyst currently does once a month (previously a person eyeballed the numbers before publishing; at weekly cadence that's not sustainable, so an automated data-quality check replaces it, with the trade-off explicitly communicated: less human judgment per cycle, more consistent automated coverage). Monitoring and alerting for the new weekly job are built and tested before the cadence switch, not after. The rollout starts with three of twelve dashboards for one month, watching whether the automated checks catch real issues and whether the team's on-call capacity holds up; only after that pilot succeeds does it expand to the remaining nine. Separately, when a different stakeholder requests daily refresh on a report that's currently weekly, the negotiation starts with 'what would you do differently with this a day sooner instead of a week,' and the honest answer, 'not much, I just want it fresher,' leads to keeping the weekly cadence rather than absorbing the cost of a change that wouldn't change any actual decision.
Trade-offs and pitfalls
The most common mistake in a cadence increase is treating it as purely an automation/infrastructure project and skipping the honest 'what manual scrutiny are we giving up' conversation, which surfaces later as a wrong number that would have been caught by the person who used to manually check it once a month; naming that trade-off explicitly up front, rather than discovering it after an incident, is what separates a well-planned cadence change from a risky one. In negotiation, the trap runs the other way: it's easy to say yes to a cadence increase just to make a vocal stakeholder happy, without doing the cost/value quantification, and end up absorbing real ongoing infrastructure and operational cost for a change that doesn't actually improve any decision.
Unlock Full Question Bank
Get access to all Business Intelligence, Reporting, and Dashboards interview questions and detailed answers.
Sign in to ContinueJoin thousands of developers preparing for their dream job.