Webbo3 Power BI · Cohort 1 · Pod Project · Released Day 14 · Presented Day 16
Pod Project: Jade Hotels & Resorts
Five hotels, six booking channels, a year of bookings, and a client with two questions your pod answers together, in front of her, on Day 16.
By the end of today you can
- Run the whole pipeline as a team: connect, clean, append, merge, model, measure, visualise
- Answer the client's festive season question with fair comparisons
- Break down what each booking channel really costs in commission
- Split the work by seat so every member owns a part
- Prepare a ten-minute presentation for Day 16
The Solo Project proved you can build alone. This one proves you can build with other people, which is how every real report is made: one person cleans, another models, another measures, and somebody has to stand up and explain it.
The Brief
Mrs Folake Adeyemi owns Jade Hotels & Resorts: three city hotels and two resorts. She has two questions. First: "Did the festive season actually make us more money, or does it just feel busy?" Second: "The booking sites bring guests, but how much of our money do they keep in commission, and which channel is worth it?" Build one Power BI report that answers both, and present it to her.
Your tutor plays Mrs Adeyemi on Day 16. She is friendly, busy, and not a data person: she wants answers in naira and in plain words.
The Dataset
Jade Hotels & Resorts
Download all as one zip file (jade-hotels.zip)
- Bookings_Jul-Dec_2024.csv : 1,161 bookings
- Bookings_Jan-Jun_2025.csv : 1,091 bookings
- Hotels.csv : the five hotels: city, type and number of rooms
- Channels.csv : the six booking channels and the commission rate on each
| Column | What it holds |
|---|---|
| BookingID | The booking's unique reference |
| BookingDate | When the guest booked, as text day/month/year |
| HotelID | Which hotel. Matches Hotels[HotelID] |
| ChannelID | How they booked. Matches Channels[ChannelID] |
| GuestType | Leisure or Business |
| Room Type | Standard, Deluxe or Suite |
| CheckIn, CheckOut | Arrival and departure, as text day/month/year |
| Nightly Rate | The price per night, in naira |
| Status | Confirmed, Cancelled or No Show. Only Confirmed bookings earned money |
What Is Wrong With It
| Problem | Hint |
|---|---|
| Two half-year files | Append into one query called Bookings |
| Dates are text, day first | Change Type, Using Locale, Date, English (United Kingdom) (Day 2) |
| Room Type in 12 spellings | Trim, then Capitalize Each Word |
| Status in 9 spellings: CONFIRMED, Canceled, Cancelled, Confirmed, No Show, No-Show, cancelled, confirmed, no show | Trim, Capitalize Each Word, then Replace Values: Canceled to Cancelled, No-Show to No Show |
| No number of nights | Add a custom column, Nights (below) |
Nights is the number of days between check-in and check-out. Power Query works it out with a button: select the later date first, then the earlier one, and subtract.
Click path
Nights must be positive. If every value comes out negative, the two columns were subtracted the other way round: delete the step, select them in the opposite order, and do it again.
Who Does What: Roles by Seat
Your pod has ten seats. Two people share each role, so nobody is ever the only one who knows a part. Everybody builds in their own .pbix; the pair leads merge the finished steps into the pod file.
| Seats | Role | Owns |
|---|---|---|
| 1 and 2 | Data | Connect, clean, append, Nights, merges by ID |
| 3 and 4 | Model | Date table with its Festive column, relationships, star shape, the Model view screenshot |
| 5 and 6 | Measures | Every measure below, named, formatted, in _Measures, checked against the self-check |
| 7 and 8 | Report | The three report pages: layout, visuals, slicers, titles |
| 9 and 10 | Story | The findings, the slides or talking points, and leading the Day 16 presentation |
On Day 16 every member speaks for at least thirty seconds about the part they built. Mrs Adeyemi may ask any of you any question, so learn what your pod-mates did.
What Your Pod Must Build
| # | Task | Done when |
|---|---|---|
| 1 | Append and clean both files as above | Bookings has 2,252 rows; Status has 3 values |
| 2 | Add the Nights column (above) | Nights on every row, as a Whole Number |
| 3 | Merge Hotels and Channels into Bookings by ID only | No blank HotelName or Channel |
| 4 | Date table for 1 July 2024 to 30 June 2025, marked, with a Festive column (below) | 365 rows, marked |
| 5 | Relate Bookings[CheckIn] to Date[Date], and Bookings to Hotels and Channels | Three Many-to-one, Single relationships |
| 6 | The measures below | Every card matches the self-check |
| 7 | Page 1 Overview, Page 2 Festive Season, Page 3 Channels | Three tidy pages |
| 8 | A ten-minute presentation | Rehearsed once, timed |
The relationship is on CheckIn: a booking belongs to the day the guest arrived. That is why the Date table stops at 30 June 2025, even though a few June guests leave in July.
The festive season is a property of the day, so it lives on the Date table as a calculated column. Every page then splits by 'Date'[Festive], and a measure can count the days in each season with COUNTROWS ( 'Date' ).
&& means AND and || means OR, the same as the words in Power Query.
The Measures
| Measure | What it answers | Hint |
|---|---|---|
| Bookings | How many bookings of any status? | COUNTROWS |
| Room Nights | How many nights did guests actually stay? | CALCULATE, SUM of Nights, Confirmed only |
| Room Revenue | How much did the rooms earn? | CALCULATE and SUMX of Nights times Nightly Rate, Confirmed only |
| Commission | How much did the channels keep? | SUMX over Confirmed bookings of the revenue times RELATED ( Channels[CommissionRate] ) |
| Net Revenue | What did Jade keep? | Room Revenue minus Commission |
| Cancellation Rate | What share of bookings were cancelled? | CALCULATE, COUNTROWS, DIVIDE |
| Average Nightly Rate | What did a night cost on average? | DIVIDE Room Revenue by Room Nights |
Question 1: Did the Festive Season Pay?
The trap is comparing totals. The festive season is 24 days and the rest of the year is 341 days, so of course the rest of the year earns more in total. A fair comparison divides by the number of days, or looks at the price per night.
"Revenue per Day" is DIVIDE ( [Room Revenue], COUNTROWS ( 'Date' ) ): the days in the current filter come from the Date table, so with Festive on the rows it divides by the days of each season. Your Story pair decides what these numbers mean for Mrs Adeyemi.
Question 2: What Do the Channels Really Cost?
A channel with a high rate is not automatically bad: it may bring guests nobody else would. The fair questions are how much revenue each channel brings, how much it keeps, and whether the direct channels (Walk-in and the Jade Website, which cost nothing) could grow.
Day 16: The Presentation
- Ten minutes, then five minutes of questions from Mrs Adeyemi.
- Open the report live in Power BI Desktop. Slides are optional; the report is not.
- Answer her two questions in the first two minutes, then show how you know.
- Every member speaks. Day 16's lesson has the full structure.
What to Hand In, by the Start of Day 16
- The pod's .pbix (PodName_JadeHotels.pbix) as a Google Drive link, "Anyone with the link can view".
- A Model view screenshot and a screenshot of each of the three pages.
- A one-page Google Doc: who sat in which seat and did what, and the two answers in plain words.
How It Is Marked
| Criterion | Marks | What the tutor checks |
|---|---|---|
| Pipeline | 20 | Appended, cleaned, Nights and Festive right, merges by ID |
| Model | 15 | Date table marked, three relationships, star shape |
| Measures | 20 | All seven correct and formatted; the self-check matches |
| Festive analysis | 15 | A fair comparison (per day or per night), by hotel type, clearly shown |
| Channel analysis | 15 | Commission and net revenue by channel, with a recommendation |
| Presentation | 15 | Answers first, every member speaks, questions handled from the report |
The pod receives one mark. Your tutor may move an individual's mark up or down if the roles document and the presentation show they did much more or much less than their seat.
Questions You Will Have
Does a cancelled booking count in Room Revenue?
No. Only Confirmed bookings earned money. Cancelled and No Show bookings still count in Bookings and in the Cancellation Rate.
Should the festive season follow the booking date or the check-in date?
The check-in date. Mrs Adeyemi means guests who stayed over the holidays, not guests who booked then.
Two of us want to build the same thing. What now?
Go back to the seat table. The pair that owns it decides, and the other pair checks it.
Tick Before You Move On
- ☐ Bookings has 2,252 rows and Status has three values
- ☐ Nights is on every booking; Festive is on the Date table; merges are by ID
- ☐ The overview cards match the self-check
- ☐ The festive comparison is per day or per night, not totals
- ☐ Every member knows what they will say on Day 16
Quick Recap
One team, one report, two client questions. Clean, add Nights, merge by ID, label festive days on the Date table, measure. Compare seasons fairly: per day or per night, not totals. Commission is revenue times the channel rate; net is what Jade keeps. Ten minutes on Day 16, answers first, everyone speaks.
Final Scenario
On Day 16 Mrs Adeyemi sits down and asks, "So, did Christmas pay?"
Your Story lead answers in one sentence with a naira figure per day, and points at the page. Your Data lead explains how a festive booking was defined. Your Measures lead shows the commission table. She leaves knowing which booking site to renegotiate.
That is a team delivering, not a group of people who happened to share a file.
Next, Day 15: slicers, drill-through and dashboard storytelling, exactly what your Report and Story pairs need.