In a previous post, I showed how to take a tenancy schedule from a real estate brochure PDF and turn it into a Power BI dashboard. In the last post, we focused on retrieving and cleaning the data:
In this post, we’ll move on to building out the dashboard itself. You can follow along using the exercise file below:
Remember, the Power Query steps we did earlier were mainly backend work. If you want numbers to appear in a specific format, like currency or percentages, that’s handled separately in Power BI under Table View. As you continue building the dashboard, be sure to switch back to this view when needed to adjust formatting. I’ll get started by formatting Rent (£ PA) as currency in GBP.

The first step in the report view is to add KPI numbers across the top of the dashboard. Select the Card visual and place it in the upper-left corner of the canvas, then drag Sum of Rent (£ PA) into the Fields area of the card.

If your card value isn’t showing in pounds, make sure to revisit the previous step: switch to Table View and format the column correctly.

This is the point where we can start validating our numbers against the original source. The PDF (linked in the first post of this series) includes a Total row at the end. Let’s compare our dashboard results with that figure… and they match.

Nice work so far. Next, let’s calculate the average rent per square foot. Create a new Card visual, drag Rent (£ PSF) into the Fields, and change the aggregation to Average. You’ll get a result… but it won’t match the figure in the PDF. Why is that?

To match the average rent per square foot shown in the brochure, we can’t just take a simple average of the rent values row by row. That approach gives every lease the same weight, even though some spaces are much larger than others. Instead, we need a weighted average that takes square footage into account. In Power BI, we can calculate this by creating a DAX measure.
Go to Home on the ribbon, select New Measure, and enter the following:
The resulting measure should now match the total from the original PDF. Great. To format it, switch back to Table View. You won’t see the measure displayed inside the table itself, but you will find it listed with the table’s fields on the far right side of the screen.

Great work so far. The last KPI we’ll add to this dashboard is the vacancy rate. In the original data, you’ll notice a row labeled Vacant (Fitted). We can use this row as the basis for calculating the percentage of total square footage that is vacant. To do that, create the following measure:
This function is calculating the vacancy rate. At a high level, it works by dividing the square footage of vacant space by the total square footage. The inner CALCULATE finds the sum of square feet for rows where the tenant is listed as “Vacant (Fitted).” That result is then divided by the sum of square feet across the whole dataset to give us a percentage.
The last piece is the COALESCE function, which just says “if the calculation doesn’t return anything, replace it with zero.” This matters because if the vacant row gets filtered out, the numerator would be blank and the result would look like an error. By wrapping the calculation in COALESCE, we make sure it shows a 0% vacancy rate instead.
It’s completely fine if you don’t follow every detail here. The main idea is that the function finds vacancy as a share of the total, and COALESCE is just a safety net to show zero if the vacant row isn’t present.

We’ve still got a little room left on the top panel, so let’s add a slicer. In Power BI, a slicer works like an interactive menu that filters what you see on the dashboard. Here, we’ll use it to switch between Cat A and Cat B fit-outs. In real estate terms, Cat A means the space is partially finished, while Cat B means it’s fully customized and move-in ready. Go ahead and drop Fit Out into the slicer’s Fields.

To make this slicer a little bigger and easier to use I am going to modify the appearance under Format visual and Style and make this a Tile-style slicer and then set the font to a bigger font under Values.

Nice work so far! We’ve got some solid KPIs and interactive slicers at the top of the dashboard. Now, what should we add to the bottom? One good option is a Gantt chart to track lease timelines.
A Gantt chart shows data across time: each row represents a tenant, and the bars show when their lease starts and ends. This makes it easy to see lease lengths, overlaps, and upcoming expirations.
For a real estate dashboard, that’s especially useful because vacancies stand out at a glance. Power BI doesn’t include a Gantt chart by default, but Microsoft offers one you can add. Just click the three dots under Visual options and select Get more visuals:

Look up Gantt charts and choose the one published by Microsoft:

This one takes a bit more effort to set up. Start by dragging Tenant to Task, Lease Start to Start Date, and Lease Expiry to End Date. Power BI will aggregate this as the earliest Lease Expiry by default, but since each tenant has only one expiry date, that works fine.
You’ll see a Gantt chart appear, but at first it’s tough to read because it shows progress week by week. To make it clearer, roll it up to the annual level. Go to the format visual options and, near the bottom, change the aggregation to Year. Now the chart is much easier to read.

You may notice that many of the category labels are getting cut off in this chart. To fix this, go to Category Labels in the visual format settings and widen the area. You can also bump up the font size a bit if you’d like.

It’s also a good idea to add a title. You can do this under the General section of the format settings.

This is looking great so far. To give each lease a bit more context, we can add details to the tooltips, like Area and Rent. Just drag those fields into the Tooltips section. Don’t use the average rent measure here. We want the raw values, and Power BI won’t accept a measure in this case.

This is coming along nicely. One thing I’m not loving is the date formatting—I don’t need the timestamp. And what if I wanted it in the British format instead? To fix this, go to the visual format settings, open Tooltip Settings, and change the date format to dd/MM/yyyy.

This is looking great so far. But you might notice that the Vacant line isn’t showing up in the Gantt chart. That’s because there’s no start or end date. There’s no lease since it’s vacant.
To work around this, we can fill in those missing dates with the earliest and latest lease dates from the other tenants. We’ll do this with calculated columns. To set it up, go back to Table View, then on the ribbon under Home or Column Tools, select New Column and create this column:
This calculation uses each tenant’s lease start date, but if that’s missing it fills it with the latest lease start date in the dataset. In short, it makes sure there’s always a start date available, which forces the vacant rental to appear in the Gantt chart.

Next, do the same process to fill in the lease expiry.
Vacant is now showing up in the Gantt chart. As far as I know there isn’t a way to conditionally format its color. We could group vacant rentals under a parent category, but with the limited space here I’ll leave it as is. Still, pretty cool that we turned a static PDF into something like this.

Bringing this all together, we’ve gone from a static PDF tenancy schedule to a fully interactive Power BI dashboard. Along the way, we cleaned and shaped the data, added KPIs, built a slicer for quick comparisons, and even created a Gantt chart to track lease timelines. We also solved some tricky issues like formatting dates, weighting averages correctly, and ensuring vacant units display properly.
That’s the real power of a dashboard: it transforms flat, static information into something dynamic and insightful. Instead of flipping through rows in a brochure, you can instantly spot trends, validate numbers, and track leases.