Skip to content

Power BI, Excel and Grafana ​

Your own dashboards on Omaya's occupancy, without writing code. Power BI, Excel and Grafana each read a table from a web address with two headers, and Omaya gives the two tables they need as CSV.

The two tables ​

AddressOne row perUse it for
/api/v1/occupancy/hourly?format=csvZone and hourYour own charts: busiest hours, rooms side by side, trends. Up to 31 days a call
/api/v1/space/utilisation?format=csvZoneThe Space Utilisation report as a table: occupied share, typical and peak headcount, capacity, cost of idle space, verdict. Up to 92 days
/api/v1/space/utilisation?format=csv&table=floorsFloorRent, occupied share, cost per used m², seats needed against seats provided
/api/v1/space/utilisation?format=csv&table=buildingsBuildingThe building's class (opportunity, alert, resilient), the floors that could be given back and the sentence that explains it

Areas come in m² (area_m2, cost_per_used_m2) and, alongside, in your organisation's area unit (area, cost_per_used_area, release_area, with area_unit = m2 or sqft), so a dashboard in square feet needs no conversion.

Add &from=2026-09-01&to=2026-09-30 for a period (calendar days on your organisation's clock; the last seven days if you leave them out) and &venue_uid=… for one floor. Without format=csv the same addresses answer JSON, for anything that prefers it.

The hourly table's columns: date, hour (your local time), zone_uid, zone_name, venue_uid, venue_name, capacity, peak (the most people in the zone in that hour), source and in_operating_hours (1 when the hour is inside the venue's opening hours on an open day).

Read source before you add numbers up. sensor is a counting sensor or radar and counts everyone. presence is a presence sensor: 1 means in use, not one person. gateway counts only the people carrying a tag. A chart that adds all three as "people" will mislead someone.

Before you start ​

  1. In Omaya, open My Profile → API keys and create a key just for this dashboard, named after it (for example Power BI — facilities). If the file is ever shared too widely, you revoke that one key and nothing else breaks.
  2. Note your organisation's identifier, the one you type at the login form.
  3. Your Omaya address, for example https://omaya.example.com.

The key travels with the file

Anyone who opens the Power BI or Excel file can see the key in its query. Treat the file like a password: share the published report, not the file.

Power BI Desktop ​

  1. Home → Get data → Web.
  2. Choose Advanced.
  3. URL parts: your address followed by the table, for example https://omaya.example.com/api/v1/occupancy/hourly?format=csv&from=2026-09-01&to=2026-09-30.
  4. HTTP request header parameters: add X-Tenant-ID with your organisation's identifier, then Add header and X-Api-Key with the key.
  5. OK. If Power BI asks how to connect, choose Anonymous — the headers carry the key.
  6. In the preview, check the first row became the column names, then Load.

Check it worked: the table has one row per zone and hour, and peak is a whole number. 401 — Missing X-Tenant-ID or X-Api-Key header means a header name is mistyped; Invalid API key means the key was revoked or copied short.

A rolling period instead of fixed dates: leave from and to off for the last seven days, or build them with Power Query parameters.

Excel ​

  1. Data → Get Data → From Other Sources → From Web.
  2. Advanced, then the same URL parts and the same two headers as Power BI.
  3. OK, Anonymous if asked, then Load.

Data → Refresh All fetches the latest figures.

Grafana ​

  1. Install the Infinity data source plugin and add it as a data source.
  2. Under the data source's Headers, add X-Tenant-ID and X-Api-Key. Allow your Omaya address under Allowed hosts.
  3. In a panel: Type CSV, Source URL, and the table's address.
  4. For time series, set date and hour as the time columns or use the occupancy history endpoint per zone; see Reading data out.

How fresh the numbers are ​

The hourly table is built from the same rows as Space Utilisation: a counting sensor's hour is updated on every reading, a tag hour every fifteen minutes. Refreshing every hour is plenty; refreshing every minute fetches the same table.

Reading data out · API reference · Reports → Space Utilisation, in the app

Last updated:

Omaya platform documentation