This project is part of the Codebasics Resume Challenge, aiming to provide valuable business and data intelligence insights to AtliQ Grands, a chain of five-star hotels in India. The objective is to analyze historical data and create a Power BI dashboard to help AtliQ Grands regain its market share and revenue in the luxury/business hotel category.
AtliQ Grands owns multiple five-star hotels across India. They have been in the hospitality industry for the past 20 years. Due to strategic moves from other competitors and ineffective decision-making in management, AtliQ Grands are losing its market share and revenue in the luxury/business hotels category. As a strategic move, the managing director of AtliQ Grands wanted to incorporate “Business and Data Intelligence” to regain their market share and revenue. However, they do not have an in-house data analytics team to provide them with these insights.
Their revenue management team had decided to hire a 3rd party service provider to provide them insights from their historical data.
You are a data analyst who has been provided with sample data and a mock-up dashboard to work on the following task.
- Create the metrics according to the metric list.
- Create a dashboard according to the mock-up provided by stakeholders.
- Create relevant insights that are not provided in the metric list/mock-up dashboard
- AtliQ Grands is a five stars hotel chain is operating in 4 cities (Hyderabad, Mumbai, Banglore, Delhi).
- It has 7 properties with branches across these 4 cities.
- The rooms in these properties are categorized into 4 types: Elite, Premium, Presidential, & Standard.
- There are 6 main platforms to book the rooms and some other platforms that are not as effective as others.
- dim_date
- dim_hotels
- dim_rooms
- fact_bookings
- fact_aggregated_bookings
The financial stats added in this report are the typical metrics that are used only in the hospitality sector. This includes revenue, cancellations, room-level pricing etc.
Here is a list of these financial metrics used in the hospitality industry.
- Revenue - a common metric used in every industry.
- RevPAR - Revenue generated per available room.
- RevPar = Total Revenue / Total Rooms available to Sell
- Revpar = ADR * Occupancy %
- ADR – Average Daily Rate is the average daily price per room.
- ADR = Total Rooms Sold Revenue / Number of Rooms Sold
The stats related to performance includes the hotel’s occupancy, cancellation %, room availability and many more.
Here is a list of performance metrics used in the hospitality industry.
- Occupancy %
- Occupancy % = Total Rooms Occupied / Total Rooms Available
- Cancellation %
- SRN (Sellable Room Nights)
- SRN is the metric used for available rooms that can be sold. Example: If there are 100 rooms in a hotel and 20 rooms are not available for any XYZ reason, the SRN here is 80.
- DSRN (Daily Sellable Room Nights)
- URN (Utilized Room Nights) -URN are the nights utilized by the customers. This can be the checked-in nights. It is considered when the customer ends-up staying.
- DURN (Daily Utilized Room Nights)
- BRN (Booked Room Nights)
- It is the sum of URN, Cancellation and customers who didn't stay even after bookings.
- BRN = URN + Cancellation + No Show
- DBRN (Daily Booked Room Nights)
- Realisation
- It refers to the number of customers bookings received against customers actually stayed
- Realisation = URN / BRN
- Avg Rating – Average rating is the average rating given by a customer per booking.
- Day Type – Day is the category of days in a week. Weekday and Weekend. Based on the feedback from stakeholder, we considered Friday and Saturday as weekend and weekdays from Sunday to Thurdsay.
- Booking Platforms – Booking platforms are the modes that are used by customers to book rooms. These include AtliQ’s own booking platform and third-party platforms as well.
- Week Number – Week number is the number of weeks in a year.
- WoW – Week on Week is the metric to compare the performance change over the week.
- Filter by Properties
- Filter by City
- Filter by Status
- Filter by Platforms
- Filter by Month
- Filter by Week
- Imported all datasets into Power BI.
- Performed necessary data transformations using Power Query.
- Established relationships between tables to create a STAR schema.
- Created calculated columns and measures using DAX.
- Designed the dashboard based on stakeholder mock-up.
- Implemented key metrics and additional insights.
- Used DAX formula to derive week number from the corresponding date
- wn = WEEKNUM(dim_date[date])
- Used DAX formula to derive day type
- day type =
Var wkd = WEEKDAY(dim_date[date],1)
return
IF(
wkd>5,"Weekend","Weekday")
Using all the information and data provided by the stakeholders, I analyzed and created this report. This report shows metrics that will help solve the problems faced by AtliQ Grands’s management in generating good revenue.
- Revenue
- Revenue = SUM(fact_bookings[revenue_realized])
- Total Bookings
- Total Bookings = COUNT(fact_bookings[booking_id])
- Total Capacity
- Total Capacity = SUM(fact_aggregated_bookings[capacity])
- Total Succesful Bookings
- Total Succesful Bookings = SUM(fact_aggregated_bookings[successful_bookings])
- Occupancy %
- Occupancy % = DIVIDE([Total Succesful Bookings],[Total Capacity],0)
- Average Rating
- Average Rating = AVERAGE(fact_bookings[ratings_given])
- No of days.
- No of days = DATEDIFF(MIN(dim_date[date]),MAX(dim_date[date]),DAY) +1
- Total cancelled bookings
- Total cancelled bookings = CALCULATE([Total Bookings],fact_bookings[booking_status]="Cancelled")
- Cancellation %
- Cancellation % = DIVIDE([Total cancelled bookings],[Total Bookings])
- Total Checked Out
- Total Checked Out = CALCULATE([Total Bookings],fact_bookings[booking_status]="Checked Out")
- Total no show bookings
- Total no show bookings = CALCULATE([Total Bookings],fact_bookings[booking_status]="No Show")
- No Show rate %
- No Show rate % = DIVIDE([Total no show bookings],[Total Bookings])
- Booking % by Platform
- Booking % by Platform = DIVIDE([Total Bookings],
CALCULATE([Total Bookings],
ALL(fact_bookings[booking_platform])))*100
- Booking % by Room class
- Booking % by Room class = DIVIDE([Total Bookings],
CALCULATE([Total Bookings],
ALL(dim_rooms[room_class])
))*100
- ADR
- ADR = DIVIDE( [Revenue], [Total Bookings],0)
16.Realisation %
- Realisation % = 1- ([Cancellation %]+[No Show rate %])
- RevPAR
- RevPAR = DIVIDE([Revenue],[Total Capacity])
- DBRN
- DBRN = DIVIDE([Total Bookings], [No of days])
- DSRN
- DSRN = DIVIDE([Total Capacity], [No of days])
- DURN
- DURN = DIVIDE([Total Checked Out],[No of days])
- Revenue WoW change %
- Revenue WoW change % =
Var selv = IF(HASONEFILTER(dim_date[wn]),SELECTEDVALUE(dim_date[wn]),MAX(dim_date[wn]))
var revcw = CALCULATE([Revenue],dim_date[wn]= selv)
var revpw = CALCULATE([Revenue],FILTER(ALL(dim_date),dim_date[wn]= selv-1))
return
DIVIDE(revcw,revpw,0)-1
- Occupancy WoW change %
- Occupancy WoW change % =
Var selv = IF(HASONEFILTER(dim_date[wn]),SELECTEDVALUE(dim_date[wn]),MAX(dim_date[wn]))
var revcw = CALCULATE([Occupancy %],dim_date[wn]= selv)
var revpw = CALCULATE([Occupancy %],FILTER(ALL(dim_date),dim_date[wn]= selv-1))
return
DIVIDE(revcw,revpw,0)-1
- ADR WoW change %
- ADR WoW change % =
Var selv = IF(HASONEFILTER(dim_date[wn]),SELECTEDVALUE(dim_date[wn]),MAX(dim_date[wn]))
var revcw = CALCULATE([ADR],dim_date[wn]= selv)
var revpw = CALCULATE([ADR],FILTER(ALL(dim_date),dim_date[wn]= selv-1))
return
DIVIDE(revcw,revpw,0)-1
- Revpar WoW change %
- Revpar WoW change % =
Var selv = IF(HASONEFILTER(dim_date[wn]),SELECTEDVALUE(dim_date[wn]),MAX(dim_date[wn]))
var revcw = CALCULATE([RevPAR],dim_date[wn]= selv)
var revpw = CALCULATE([RevPAR],FILTER(ALL(dim_date),dim_date[wn]= selv-1))
return
DIVIDE(revcw,revpw,0)-1
- Realisation WoW change %
- Realisation WoW change % =
Var selv = IF(HASONEFILTER(dim_date[wn]),SELECTEDVALUE(dim_date[wn]),MAX(dim_date[wn]))
var revcw = CALCULATE([Realisation %],dim_date[wn]= selv)
var revpw = CALCULATE([Realisation %],FILTER(ALL(dim_date),dim_date[wn]= selv-1))
return
DIVIDE(revcw,revpw,0)-1
- DSRN WoW change %
- DSRN WoW change % =
Var selv = IF(HASONEFILTER(dim_date[wn]),SELECTEDVALUE(dim_date[wn]),MAX(dim_date[wn]))
var revcw = CALCULATE([DSRN],dim_date[wn]= selv)
var revpw = CALCULATE([DSRN],FILTER(ALL(dim_date),dim_date[wn]= selv-1))
return
DIVIDE(revcw,revpw,0)-1
This Power BI dashboard provides AtliQ Grands' management with valuable insights to make data-driven decisions, improve market share, and enhance revenue.