← All projects

Hotel Reservation & Revenue Dashboard

Multi-channel booking data unified in Fabric, with threshold-driven alert logic flagging a systemic 36% lost-revenue problem.

Microsoft Fabric · Power BI Development · Multi-Channel Booking Analytics

Microsoft FabricDataflows Gen2T-SQLPower BIDAXBookmarks
DisciplineAnalytics & BI
PlatformMicrosoft Fabric
ChannelsDirect · Corporate · Walk-in · OTA
Key finding36.37% lost revenue
Hotel Reservation & Revenue Dashboard — Reservations — bookings against cancellations by year and season
Reservations — bookings against cancellations by year and season
Hotel Reservation & Revenue Dashboard — Revenue — net versus lost by channel and payment method
Revenue — net versus lost by channel and payment method
Hotel Reservation & Revenue Dashboard — Day-of-week heatmap and global revenue distribution
Day-of-week heatmap and global revenue distribution

click any screen to enlarge

ROLE

My role

BI Consultant & Data Analyst — end-to-end from raw booking data to interactive revenue dashboard

01

The challenge

A hotel operation was taking reservations across multiple channels — corporate accounts, direct bookings, walk-ins and third-party platforms like Booking.com and Expedia — but had no unified way to see how those channels performed against each other. Leadership couldn't tell which channels drove real revenue versus which were quietly bleeding money through cancellations, and there was no seasonal or day-of-week visibility to guide staffing or pricing.

02

The data problem

Booking records came in from each channel separately, each structured differently with no shared reservation ID logic or consistent revenue categorization. There was no way to compare net revenue against lost revenue by channel, no month-over-month or year-over-year baseline, and no consolidated view of cancellations against reservations over time.

03

My approach

I built a Data Factory pipeline in Microsoft Fabric to pull booking data from each channel source into a Fabric Lakehouse as a central staging layer rather than working off disconnected exports. From there I used Dataflows Gen2 and SQL in the Fabric Warehouse to reconcile channel-specific formatting differences, standardizing reservation status, payment method and revenue fields so every booking, regardless of source, could be compared on equal footing.

Once clean, I modeled the data into a star schema in the Warehouse and connected Power BI natively. The Reservation page tracks total bookings against cancellations by year and season, surfaces the highest volume and highest cancellation months, and includes a day-of-week heatmap so patterns like which weekdays see the heaviest cancellations are immediately visible. The Revenue page breaks down net versus lost revenue by booking channel and payment method, with a world map showing where global revenue is concentrated.

For the KPI cards I built a flip-card interaction using Power BI bookmarks and selection-based navigation, letting users toggle a single card between its absolute value and its period-over-period change without a separate visual for each. I also built DAX-driven alert logic that flags lost revenue percentage as critical once it crosses a defined threshold — so the "36.37% Lost Revenue, Critical" flag isn't a static label, it's a live calculation that changes colour and message if performance improves.

04

The result

Leadership got a single live view across every booking channel for the first time. The dashboard exposed that lost revenue was sitting at a critical 36% across nearly every channel and payment method — a consistent enough pattern to point at a systemic cancellation issue rather than a channel-specific one. It also surfaced that December and November were both the highest booking months and the highest cancellation months: the same period carrying the most upside and the most risk, giving management a clear, time-bound window to focus retention efforts.

05

Tools & tech stack

  • Microsoft Fabric Data FactoryPipeline pulling booking data from direct, corporate, walk-in and third-party channels into a central Lakehouse
  • Fabric LakehouseStaging layer for raw multi-channel booking data
  • Dataflows Gen2 & T-SQLStandardizing inconsistent formatting and reservation logic across channels
  • Power BI & DAXSemantic model, LM/LY comparison measures, threshold-based alert logic for lost revenue
  • Bookmarks & selection actionsInteractive flip-card KPI visuals
  • Geospatial visualizationWorld map for global net revenue by country

Have a problem that looks like this one?

Tell me what you're trying to decide or automate, and I'll tell you honestly what it would take.