The short version
- Office occupancy data comes from three systems that disagree by design: badge readers count people entering the building, the booking platform counts intent and check-ins, and HR holds who was expected
- Join them on a stable employee ID, a location ID and a calendar date. Email addresses and display names change and will break the model inside a year
- Report three numbers side by side: booked, checked in and badged. The gaps between them are the findings
- Aggregate to team and floor before anything reaches a dashboard. Person-level attendance is an HR policy question, not a reporting default
Most office occupancy reports are built by hand. Someone exports badge swipes from the access system, pulls bookings from the desk tool, asks HR for a headcount file, and spends two days in a spreadsheet before each leadership meeting. The work gets repeated every month and nobody trusts the result.
The fix is a small, boring data model in Power BI or your warehouse. This is a model that holds up, including the parts that usually go wrong.
Why the three sources never agree
Each system answers a different question, so matching totals would be the suspicious outcome. A badge system records that a card opened a door. It misses tailgaters, rarely records exits, and in a multi-tenant tower the landlord often owns the data rather than you. A booking platform records intent, then confirms it when someone completes a check-in. HR data says who was employed, where they are based and who was on leave.
| Source | What it proves | What it misses |
|---|
| Badge or access control | A person entered the building that day | Which floor or desk they used, how long they stayed, anyone who followed a colleague in |
| Booking platform | Which desk, room or bay was reserved, and whether it was checked into | Walk-ins who never booked |
| HR system | Headcount, team, home office, leave | Anything about actual presence |
The join keys that survive a reorganisation
Three keys carry the whole model. Get them agreed before you open Power BI.
| Key | Use | Common mistake |
|---|
| Employee ID | Links badge holder, booking user and HR record | Joining on email. People marry, rebrand and change domains. Use the immutable ID your identity provider already sends through SCIM provisioning |
| Location ID | Building, then floor, then neighbourhood | Free-text office names. “London”, “LDN” and “Head Office” become three offices |
| Calendar date | One row per person per location per day | Mixing time zones. Convert everything to the local date of the building, not UTC |
Build one date table, one location table and one people table. Everything else is a fact table that points at those three. If a contractor has a badge but no HR record, keep them in a separate category instead of forcing a match.
Report booked, checked in and badged together
A single occupancy rate hides the useful part. Put the three measures next to each other and read the gaps.
| Pattern | What it usually means | What to do |
|---|
| Booked high, checked in low | People reserve desks defensively and do not turn up | Switch on auto-release so unclaimed desks return to the pool |
| Badged high, booked low | Walk-ins. The booking tool is being bypassed | Check whether booking is too slow, or whether teams have informal fixed desks |
| Badged and checked in both low on one floor | Real under-use | This is the floor to consolidate, and the number finance will ask for |
| Peaks on Tuesday to Thursday only | Capacity is sized for three days a week | Plan on peak-day space utilisation, not the weekly average |

See who is in, remote or away The People view: where everyone is working today. See all product toursKeep it aggregate or lose the project
Occupancy reporting fails politically more often than technically. The moment a dashboard shows named individuals against an attendance target, HR and IT both have a reason to stop it, and they are usually right. Decide the rules first.
Aggregate to team and floor in the model, not in the visual. Suppress any group smaller than five people. Keep person-level rows in a restricted table that only the policy owner can reach, and write down who that is. If the purpose is space planning, say so in the report header. Our piece on coffee badging and attendance data covers what happens when the purpose drifts.
Getting booking data out without a monthly export
A manual CSV works for a pilot and rots after that. The durable version is a scheduled, read-only pull from the booking platform into your warehouse or a Power BI dataflow. Before you build it, confirm four things with the vendor: how the integration authenticates, which resources it can read, how far back history goes, and how pagination and rate limits behave on a full backfill.
That checklist is how the HybridHero developer portal is organised. It starts with a read-only request in an approved environment, and the workplace reporting guide covers scoping a reporting connection. Custom API and third-party integrations are part of the Enterprise plan, and the team confirms the supported operations for your tenant before you write any code.
Frequently asked questions
What is office occupancy data?
Office occupancy data is any record of how many people used a workplace and when. In practice it combines badge entries, desk and room bookings with check-ins, and sometimes sensor counts, measured against the number of people who could have attended.
Can I build an office occupancy dashboard in Power BI?
Yes. Power BI handles it well once the data is modelled as one date table, one location table, one people table and a fact table per source. The hard part is agreeing the join keys, not the visuals.
Is badge data enough to measure office occupancy?
No. Badge data tells you someone entered the building. It does not tell you which floor or desk they used or how long they stayed, and tailgating makes it undercount. Pair it with booking check-ins to see where people went.
How often should office occupancy data refresh?
Daily is enough for space planning. Decisions about floors and leases are made on months of data, so a nightly refresh with a full history is more useful than a live feed with no archive.
Do I need sensors for accurate office occupancy data?
Not to start. Bookings with check-in plus badge entries answer most planning questions. An occupancy sensor earns its cost where people do not book, such as open collaboration areas and small meeting rooms.
Who should own office occupancy data?
The workplace or facilities lead should own the report, IT should own the pipeline, and HR should approve the privacy rules. When one team owns all three, either the numbers or the trust goes missing.
Where this fits
If you are still deciding what to measure, start with hybrid work data: stop guessing. If you are ready to connect a reporting tool, the developer portal explains how to request access and what to confirm first.
HybridHero records desk, room and parking bookings with check-in, releases unclaimed desks automatically, and includes workplace analytics, with utilisation reporting on the Professional and Enterprise plans. Confirm the stable user identifier with the team before you model anything. The developer portal covers how accounts are matched.