How dashboards work

This page explains the mechanics behind the Analytics dashboard — how tabs and widgets are structured, where the layout is stored, and how widget data is fetched and refreshed. For the catalog of widget types and data sources, see Analytics. For SLA targets and thresholds, see Analytics Profile.

Anatomy of a dashboard

Every Entity has its own dashboard, stored inside that Entity’s Analytics Profile:

Analytics Profile (one per Entity)
├─ reportConfig            ← SLA targets, thresholds (see Analytics Profile)
└─ dashboardLayout
   └─ tabs
      ├─ Dashboard   (system)   → widgets + positions
      ├─ Calls List  (system)   → (built-in calls table)
      └─ <your tab>  (custom)   → widgets + positions

Each tab holds a set of widget instances and their on-screen positions (x, y, width, height on the grid).

Tabs

There are three kinds of tabs:

Kind Examples Can delete?
System Dashboard, Calls List No — always present
Preset Service Level & SLA, Abandons & Quality, Flows/Queues/Agents, Volume & Trends Yes
Custom Anything you build Yes

What happens when you…

  • Create a tab — Heedify adds a new tab entry to dashboardLayout.tabs (with a generated id). Pick a blank tab or a preset template.
  • Rename a tab — updates the tab’s display name in place.
  • Reorder tabs — the tab bar order is the stored order; rearranging changes it.
  • Delete a tab — removes the tab and every widget instance on it, then drops you back to the Dashboard tab. This cannot be undone once saved.

System tabs (Dashboard, Calls List) cannot be removed; preset and custom tabs persist per Entity and are preserved when default layouts are reset.

Widget instances

When you add a widget to a tab you create a widget instance — a configured copy of a catalog widget. Each instance stores:

Property Meaning
Widget type Which catalog widget it is (metric, chart, table…)
Data source The predefined query that feeds it
Name The title shown on the widget header
Tab Which tab it belongs to
Enabled Whether it fetches and renders
Filters Global dashboard filters, or a custom period + flow/queue/agent overrides
Refresh interval How often it re-fetches (seconds)
Position x, y, width, height on the grid

The same catalog widget can be added many times with different filters — e.g. “Total Calls — last 7 days” next to “Total Calls — last 30 days”.

Editing and saving the layout

The dashboard has a view mode and an edit mode:

  1. Click Edit Layout to enter edit mode.
  2. Add widgets, drag to move/resize, create or rename tabs, change widget config.
  3. Click Save Layout to persist.

Changes made in edit mode are local until you click Save Layout. Save Layout writes the entire dashboardLayout back to the Entity’s Analytics Profile. Leaving edit mode without saving discards the changes.

To avoid overwriting concurrent edits, Heedify re-reads the current profile before writing your updated layout.

Where widget data comes from

Most widgets are bound to a data source — a predefined query (see Available analytics data) executed against analytics.heedify.io, the Heedify reporting backend. The flow on each load:

  1. The dashboard collects every visible, enabled widget on the active tab.
  2. For each widget it builds the request filters — either the global dashboard filters (date range, timezone, flow/queue/agent) or the widget’s own custom period and filters when Use Global Dashboard Filters is off.
  3. All those widget queries are sent in one batched request to the reporting backend (faster than one call per widget).
  4. The backend runs each predefined query over the tenant’s historical call data and returns the rows.
  5. Each widget transforms its rows into the right shape (metric value, chart series or table) and renders.

Results are cached briefly (about a minute) per filter combination, so switching tabs or nudging a widget doesn’t re-run identical queries. Each widget then re-fetches on its own refresh interval.

Widgets that don’t run a query

A few widgets (and the metric color thresholds) read configured values straight from the Entity’s Analytics Profile reportConfig — for example the SLA target or the wait/talk/abandon thresholds — instead of querying call history. Those update as soon as you change them in the Analytics Profile, no historical query involved.

Historical vs realtime

Surface Data source Nature
Analytics dashboards (this page) analytics.heedify.io predefined queries Historical, aggregated, cached ~1 min
Calls List tab Historical call records Per-call list for the period
Realtime Dashboard Live queue/agent events Live, separate from analytics
Metric thresholds / SLA Analytics Profile reportConfig Configured values

The Analytics dashboard is historical reporting. For live queue and agent state, use the Realtime Dashboard.

FAQ

Q: Where is my dashboard layout saved? A: In the Entity’s Analytics Profile, under dashboardLayout.tabs — every tab, its widget instances, and each widget’s position/size. Per-Entity, and preserved across default-layout resets.

Q: Why didn’t my dashboard change stick? A: Layout edits are local until you click Save Layout. Save Layout writes the whole layout back to the profile; leaving edit mode without saving discards the changes.

Q: How long is report data retained? A: Report data is retained for 365 days by default. Contact sales@heedify.io if you need a longer retention period.

Works with: Microsoft Teams, analytics.heedify.io, Analytics, Analytics Profile, Realtime Dashboard. </content>