A comprehensive case study showcasing how I transformed raw Uber trip data into interactive, insight-driven dashboards. This project enabled stakeholders to explore booking trends, revenue streams, and operational efficiencies, guiding data-driven decisions around pricing, resource allocation, and customer satisfaction.
You can explore the fully interactive Uber Analysis Dashboard below.
This solution is organised into three distinct pages - Overview, Time Analysis, and Details Tab. Each tailored to deliver specific insights while sharing a consistent look, feel, and navigation experience.
Overview Dashboard
The opening page presents six headline KPIs: bookings, revenue, average fare, total distance, average distance and average trip time, front and center in a 6 card. A dynamic “Measure” selector lets you swap these metrics on the fly, instantly updating the donut charts for payment type and day/night breakdowns, the daily bookings area chart, and a location panel that surfaces top pickup/drop-off spots and the single farthest trip. Slicers for date and city keep every visual in sync, and custom navigation buttons.
Time Analysis Dashboard
This page focuses on temporal patterns. The same global measure selector drives three visuals: an area chart that groups all pickups into ten-minute intervals, a seven-day chart highlighting weekday versus weekend trends, and an hour-by-day heatmap that reveals peak booking windows. Dynamic titles and responsive formatting ensure every insight adapts instantly to your chosen metric.
Details Tab
When summary visuals spark deeper questions, the Details Tab delivers row-level clarity. A fully filterable grid table displays each trip’s ID, timestamps, locations, vehicle type, fare, distance, and duration. Right-click drill-through actions from any chart launch this page pre-filtered to your selection, while bookmarks let you toggle between the drilled-in subset and the complete dataset. This seamless link between macro trends and micro-level records makes ad-hoc investigation effortless
Scroll down to explore the end-to-end process - how I sourced the data, applied transformations, built DAX measures, and refined the layout for maximum impact
To start I saved the two Uber sheets "Location Table" & "Trip Details") I was working with to a central location, then opened Power BI and imported them. I immediately ran a series of data validity checks, spot-checking row counts, hunting for null values, and confirming data types to ensure every trip record was reliable before diving into analysis. With confidence in the raw data, I then defined relationships between key tables, seamlessly weaving together trip details, payment methods, and lookup tables into a single coherent model.
To unlock time-based insights, I created a dedicated Calendar table, set its data type to Date, and linked it to the Trips table. This step feels like adding a compass to your dashboard: it makes every subsequent time intelligence calculation - whether daily totals, monthly trends, or hourly breakdowns - both accurate and effortless.
Calendar Table Creation
Defining Relationships
With the data model in place, I tailored the report canvas to match the theme of the project. I sketched out visual zones using shapes and added a concise title to anchor the viewer’s attention. This structure ensures that each analytic section has its own clear home.
Central to the Overview dashboard are six DAX-driven measures:
Total Bookings
Total Booking Value
Average Booking Value
Total Trip Distance
Average Trip Distance
Average Trip Time
The images below show how I crafted each calculation. I then placed these metrics into large-format KPI cards, making top-level insights instantly accessible at a glance.
Finished KPI Card View
To allow on-the-fly metric switching, I created a disconnected “Field” parameter. Backed by a DAX SWITCH() measure, this selector drives every chart and table to display the chosen metric, so users can toggle between Total Bookings, Total Boking Value and Total Trip Distance without rebuilding visuals.
Next, I visualized payment behavior with a donut chart that breaks down Card, Cash, Wallet, and other types. Recognizing that ride patterns shift between day and night, I wrote a DAX expression to flag each trip accordingly and added a second donut visual to compare Day vs Night bookings.
Parameters
DAX Expression - Day/Night
Final Donut Charts
I plotted daily totals of Total Bookings in an area chart using "Day" on the X-axis and "Total Bookings" on the Y-axis, revealing demand peaks and valleys over the analysis period. This view sets the stage for drill-downs by time and location.
Final Area Chart
Understanding where Uber trips begin and end is vital for optimizing driver distribution, forecasting demand, and fine-tuning pricing. In this phase, I built several DAX measures and visuals to surface key location insights:
I started by calculating the Most Frequent Pickup Point with a DAX measure. This measure identifies the single address or zone with the highest trip count—insight that directly informs where to position drivers during peak times and how to adjust dynamic pricing.
Next, I created the Most Frequent Drop-off Point. Implementing this required activating the otherwise inactive relationship between pickup and drop-off location tables in my data model, ensuring the measure could correctly count end destinations and reveal the spots where riders most often alight.
To uncover outlier journeys, I developed a Farthest Trip measure that scans every trip’s distance and returns the maximum value. This metric highlights long-haul rides, helping stakeholders analyse rare but lucrative routes and consider special fare structures.
Finally, I ranked Total Bookings by Location and Most Preferred Vehicle for Location Pickup and isolated the Top 5 areas with the greatest booking volume and Vehicle Type. Displayed as a bar chart, this view pinpoints high-traffic zones that warrant extra driver support and targeted marketing efforts. I combined all these elements into a cohesive multi-chart panel, delivering a one-stop view of pickup hotspots, drop-off hubs, longest trips, and high-volume locations
Final Chart View
DAX - Most Frequent Pickup Point
DAX - Most Frequent Drop-off Point
DAX - Farthest Trip
To compare ride performance across Uber’s fleet, I created a grid table using a matrix visual. This allows stakeholders to quickly scan key metrics by vehicle type and identify strengths or areas for improvement.
This matrix delivers a clear, at-a-glance comparison of ride volumes, revenue, average fare, and distance coverage by each vehicle category, guiding fleet allocation and pricing strategies.
Final Vehicle Type Matrix
I introduced Date and City slicers so users can narrow focus on specific time frames or regions. These slicers sync across pages, ensuring a consistent filtering experience as viewers navigate between dashboards.
Data and City Slicers
I began by duplicating the Overview page, preserving the KPI cards and the global measure selector driven by a disconnected “Field” parameter. This dynamic selector lets users switch effortlessly among Total Bookings, Total Booking Value, and Total Trip Distance, instantly recalibrating every chart on the page.
The centerpiece is an area chart that groups pickups into ten-minute buckets, slicing the day into granular segments. This view highlights the exact moments when demand surges or dips, making it clear when to deploy additional drivers or trigger surge pricing.
Below it, a seven-day area chart traces the chosen metric from Monday through Sunday, revealing weekday versus weekend rhythms and pinpointing the days that consistently drive the most revenue or trips.
Area Charts
Rounding out the analysis is a heatmap-style matrix: hours of the day run down the rows, weekdays span the columns, and each cell is shaded according to the selected measure. This hour-by-day grid crystalises peak booking windows in context, equipping stakeholders with the precise intelligence needed to staff effectively, adjust rates in real time, and plan targeted marketing around slower periods.
Day & Time Heatmap
I then created a dynamic title using a DAX function and card so chart titles were defined by the selected metric.
DAX - Dynamic Title
For the 3rd and final sheet, I again duplicated the Overview Dashboard, this time deleting everything out apart from the title and sidebar frames.
The Details Tab serves as your deep-dive interface, where high-level insights meet row-level data. At its heart is a grid table that lays out every critical trip attribute—trip ID, timestamps, pickup and drop-off locations, vehicle type, fare, distance, and duration—so stakeholders can inspect the exact records behind any trend.
To bridge summary visuals with granular records, I implemented drill-through functionality. Whenever a user right-clicks a bar, point, or cell in the Overview or Time Analysis dashboards, they’re instantly transported to the Details Tab filtered to that specific context (Screenshot 18). No manual slicer adjustments—just instant, context-driven exploration.
Finally, I added a “View Full Data” bookmark that toggles between the drilled-through subset and the unfiltered master table. With a single click, users can reset all filters and return to the complete dataset, ensuring effortless navigation between focused analysis and a full-scope view.
Table View
To ensure a seamless exploration experience, I equipped each dashboard with a sidebar of custom buttons that leverage Power BI’s page navigation and bookmark features. I added a “Dashboard Home” button that instantly returns users to the dashboard, alongside an “Info” button that reveals a pop-out panel explaining data sources. A “Refresh Filters” button invokes a bookmark to clear all slicers in one click, resetting the view to its default state. Finally, a “Back to Portfolio” button links directly to my external web portfolio, keeping the story anchored in context. This consistent navigation ribbon across every page guarantees that stakeholders can flip between insights, metadata, and external resources without ever losing their place.
The image carousel below shows a snapshot of each dashboard.