Client case study · Property compliance

SafePoint FM: one compliance view across 16 sites.

SafePoint FM manages statutory and governance compliance across a portfolio of managed sites. We turned 16 separate site registers into a single Power BI model and a dashboard their team can filter, drill into and act on.

16site compliance registers combined
419compliance items in one model
418 → 41item names standardised
118placeholder dates found and corrected
The challenge

Sixteen registers, sixteen ways of recording the same thing.

Each site kept its own Excel compliance register. The same check appeared under many different names, some registers started in a different column, and missing dates had been filled with placeholder values from 2001 and 2002.

That made the portfolio picture unreliable. Placeholder dates showed items as long overdue when there was simply no record, and nobody could compare sites or categories without rebuilding the figures by hand.

  • 418 different item names across the registers
  • Headers in different positions from one workbook to the next
  • Placeholder dates hiding the difference between “overdue” and “no record”
  • No single view of what is overdue, where, and how safety-critical it is
What we built

One model, one set of rules, one dashboard.

We combined every register with Power Query, standardised the item names to 41 statutory and governance checks, and loaded the result into a star-schema model. Compliance status is calculated in DAX against today’s date, so the picture is always current after each refresh.

  • Folder-based Power Query load that finds each sheet’s real header row
  • Item mapping table: 418 source names to 41 standard compliance items
  • Placeholder dates converted to “No record” rather than “Overdue”
  • Star schema: compliance fact with site, item, category, contractor, date and status dimensions
  • DAX measures for compliance %, overdue ageing, 12-month pipeline and data quality
  • Five report pages with synced slicers and cross-filtering
Try it

The dashboard, live on this page.

This is an interactive web version of the Power BI report, using the register data as at 5 October 2026. Site references and addresses are anonymised and contractor details are removed. Click the tabs, slicers, bars and heatmap cells to filter it.

Best viewed on a laptop or larger screen.

Open full screen
Report pages

What SafePoint FM can now see.

Each page is built around a question a compliance team needs answering.

Portfolio overview

Compliance % by site against the 95% target, status by compliance category, and a 12-month pipeline of what falls due, split by safety-critical items.

Site detail

One site at a time: its compliance score and rank, status mix, items by category and the full register, worst first.

Action tracker

A heatmap of overdue items by site and category, overdue ageing bands, and a prioritised list of overdue safety-critical items.

Data quality

Where records are missing or unverified, how the placeholder dates changed the picture, and the cleansing steps applied.

Under the bonnet

The Power Query and DAX behind it.

Three small examples of the logic in the model. The full report includes a Model & DAX page documenting every step.

Finding the header row

Some registers start in column B, so the load looks for the “Compliance Type” header instead of trusting fixed positions.

// simplified: find the real header row – some registers start in column B
fxReadRegister = (sheet as table) as table =>
let
    HeaderRow = List.PositionOf (
        Table.ToRows ( sheet ),
        null,
        Occurrence.First,
        ( row, _ ) => List.Contains ( List.Transform ( row, each Text.Clean ( Text.Trim ( Text.From ( _ ) ?? "" ) ) ), "Compliance Type" ) ),
    Trimmed  = Table.Skip ( sheet, HeaderRow ),
    Promoted = Table.PromoteHeaders ( Trimmed, [ PromoteAllScalars = true ] )
in
    Promoted

Status against today

Status is recalculated on every refresh, so an item moves from “Due Soon” to “Overdue” without anyone editing a spreadsheet.

Status =
VAR _Due = FactCompliance[Next Due]
RETURN
    SWITCH (
        TRUE (),
        ISBLANK ( _Due ), "No Record",
        _Due < TODAY (), "Overdue",
        _Due <= TODAY () + 60, "Due Soon",
        "Compliant"
    )

Compliance %

One agreed definition of “in date”, used by every visual, so the figure is the same wherever it appears.

Compliance % =
DIVIDE (
    CALCULATE ( [Compliance Items],
        KEEPFILTERS ( FactCompliance[Status] IN { "Compliant", "Due Soon" } ) ),
    [Compliance Items]
)
The outcome

A portfolio picture the team can trust.

SafePoint FM can now see compliance across all 16 sites in one place, ranked against a 95% target and broken down by category, site and risk.

Separating 118 “no record” items from genuinely overdue ones gave a truer picture of the work outstanding, and shows exactly where records need to be found or inspections booked.

Delivered

What SafePoint FM received.

  • Power BI project (PBIP) with documented model and measures
  • Reference tables for sites and item mapping they can maintain themselves
  • Five-page report in SafePoint FM’s brand colours
  • Refresh-ready folder load: drop in an updated register and refresh

“Our compliance information was spread across sixteen site registers, with the same checks recorded under different names and missing dates that made items look overdue when there was simply no record. Insightmere cleaned and standardised all of it and built a Power BI dashboard that gives us one reliable view of the portfolio. We can see where each site stands against our target, which safety-critical items need attention first, and where records need to be found. The work was clearly explained, and the dashboard was built around the questions we actually ask.”

Rafia RashidDirector, SafePoint FM