Data Analyst / Engineer · Projects
Project 3: A dashboard people can trust
Marking guide version 1 · Lessons: DT9 lessons 1–5, DT6 lesson 3, DT10 lesson 4
The problem and who it's for
SabziSathi's dashboard announces "SabziSathi is growing fast!". It reads the raw files, so its revenue of ₹23,66,966 includes cancelled orders, repeats and staff tests; its bar chart starts near the smallest bar, so Hadapsar looks seven times Baner; it lists the top customers with their phone numbers; it shows every count of customers moving, down to 1; and it doesn't say how old its data is. The three store managers read it on their phones each morning and aren't data people.
Scope
- Build the page from the marts only.
- Show net revenue, delivered orders and average order value, each defined in plain words on the page.
- Draw bars from zero and a daily line chart, each with a title and a table of its numbers.
- Remove personal data, hide counts below 5 and show "Data up to" with the newest order date.
- Test it with someone who isn't technical.
Not included
- A BI tool (the capstone's design notes cover the choice).
- Sign-in or sharing controls for the page.
- Interactive filters (optional extra).
Before you start
- Core: Module 16 (Responsive Websites), Module 79 (Privacy and Data Protection).
- Path: DT9 complete, and Projects 1 and 2 finished (the dashboard reads the marts).
pytest tests/test_dashboard.pyrunning (all 8 of its tests fail at first).
Starter files
-
sabzisathi/dashboard/build.py: reads the raw files, gross revenue, a truncated axis, a top-customers table with phone numbers and every count shown. -
sabzisathi/tests/test_dashboard.py: the 8 acceptance tests for this project.
Download everything at once: starter/data-starter.zip.
Milestones
- Write the dashboard brief: readers, decisions, frequency, three metrics with definitions.
- Switch the page to the marts and fix the headline numbers (tests 1 and 2).
- Add the definitions (test 3).
- Redraw the charts with zero-based bars, titles and tables (tests 4 and 8).
- Remove personal data, hide small counts and add the freshness line (tests 5 to 7).
- Run all 8 tests twice in a row, then test the page with a reader.
Expected outputs
- 8 of 8 dashboard tests passing, twice in a row.
- The finished
dashboard/out/index.html, readable on a phone. - Your reader's answers to three questions from the page.
Acceptance tests
| # | Input | Expected result |
|---|---|---|
| 1 | pytest tests/test_dashboard.py |
8 of 8 pass, twice in a row |
| 2 | A copy of the warehouse with only the marts | The page still builds (test 1) |
| 3 | The headline numbers | 196,576,400 paise net revenue, 2,918 delivered orders, 67,367 paise average order value (test 2) |
| 4 | The store bar chart | Bar heights in proportion to each store's revenue, from zero (test 4) |
| 5 | The customers-moved-in table | No count below 5 shown; "fewer than 5" instead (test 5) |
| 6 | The whole page | No name, phone or email from the customer file; "Data up to 30 Oct 2026" (tests 6 and 7) |
Failure and recovery exercises
- Add a total row to the moves table and work out a hidden count from it. Explain why that's a privacy problem, then remove the total.
- Change the bar chart's axis to start at 90% of the smallest value and run test 4. Describe what readers would believe, then restore it.
- Make the build fail on purpose (for example by renaming a mart) and decide what the page should show the next morning. Write it as a runbook line.
Evidence to submit
- The deliverable link to your repository or folder with the dashboard changes.
- The output of
pytest tests/test_dashboard.pyshowing 8 passed, pasted into test evidence. - The dashboard page (or a screenshot) and your reader's answers.
- Your explanation: what each headline number means, why the bars start at zero, and why some counts are hidden.
Marking guide and self-check
Pass rule: every Safety-critical (S) and Mandatory (M) item must be met. A single unmet safety item means the project is not complete, whatever else is done. Quality items are for your own improvement.
Your answers are saved in this browser on this device. Self-checked means you checked your own work against this guide; it is not a reviewer's approval. Never paste passwords, keys, tokens or real customer data here.
