Courses Learn Blog Contact
Get Started →
Lesson 20

Pod Project: Jade Hotels & Resorts

Released Day 14, presented Day 16. The full pipeline, a festive season analysis and a channel commission breakdown.

Webbo3 Power BI Cohort 1 11 min read Free

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

Pod Project · Team · Released Day 14 · Presented Day 16

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)

What we are looking atWe want to see the first rows of the July to December file exactly as it arrives.
Bookings_Jul-Dec_2024.csv, as it arrives
ABCBookingIDABCBookingDateABCHotelIDABCChannelIDABCGuestTypeABCRoom TypeABCCheckInABCCheckOutABCNightly RateABCStatus
1JH24-0000131/05/2024H1C6LeisureSTANDARD01/07/202406/07/202495000confirmed
2JH24-0000218/06/2024H1C3LeisureSTANDARD01/07/202404/07/202495000confirmed
3JH24-0000309/06/2024H2C6Businesssuite01/07/202405/07/2024240000Confirmed
4JH24-0000411/06/2024H3C3BusinessDeluxe01/07/202402/07/2024105000confirmed
5JH24-0000530/06/2024H4C2Leisure·Standard01/07/202406/07/202480000Confirmed
6JH24-0000625/05/2024H1C3BusinessDeluxe02/07/202405/07/2024145000Confirmed
7JH24-0000723/05/2024H1C6Businessstandard02/07/202404/07/202495000confirmed
8JH24-0000824/06/2024H2C3BusinessStandard02/07/202409/07/202485000No-Show
10 COLUMNS, 1,161 ROWS · first 8 shown
What we are looking atWe want to see Hotels.csv, one of the two lookup tables.
Hotels.csv
ABCHotelIDABCHotelNameABCCityABCHotelTypeABCRooms
1H1Jade Victoria IslandLagosCity Hotel120
2H2Jade MaitamaAbujaCity Hotel95
3H3Jade Port HarcourtPort HarcourtCity Hotel70
4H4Jade Tinapa ResortCalabarResort60
5H5Jade Obudu Mountain ResortObuduResort45
5 COLUMNS, 5 ROWS
What we are looking atWe want to see Channels.csv, one of the two lookup tables.
Channels.csv
ABCChannelIDABCChannelABCCommissionRate
1C1Walk-in0.0
2C2Jade Website0.0
3C3Booking.com0.15
4C4Expedia0.18
5C5Travel Agent0.1
6C6Corporate Contract0.05
3 COLUMNS, 6 ROWS
ColumnWhat it holds
BookingIDThe booking's unique reference
BookingDateWhen the guest booked, as text day/month/year
HotelIDWhich hotel. Matches Hotels[HotelID]
ChannelIDHow they booked. Matches Channels[ChannelID]
GuestTypeLeisure or Business
Room TypeStandard, Deluxe or Suite
CheckIn, CheckOutArrival and departure, as text day/month/year
Nightly RateThe price per night, in naira
StatusConfirmed, Cancelled or No Show. Only Confirmed bookings earned money

What Is Wrong With It

ProblemHint
Two half-year filesAppend into one query called Bookings
Dates are text, day firstChange Type, Using Locale, Date, English (United Kingdom) (Day 2)
Room Type in 12 spellingsTrim, then Capitalize Each Word
Status in 9 spellings: CONFIRMED, Canceled, Cancelled, Confirmed, No Show, No-Show, cancelled, confirmed, no showTrim, Capitalize Each Word, then Replace Values: Canceled to Cancelled, No-Show to No Show
No number of nightsAdd 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

1.Select CheckOut › Ctrl+click CheckIn › Add Column › Date › Subtract Days
2.Rename the new column Nights › Data Type: Whole Number
What we are checkingWe want a Nights column, typed as Whole Number, worked out for every booking.
Power Query preview: Bookings
ABCBookingIDDATECheckInDATECheckOut1²3Nights
1JH24-0000101/07/202406/07/20245
2JH24-0000201/07/202404/07/20243
3JH24-0000301/07/202405/07/20244
4JH24-0000401/07/202402/07/20241
5JH24-0000501/07/202406/07/20245
4 COLUMNS, 2,252 ROWS · first 5 shown
Check the Sign

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.

SeatsRoleOwns
1 and 2DataConnect, clean, append, Nights, merges by ID
3 and 4ModelDate table with its Festive column, relationships, star shape, the Model view screenshot
5 and 6MeasuresEvery measure below, named, formatted, in _Measures, checked against the self-check
7 and 8ReportThe three report pages: layout, visuals, slicers, titles
9 and 10StoryThe findings, the slides or talking points, and leading the Day 16 presentation
Everyone Presents Something

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

#TaskDone when
1Append and clean both files as aboveBookings has 2,252 rows; Status has 3 values
2Add the Nights column (above)Nights on every row, as a Whole Number
3Merge Hotels and Channels into Bookings by ID onlyNo blank HotelName or Channel
4Date table for 1 July 2024 to 30 June 2025, marked, with a Festive column (below)365 rows, marked
5Relate Bookings[CheckIn] to Date[Date], and Bookings to Hotels and ChannelsThree Many-to-one, Single relationships
6The measures belowEvery card matches the self-check
7Page 1 Overview, Page 2 Festive Season, Page 3 ChannelsThree tidy pages
8A ten-minute presentationRehearsed 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' ).

What this code doesWe want every day of the Date table labelled Festive or Rest of year, so any measure can be split by season.
New column
1
2
3
4
5
6
7
8
// Festive season as the client defines it: 15 December to 7 January
Festive =
IF (
    ( MONTH ( 'Date'[Date] ) = 12 && DAY ( 'Date'[Date] ) >= 15 )
        || ( MONTH ( 'Date'[Date] ) = 1 && DAY ( 'Date'[Date] ) <= 7 ),
    "Festive",
    "Rest of year"
)
Count of rows in Date, by Festive
24
Festive days
341
Rest of year days

&& means AND and || means OR, the same as the words in Power Query.

The Measures

MeasureWhat it answersHint
BookingsHow many bookings of any status?COUNTROWS
Room NightsHow many nights did guests actually stay?CALCULATE, SUM of Nights, Confirmed only
Room RevenueHow much did the rooms earn?CALCULATE and SUMX of Nights times Nightly Rate, Confirmed only
CommissionHow much did the channels keep?SUMX over Confirmed bookings of the revenue times RELATED ( Channels[CommissionRate] )
Net RevenueWhat did Jade keep?Room Revenue minus Commission
Cancellation RateWhat share of bookings were cancelled?CALCULATE, COUNTROWS, DIVIDE
Average Nightly RateWhat did a night cost on average?DIVIDE Room Revenue by Room Nights
What we are checkingWe want the self-check: the overview cards with no filters. Your Measures pair must match every one.
Self-check: overview cards
2,252
Bookings
5,427
Room Nights
₦647.0M
Room Revenue
₦646,956,000
₦48.9M
Commission
₦48,922,660
₦598.0M
Net Revenue
₦598,033,340
11.5%
Cancellation Rate
₦119,211
Average Nightly Rate

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.

What we are checkingWe want the self-check for the festive page: revenue in total, per day of the season, and per night sold.
Self-check: by season
SeasonDaysRoom RevenueRevenue per DayAverage Nightly Rate
Festive24₦77,551,000₦3,231,292₦137,991
Rest of year341₦569,405,000₦1,669,809₦117,041
Total365₦646,956,000₦1,772,482₦119,211
What we are checkingWe want the same per-day comparison split by hotel type, because the client runs two kinds of business.
Self-check: per day by hotel type
Hotel typeRevenue per Day, FestiveRevenue per Day, Rest of yearFestive is
City Hotel₦1,761,375₦1,216,3341.4x
Resort₦1,469,917₦453,4753.2x

"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?

What we are checkingWe want the self-check for the channels page: revenue, commission and what Jade keeps, for each channel, most commission first.
Self-check: by channel
ChannelRateRoom RevenueCommissionNet Revenue
Booking.com15%₦145,097,000₦21,764,550₦123,332,450
Expedia18%₦60,917,000₦10,965,060₦49,951,940
Travel Agent10%₦91,745,000₦9,174,500₦82,570,500
Corporate Contract5%₦140,371,000₦7,018,550₦133,352,450
Jade Website0%₦145,577,000₦0₦145,577,000
Walk-in0%₦63,249,000₦0₦63,249,000
Total₦646,956,000₦48,922,660₦598,033,340

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

CriterionMarksWhat the tutor checks
Pipeline20Appended, cleaned, Nights and Festive right, merges by ID
Model15Date table marked, three relationships, star shape
Measures20All seven correct and formatted; the self-check matches
Festive analysis15A fair comparison (per day or per night), by hotel type, clearly shown
Channel analysis15Commission and net revenue by channel, with a recommendation
Presentation15Answers 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.

Learn this with a real instructor

Free lessons take you a long way on your own. The full programmes add live classes, assignments, Skill Points and a certificate — built for African students.