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:
- Click Edit Layout to enter edit mode.
- Add widgets, drag to move/resize, create or rename tabs, change widget config.
- Click Save Layout to persist.
Changes made in edit mode are local until you click Save Layout. Save Layout writes the entire
dashboardLayoutback 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:
- The dashboard collects every visible, enabled widget on the active tab.
- 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.
- All those widget queries are sent in one batched request to the reporting backend (faster than one call per widget).
- The backend runs each predefined query over the tenant’s historical call data and returns the rows.
- 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>