UK Real Estate Market: Performance Intelligence Report
A Power BI report built to track sales, lettings, agent performance and buyer affordability across the UK residential market
About the Project
This report was built as an end-to-end Power BI solution for tracking the health of a UK residential real estate business across four commercial lenses: sales performance, the rental portfolio, agent productivity, and buyer affordability. Rather than a single dashboard, it is structured as a guided, multi-page report with a dedicated landing page, six analytical pages reachable through an in-report page navigator, six custom tooltip pages, and one hidden drillthrough page for anomaly investigation — 14 pages in total.
Underneath the report sits a 12-table star schema: three fact tables (FACT_Transactions, FACT_Rentals, FACT_Leads), a shared DIM_Property dimension plus DIM_Agent, DIM_Buyer, DIM_Calendar and DIM_FunnelStage, three single-column parameter tables that power in-report scenario switching (DIM_MetricSelector, DIM_LTVParameter, DIM_MortgageRateParameter), and a dedicated Tbl_Measures hub table that holds close to 90 DAX measures — everything from KPI card values to the raw HTML strings that render the landing page and tooltip content.
What I Built
Landing Page
A single HTML-content visual renders the cover screen, paired with an "Enter Report →" action button that jumps straight to the Executive Overview. The entire page is driven by one DAX measure (Tbl_Measures.HTML - Landing Page) rather than a stack of native visuals.
Executive Overview
The report's default landing point after the cover page. Five HTML-content KPI cards (Market Temperature, Rolling 12M Avg Price, Total Rental Income, Total Sales Revenue, Total Transactions) sit above a "Sale Price by Transaction Date" column chart, a "Rolling 12M Avg Sale Price" line chart, and a "Listing vs Transaction Date Revenue Timing" chart that compares revenue recognition timing. Region, Buyer Type, Property Type and Date slicers scope the whole page.
Sales Performance
Focused on transaction-level sales metrics: a "Transactions Trend (Monthly)" line chart, "Sales Revenue by Region" and "Regional Sale Price Premium vs UK" column charts, "Avg Sale Price by EPC Rating", and a "Performance by Property Type" detail table. Four HTML-content KPI cards cover total sales revenue, average sales revenue, average discount %, and price-to-asking ratio. Property Type, Region, Year and Quarter slicers scope the page.
Agent Performance
A scorecard-style page: "Revenue by Agent" and "DOM vs Agency Average by Agent Name" charts, a "Transactions by Seniority" donut, an "Agent Conversion Rank & Percentile Band" pivot table, and an "Agent Scorecard" detail table. KPI cards surface top agent, agent revenue, total commission, and average target achievement. Slicers: Region, Agency, Seniority, Year.
Rental Market
Covers the lettings side of the portfolio: "Avg Monthly Rental by Region" and "Rental Income Trend" charts alongside a "Rental Portfolio Detail" table. KPI cards report active rentals, average gross/net rental yield, average monthly rental, and total rental income. Slicers: Region, Tenant Type, Rental Status, Year.
Market Pulse & Funnel
The most visually varied page: a UK regional shape map ("Market Temperature") paired with a "Temperature Gauge", a "Lead Funnel Stages" funnel chart, a "Price Momentum %" chart, and a "Regional Market Signals" table. KPI cards cover active listings, funnel conversion rate, market temperature, total leads, and withdrawn rate. Slicers: Region, Year, Lead Source, Lead Stage.
Buyer & Affordability
Built around a field-parameter-style "Select Metric" slicer (bound to DIM_MetricSelector) that swaps the metric driving the page's KPI card, alongside two what-if scenario slicers — "LTV Scenario" and "Rate Scenario" — for affordability modelling. Also includes "Buyers by Type" and "Buyers by Nationality Group" donut charts, "Avg Income by Buyer Type", a "Total SDLT Liability by Buyer Type & Price Band" pivot table, and a "Buyer Segment Detail" table. KPI cards cover affordability index, average SDLT liability, monthly mortgage payment, and new-build %.
Hidden pages
Six single-visual tooltip pages (Rolling 12M Avg Price, Transactions Trend, Agent Revenue, Rental Income Trend, Lead Funnel, Buyers by Type) supply custom hover tooltips throughout the report. A further hidden page, "Regional Z-Score Anomaly Detection (Sale Price)", holds a scatter chart for drilling into boroughs whose sale prices deviate most from their regional average — it stays out of the page navigator and view mode.
Key Features
HTML-Content KPI Cards & Dynamic Text
Nearly every KPI tile, the landing page, and all page-intro text are rendered by the same custom HTML-content visual, each instance bound to a single DAX string measure in Tbl_Measures. This keeps formatting, conditional styling, and copy fully controlled in DAX rather than native visual formatting panes.
Field-Parameter Metric Switch
The "Select Metric" slicer on Buyer & Affordability is backed by a dedicated single-column table (DIM_MetricSelector) and a "KPI Card - Selected Metric" measure, letting one slicer swap which underlying metric drives the page's headline card.
What-If Scenario Slicers
"LTV Scenario" and "Rate Scenario" slicers (backed by DIM_LTVParameter and DIM_MortgageRateParameter) feed directly into the affordability and mortgage-payment calculations, giving the page a live what-if modelling feel.
Custom Tooltip Pages
Six hidden tooltip pages, each with a single HTML-content visual bound to its own "Tooltip HTML - <name>" measure, provide fully custom hover content in place of default Power BI tooltips.
UK Shape Map & Temperature Gauge
A regional shape map of England, Wales and Scotland ("Market Temperature") is paired with a gauge visual, both driven by "Market Temperature Score" and "Market Temperature RAG" measures to give an at-a-glance read of regional market heat.
Statistical Banding & Anomaly Flags
Measures like "Agent Percentile Band", "Agent Conversion Rank", "Regional Z-Score" and "Z-Score Flag" convert raw performance and price figures into ranked bands and outlier flags, surfaced in tables and the hidden anomaly-detection scatter page rather than as raw numbers.
Consistent In-Report Navigation
A custom page-navigator visual appears on every analytical page for one-click cross-page navigation, and the landing page uses an action button ("Enter Report →") to start the journey.
Data Model
| Table | Type | Description |
|---|---|---|
| FACT_Transactions | Fact | Property sale transactions; source for sales revenue, price and price-band measures. |
| FACT_Rentals | Fact | Rental/lettings records (rental status, tenant type); source for yield and rental income measures. |
| FACT_Leads | Fact | Sales pipeline/lead records (lead source, funnel stage); source for the lead funnel and conversion measures. |
| DIM_Property | Dimension | Shared property attributes — property type, region, borough, EPC rating — joined across all three fact tables. |
| DIM_Agent | Dimension | Agent roster with agency, region and seniority, used throughout Agent Performance. |
| DIM_Buyer | Dimension | Buyer segmentation — buyer type and nationality group — used on Buyer & Affordability. |
| DIM_Calendar | Dimension | Standard date table (date, quarter, year, year-month) supporting rolling-12-month and prior-year time intelligence. |
| DIM_FunnelStage | Dimension | Lookup table defining lead funnel stage names/ordering for the Lead Funnel Stages visual. |
| DIM_MetricSelector | Parameter | Single-column parameter table backing the "Select Metric" field-parameter-style slicer. |
| DIM_LTVParameter | Parameter | What-if parameter table backing the "LTV Scenario" slicer for affordability modelling. |
| DIM_MortgageRateParameter | Parameter | What-if parameter table backing the "Rate Scenario" slicer for mortgage payment modelling. |
| Tbl_Measures | Measures hub | Hidden, columnless table holding all DAX measures used across the report — KPI card values, tooltip HTML strings, and banding/anomaly measures. |
Live Report
The published version of this report can be explored below.