Knowledge / Data Science / Data storytelling and dashboard design

Data storytelling and dashboard design

Data Science (B.Sc) · Programming and data · free study notes for exams, placements and interviews

In short

Data storytelling is the practice of turning analysis into a clear narrative — data, visuals and words together — so that a decision-maker acts on it; dashboard design is the discipline of laying out that information on a screen that is read repeatedly without explanation. A technically correct model is worthless if the audience cannot see what it means, so this is the "last mile" of every data science project. Indian university B.Sc Data Science syllabi examine it under visualisation/BI papers (design principles, dashboard types, KPI selection, critiques of bad charts), and placement rounds at TCS, Infosys, Wipro, Accenture, Deloitte, EXL, WNS, Flipkart, Zomato and bank analytics teams routinely ask candidates to critique a dashboard or explain how they would present a finding to a business head. It is the differentiating skill in analyst, BI developer and consultant roles because it is the part no library automates.

Explained

What data storytelling is

Narrative structure and audience

Dashboard types and KPI design

Design principles and layout

Build process, interactivity and performance

  1. Requirement gathering: decisions to be supported, audience, questions the dashboard must answer, refresh frequency, access rights.
  2. Metric dictionary / data definitions: agree the formula for every KPI in writing (what counts as an "active customer"?) before building — prevents the classic reconciliation fight.
  3. Wireframe on paper (low-fidelity sketch), get sign-off, then build. Never build first.
  4. Data model: star schema — fact table (transactions) plus dimension tables (date, customer, product, geography); a conformed date dimension is mandatory for time intelligence.
  5. Build, then validate every number against the source system; publish only after UAT by a business user.
  6. Iterate: instrument usage (who opens it, which filters), retire unused tiles.
  7. Interactivity: filters/slicers, cross-filtering (click a bar to filter the page), drill-down hierarchies (India → state → city → store), tooltips for detail-on-demand, bookmarks, parameters, what-if sliders. Interactivity replaces clutter.
  8. Performance: aggregate in the warehouse, not in the visual layer; import/extract mode beats live query for large data; limit visuals per page (each is a query); avoid row-level calculations over millions of rows; use incremental refresh.
  9. Governance and security: row-level security so a Gujarat manager sees only Gujarat; single source of truth; version control; data-as-of timestamp visible on every page.
  10. Indian legal/compliance context: personal data on dashboards is governed by the Digital Personal Data Protection Act, 2023 (DPDP Act) — minimise personal data, aggregate or mask, restrict access by purpose; the Act's rules were notified in 2025 with phased implementation, so check the current compliance deadlines. RBI-regulated entities additionally follow RBI's data localisation and IT governance directions; listed-company MIS follows SEBI disclosure norms.
  11. Tooling: Power BI and Tableau dominate Indian enterprise BI; Excel dashboards remain the most widely used in practice; Looker Studio for web/marketing; Python/Streamlit, Dash and R Shiny for custom analytics apps; Metabase/Superset as open-source options; Grafana for infrastructure monitoring.

Evaluating and critiquing a dashboard

Key points

Formulas and examples

Data-ink ratio = (ink used to display data) ÷ (total ink used in the graphic). Dimensionless, target → 1.
Lie factor = (size of effect shown in graphic) ÷ (size of effect in the data). Dimensionless, target = 1.
Percentage change = (Current − Previous) ÷ Previous × 100 (%). Use for MoM, YoY, vs. target.
Variance to target = (Actual − Target) ÷ Target × 100 (%). Negative = shortfall.
CAGR = (End ÷ Start)1/n − 1, n = number of years (decimal, ×100 for %).
Achievement (%) = Actual ÷ Target × 100.
Contribution (%) = Segment value ÷ Total value × 100.
Index to base = Value in period t ÷ Value in base period × 100 (base = 100).
Data density = number of data values plotted ÷ area of the data graphic (values per cm²).
Pareto cumulative % = (cumulative value up to item i ÷ grand total) × 100; the 80/20 cut-off.

Example 1 — KPI tile arithmetic for an executive dashboard. A retail chain's Q2 FY27 revenue is ₹18.4 crore; target ₹20 crore; same quarter last year ₹16 crore.

Example 2 — Lie factor from a truncated axis. Monthly users rise from 50 lakh to 55 lakh (a 10% rise). A chart starts its y-axis at 48 lakh, so the plotted bar heights are (50 − 48) = 2 and (55 − 48) = 7 units.

Example 3 — CAGR for a trend headline. A fintech's annual disbursement grows ₹120 crore (FY22) → ₹310 crore (FY26), n = 4 years.

Example 4 — Pareto for an operational dashboard. Complaint volumes for a month: Billing 480, Delivery 300, App errors 140, Packaging 50, Other 30. Total = 1,000.

CategoryCount%Cumulative %
Billing48048.048.0
Delivery30030.078.0
App errors14014.092.0
Packaging505.097.0
Other303.0100.0

Example 5 — Dashboard choice comparison.

AspectStrategicOperationalAnalytical
AudienceCXO, boardSupervisors, shift leadsAnalysts, data teams
RefreshMonthly/quarterlyReal-time to hourlyDaily; on-demand
GranularityAggregated, trends vs. targetLive transactions, alertsRow-level, drillable
InteractivityMinimalAlerts, simple filtersHeavy slice-and-dice
Typical visualScorecard + sparklinesKPI tiles + status tableScatter, cohort, small multiples
Indian exampleBank board MISMetro OCC / BPO wallboardE-commerce pricing analysis

Code — a small Pareto + annotated bar in Python.

import pandas as pd, matplotlib.pyplot as plt

df = pd.DataFrame({"cat": ["Billing","Delivery","App errors","Packaging","Other"],
                   "n":   [480, 300, 140, 50, 30]}).sort_values("n", ascending=False)
df["cum_pct"] = df["n"].cumsum() / df["n"].sum() * 100

fig, ax = plt.subplots(figsize=(7, 4))
colors = ["#c0392b" if c <= 78 else "#bdbdbd" for c in df["cum_pct"]]   # accent the vital few
ax.bar(df["cat"], df["n"], color=colors)
ax.set_title("Billing and Delivery cause 78% of complaints", loc="left", fontsize=13)
for s in ("top", "right"):                 # raise the data-ink ratio
    ax.spines[s].set_visible(False)
ax.set_ylabel("Complaints"); ax.set_ylim(0, 520)
plt.tight_layout(); plt.show()

Where it is used

Interview questions

Common mistakes

Related topics

Data visualisation · Business intelligence: Power BI and Tableau · Excel formulas: lookup, logic and pivot tables · Python for data analysis: NumPy and pandas · SQL queries and joins · Data cleaning and feature engineering

Open in the Knowledge reader →Find jobs →