- Sources
- Clean
- Model
- Metrics
- Dashboard
| id | Guest | Room | Check-in | N | Amount |
|---|---|---|---|---|---|
| s1 | Meera S | Deodar | 2/11/2026 | 2 | ₹7,600 |
| s2 | Arjun | pine␣ | 3 Nov | 3 | 10200 |
| s3 | Fatima | OAK | 2026-11-04 | 2 | ₹ 6,400 |
| s4 | Ravi K | Deodar | 05/11/2026 | 1 | 3,800 |
| s5 | Neha | Pine | 7 Nov | 2 | 7,000 |
| s6 | · | · | · | · | · |
| id | Guest | Room | Check-in | N | Amount |
|---|---|---|---|---|---|
| w1 | Ravi Kumar | Deodar Room | 2026-11-05 | 1 | 3800 |
| w2 | Tom B | Oak Room | 2026-11-07 | 2 | 6400 |
| w3 | Ana | Deodar Room | 2026-11-07 | 2 | 7600 |
01/ 09
Where the numbers live today
Meet an example homestay with three rooms. Bookings that come by phone are typed into a sheet. Bookings from a booking website arrive as an export file.
The owner's question is simple: how did we do this week? Both files hold part of the answer.
02/ 09
Why the totals never agree
Look closer. The same room is spelled six ways. One date could be 2 November or 11 February. Some amounts carry a rupee sign and commas. One booking sits in both files, and one row is empty.
Add it all up as it is and you get a number. It is wrong, and nothing on the screen says so.
03/ 09
Step 1: collect, and change nothing
A pipeline starts by copying each source on a schedule, exactly as it came. Nothing is fixed at this stage.
Keeping the raw copy means any number on the dashboard can be traced back to the cell it came from, and a fix can be re-run on history.
04/ 09
Step 2: clean, with rules written down once
Cleaning is a short list of rules, each one small and readable. The point is that they are written down, run the same way every time, and set aside what they can't read instead of guessing.
Switch each rule off on the stage and watch what slips through.
05/ 09
Step 3: model, one row per room per night
Bookings are awkward to count: one row can cover three nights. So the model breaks each booking into the thing the business actually sells, a room for a night. Data people call this choosing the grain.
Now the week is a grid: three rooms by seven nights. A room sold twice in one night is impossible, so if the grid shows one, the data is wrong.
06/ 09
Step 4: define each metric once
Hotels have standard measures. Occupancy is room-nights sold over room-nights available. ADR, the average daily rate, is room revenue over room-nights sold. RevPAR is room revenue over room-nights available, which is the same as ADR times occupancy.
Write each definition in one place, and every chart and report uses it. Two people can no longer get two answers.
07/ 09
Step 5: the dashboard
Only now does the dashboard appear. It is the thinnest layer: it reads the metrics and draws them.
Most dashboards that people don't trust are fine as drawings. The trouble is upstream, in steps 1 to 4.
08/ 09
Change a number upstream
Edit a cell in the raw sheet: change Ravi's amount, give a booking another night, misspell a room. The change runs through every step, and the strip on the stage shows what it did at each one.
In a real pipeline this happens on every refresh, so the dashboard is only as live as its sources.
09/ 09
Keep it honest
A good pipeline tests itself on every run: rows in equal rows out plus rows set aside, no room sold twice, every amount read. When a test fails, a person hears about it before the owner reads a wrong number.
Switch a rule off and watch the checks catch it. Each refresh can also leave a receipt, the same idea as explainer 04.