Evolve FM is now Zenith. We’ve brought the product under our company name. Same software, same team — new name as of September 1, 2026.
Zenith · Reports & Analytics

A report stores the question. Not the answer.

Every figure on these screens is computed from the registers at the moment somebody asks — folded out of the same rows the working screens read, so a tile can never disagree with the register a click lands on. And every answer arrives with its receipt: what it started from, and what each filter took out.

Bilingual EN / FR · Multi-site · WCAG 2.2 AA
The receipt
Every answer says what it started from, and what each filter removed
6 domains
Work orders, requests, preventive, inventory, labour and asset analytics
0 caches
Nothing stores an answer — a stale number with a confident face is worse than a slow one
EN · FR
Fully bilingual from the foundation, not a bolted-on translation
Saved questions, answered live

Six things make a report

A report is a question you keep, not a spreadsheet you exported. It names a register, the fields you want, the filters that narrow it and the shape of the answer — and the answer is computed when somebody opens it, from the live registers, every time.

01

A source

One register: work orders, requests, assets, parts, purchase orders or projects. Each is flattened with the same helpers its own screen uses, so “open” means on the report exactly what it means on the register page.

02

Columns

The fields the table shows. Every field the source has, including the derived ones — open, overdue, site, order value — because those are the answers people actually want.

03

Filters, in order

Applied one after another, each one's removals counted separately. The order is visible because it is part of the answer.

04

One grouping

Group by a field and the groups sort largest first. One level, deliberately — a report you can read aloud beats a pivot nobody can reproduce.

05

Count or sum

Count the rows, or sum a named number field — and only number fields are offered, so a sum over text is never assembled by accident.

06

A refusal, not a guess

A filter naming a field the source does not have refuses rather than silently matching nothing. Zero rows is an answer, and it is the wrong one.

The receipt

“Open work by site: 14” convinces nobody

Not until it also says it started from thirty-one work orders, and which filter removed which seventeen. So every answer prints its receipt: the rows the source offered, then one line per filter with what it took out, in the order applied. A filter that removed nothing is as informative as one that removed half the register.

  • Computed live, cached never — a stored answer is a cache with an opinion about staleness, and a stale number with a confident face is worse than a slow one.
  • The answer moves while you build the question — change a filter's value and the result and its receipt recompute beside you as you type.
  • A report cannot disagree with the register — each source is flattened with the same helpers the owning screen uses, so the report and the page it links to are reading one definition of “open”.
  • Groups sum to the total — by construction, not by reconciliation, and the ordering is stated rather than chosen.
Refuses rather than pretends

Zero rows is an answer, and a wrong one

A report whose filter names a field the source does not have has to refuse. The alternative — matching nothing and printing a confident zero — is the failure mode that makes people stop trusting reports, because it looks exactly like good news.

  • The refusal is a sentence — it names the field and where it was used, so the fix is obvious rather than a hunt.
  • A sum needs a field, and only numbers are offered — the picker filters to number fields, so the invalid version cannot be assembled in the first place.
  • Widgets inherit it — a dashboard tile whose report cannot run says so on its face rather than showing an empty chart that reads as “nothing wrong”.
  • The refusal is checked, not cached — edit the report and the tile stops complaining the moment the definition is valid again.
The operations dashboard

Six domains, and every number folds out of the register

Work orders, service requests, preventive maintenance, inventory, labour and asset analytics — each with its own period and tiles that open the register they were computed from. The difference from most dashboards is where the numbers come from: not a server procedure returning a figure nobody can check, but the same stores the working screens read.

Work orders

What is open, and what closed

Open, in progress, on hold, awaiting approval, overdue, finished in the period — with open work by status and by priority, and raised versus finished across the window.

Service requests

The funnel, honestly

Requests reported in the period followed through: submitted, acknowledged, accepted, converted to work — and whether that work actually finished.

Preventive

Compliance against the line

Month by month against the 90% target, the overdue schedules worst-first, and what falls due in the next thirty days.

Inventory

Out, low, healthy

Judged on available rather than on hand — with the parts that carry no reorder point counted and named rather than quietly folded into “healthy”.

Labour

Hours, and where they went

Hours logged, technicians who logged them, hours per finished job, hours by craft, and estimated against actual by work type.

Asset analytics

Fleet health and the bad actors

Machines with open issues, mean repair time over twelve months, the planned-to-reactive mix, and the equipment doing the damage.

Enterprise, then one site

A total that is the sum of its sites by construction

One row per site — open, overdue, in progress and ninety-day PM compliance — each figure computed by the same folds the site's own dashboard uses. An enterprise number that is not the sum of its site numbers is a bug this makes impossible to write. Pick a row and every figure on the page narrows to that site.

  • Site is applied at the source, not as a mask — the same figures, narrowed the same way the registers narrow, rather than an enterprise number with a filter drawn over it.
  • Tiles open the register they came from — the number and the rows it counted are one click apart.
  • Receipts here too — “3 cancelled work orders excluded”, “2 stocked parts have no reorder point and are not judged”, “4 finished jobs had no estimate and are excluded — unestimated is not free”.
  • A figure that cannot be computed says so — “Cannot be computed — no failures with repair time on record”, rather than a zero somebody will act on.
No chart library

Every mark is a rectangle, an arc or a polyline

The dashboard this replaced carried a charting library. This one carries none: donuts, trend lines, ranked bars and stacked segments are inline SVG and CSS the platform draws itself. That is a page which loads fast, prints predictably, follows your theme, and cannot break because somebody else shipped a new major version.

  • The palette comes from your design tokens — six colours, cycled, so a dark theme is a variable change rather than a second stylesheet.
  • Every chart has a text equivalent beside it — legends carry the counts and the shares, so nothing is only expressed as a colour.
  • Nothing is fetched to render a figure — no CDN, no third-party bundle, and no external script that gets to see your data on its way past.
  • Trend buckets widen with the window — weekly, then fortnightly, then monthly, so a year reads as twelve marks rather than fifty-two.
The home page

Composed by role, not arranged by hand

“Role workspace” usually means a settings screen where somebody arranges tiles — which is a feature for the two people who will ever use it. What a technician needs on a Monday and what a planner needs are different pages, and the product already knows which one is signed in.

  • Modules contribute panels; the page renders whatever announced itself — instead of a hard-coded list of imports from every module, which is the coupling every home screen eventually becomes.
  • Three roles means three sets of panels — in role order, because that is what a working supervisor who also holds tools actually is, and each panel appears once rather than three times.
  • One date window, every tile — with “all” as the default, because a count of open work is a statement about now rather than about a window.
  • Legend rows are doors — clicking a slice opens the register already wearing that filter, rather than leaving you to rebuild it.
And the rest of it

Everything around the number

A dashboard is a wall of reports

Put a saved question on a wall as a number, a bar list or a table, and reorder it. A widget owns no data — it names a report and a shape, so improving the report improves every wall it hangs on.

Tiles that open the register

Twenty of them, each landing on the screen its figure was folded from — because the second question after “how many?” is always “which ones?”.

Quick reports on the rail

Every saved question sits beside the dashboard, one click from a live answer — so the report library and the dashboard finally share one definition of a report.

Periods that mean what they say

Today, this week, last seven days, this month, last thirty, last three months, this year — with Monday-based weeks and real calendar months, not rolling approximations of them.

Trends that read at any width

Buckets widen with the window — weekly, then fortnightly, then monthly — so a year reads as twelve marks rather than fifty-two ticks nobody can distinguish.

The target is drawn, not implied

The PM compliance trend draws the 90% line, so “are we above it?” is a glance rather than an arithmetic exercise performed by everyone in the room separately.

Colour that means something

Thresholds are stated rather than felt, and a figure inside its tolerance is not coloured for attention — because colouring everything teaches people that the colours mean nothing.

Your words, everywhere

Rename Work Order, Asset or Storeroom and every label on every tile follows — never what a filter matches on.

Switchable per site

The operations dashboard can be turned off for a site, and the message says exactly where an administrator turns it back on. Saved reports are unaffected.

Enterprise foundations

Numbers somebody can reproduce

Analytics is the module where trust is won and lost fastest. One figure that cannot be traced back to rows, one total that does not match its parts, and every number on the screen becomes decoration for the rest of the year.

Answers, never caches

Nothing stores a computed figure. Every number is folded when it is asked for, so there is no staleness to reason about and no refresh to remember.

Folded from the same rows

A report, a tile and the register page share one definition of “open”, “overdue” and “available” — so they cannot tell three stories about one Tuesday.

Bilingual by birth

Full en-CA / fr-CA parity on every screen, hint, empty state and refusal — plurals handled properly, not by concatenation.

Accessible to everyone

WCAG 2.2 AA as a build rule: charts carry text equivalents, states are announced in words, and focus moves to the field an error refers to.

Designed around ISO 55000 · Asset management ISO 14224 · Reliability data WCAG 2.2 AA
Questions people actually ask

Before you book the demo

Can we export a report to Excel or PDF?
Not from the builder today, and it is the thing people ask for first. What a report gives you now is the headline, the groups, the rows and the receipt, live on screen and shareable as a link that recomputes for whoever opens it. Export lands with the server phase — along with durable storage for the definitions themselves — because a file emailed on Tuesday is a number nobody can re-derive on Thursday, and we would rather that file carried its receipt when it finally exists.
Can a report be emailed on a schedule?
Not from the report builder today. A report that arrives in somebody's inbox has to run while nobody's browser is open, which is server work — the same phase that gives report definitions durable storage and per-report permissions. What exists now is a saved question anybody can open for a live answer, and a dashboard wall that recomputes every time it is looked at.
What can a report be built over?
Six registers: work orders, service requests, assets, parts, purchase orders and projects — each with its derived fields as well as its stored ones, so “open”, “overdue”, “site” and “order value” are columns you can filter and group on rather than arithmetic you do afterwards. Each report reads one register: there are no joins, and that is deliberate. A question spanning two registers is a dashboard with two widgets, which anybody can check, rather than a join nobody can.
What filters are available?
Five operators — equals, not equals, at least, at most, contains — combined with AND, in the order you add them. Deliberately not there: OR, parentheses, and relative-date tokens. It is a query tool rather than a query language, and the receipt under the answer is only readable because each filter is a single, separate line.
Can we group by two fields, or build a pivot table?
One grouping level, with count or sum. There are no crosstabs, no nested groups and no subtotal rows. That is a real limit and worth knowing before you buy: if your reporting practice is built on multi-dimensional pivots, this is not that tool yet. What it is built for is the question a maintenance manager asks out loud — “open work by site”, “purchase order value by vendor”, “overdue work” — answered in a way anybody in the room can reproduce.
Why refuse instead of just showing no rows?
Because an empty table looks like good news. A filter naming a field the source does not carry will match nothing and print a confident zero, and somebody will act on it — so the report checks every column, filter, grouping and sum field before it answers, and prints the reason where the number would have been. Zero rows is an answer, and it is the wrong one.
How is the dashboard different from a report?
They are two things, on purpose. The operations dashboard is fixed: six domains of hand-built arithmetic — work orders, requests, preventive, inventory, labour, asset analytics — with period selectors, site context and tiles that open the register each figure came from. A dashboard wall is yours: saved questions arranged as numbers, bar lists and tables. Both fold out of the same live registers, so they cannot contradict each other or the screens people work on.
Who can see a report I save?
Today, everybody who can reach the analytics screen — there is no per-report ownership, no private/shared distinction, and the report engine does not narrow by site the way the operations dashboard does. Treat saved reports as shared by default. Per-report permissions and site scoping arrive with identity in the server phase, which is where users, groups and audit history belong.
Does the dashboard refresh itself?
It does not need to poll. Every section subscribes to the registers it folds, so the page moves the moment a work order is closed, a part is issued or a reading is recorded — no timer, no “last refreshed” stamp, and no cached answer waiting to go stale. That is the same property that makes the receipt trustworthy: there is only ever one copy of the number.
Do you use a charting library?
No, and on purpose. Donuts, trend lines, ranked bars and stacked segments are inline SVG and CSS drawn by the platform itself. Nothing is fetched from a CDN to render a figure, the palette comes from your theme tokens, and no third-party script sits between your data and the screen. The trade is real and we will name it: there are no interactive tooltips, no zoom, and no exotic chart types.
Why is a number sometimes blank instead of zero?
Because a blank and a zero are different facts. PM compliance with nothing due, mean repair time with no repair history, hours-per-finished-job with nothing finished — each of those is unknown, not bad, and a printed 0% is a crisis somebody will act on. Where there is room, the screen says why: “Cannot be computed — no failures with repair time on record.”
Can we report on PM schedules, meters or labour hours?
Not as report sources yet — those live on the operations dashboard as computed sections with their own tiles, trends and drill-downs. The six report sources are work orders, requests, assets, parts, purchase orders and projects. Adding a source is additive rather than structural: a register is flattened once, with its own derived fields, and everything downstream — filters, grouping, the receipt, the widgets — works on it unchanged.
See it on a number you already argue about

Bring the figure nobody can reproduce.

Every organization has one — the compliance percentage that changes depending on who ran it, or the backlog that is forty-one in one report and thirty-eight in another. Give us the question and we'll show you the answer with its receipt: what it started from, and exactly what each filter took out.

Zenith · Reports & Analytics Part of the Zenith maintenance & asset operations platform
+------------------------------------------------------+ | IMAGE: the hero image URL lives in ONE place - the | | "IMAGE URLS - EDIT HERE" block a few lines below. | | Upload the image in WordPress (Media > Add New), | | copy its URL, paste it between the url("..."). | +------------------------------------------------------+ CTA buttons link to https://zenithsoftware.ca/contact-us/ All CSS is scoped under .evn-am so it cannot affect the rest of your Divi theme. ============================================================ -->
Zenith · Reports & Analytics

A report stores the question. Not the answer.

Every figure on these screens is computed from the registers at the moment somebody asks — folded out of the same rows the working screens read, so a tile can never disagree with the register a click lands on. And every answer arrives with its receipt: what it started from, and what each filter took out.

Bilingual EN / FR · Multi-site · WCAG 2.2 AA
The receipt
Every answer says what it started from, and what each filter removed
6 domains
Work orders, requests, preventive, inventory, labour and asset analytics
0 caches
Nothing stores an answer — a stale number with a confident face is worse than a slow one
EN · FR
Fully bilingual from the foundation, not a bolted-on translation
Saved questions, answered live

Six things make a report

A report is a question you keep, not a spreadsheet you exported. It names a register, the fields you want, the filters that narrow it and the shape of the answer — and the answer is computed when somebody opens it, from the live registers, every time.

01

A source

One register: work orders, requests, assets, parts, purchase orders or projects. Each is flattened with the same helpers its own screen uses, so “open” means on the report exactly what it means on the register page.

02

Columns

The fields the table shows. Every field the source has, including the derived ones — open, overdue, site, order value — because those are the answers people actually want.

03

Filters, in order

Applied one after another, each one's removals counted separately. The order is visible because it is part of the answer.

04

One grouping

Group by a field and the groups sort largest first. One level, deliberately — a report you can read aloud beats a pivot nobody can reproduce.

05

Count or sum

Count the rows, or sum a named number field — and only number fields are offered, so a sum over text is never assembled by accident.

06

A refusal, not a guess

A filter naming a field the source does not have refuses rather than silently matching nothing. Zero rows is an answer, and it is the wrong one.

The receipt

“Open work by site: 14” convinces nobody

Not until it also says it started from thirty-one work orders, and which filter removed which seventeen. So every answer prints its receipt: the rows the source offered, then one line per filter with what it took out, in the order applied. A filter that removed nothing is as informative as one that removed half the register.

  • Computed live, cached never — a stored answer is a cache with an opinion about staleness, and a stale number with a confident face is worse than a slow one.
  • The answer moves while you build the question — change a filter's value and the result and its receipt recompute beside you as you type.
  • A report cannot disagree with the register — each source is flattened with the same helpers the owning screen uses, so the report and the page it links to are reading one definition of “open”.
  • Groups sum to the total — by construction, not by reconciliation, and the ordering is stated rather than chosen.
Refuses rather than pretends

Zero rows is an answer, and a wrong one

A report whose filter names a field the source does not have has to refuse. The alternative — matching nothing and printing a confident zero — is the failure mode that makes people stop trusting reports, because it looks exactly like good news.

  • The refusal is a sentence — it names the field and where it was used, so the fix is obvious rather than a hunt.
  • A sum needs a field, and only numbers are offered — the picker filters to number fields, so the invalid version cannot be assembled in the first place.
  • Widgets inherit it — a dashboard tile whose report cannot run says so on its face rather than showing an empty chart that reads as “nothing wrong”.
  • The refusal is checked, not cached — edit the report and the tile stops complaining the moment the definition is valid again.
The operations dashboard

Six domains, and every number folds out of the register

Work orders, service requests, preventive maintenance, inventory, labour and asset analytics — each with its own period and tiles that open the register they were computed from. The difference from most dashboards is where the numbers come from: not a server procedure returning a figure nobody can check, but the same stores the working screens read.

Work orders

What is open, and what closed

Open, in progress, on hold, awaiting approval, overdue, finished in the period — with open work by status and by priority, and raised versus finished across the window.

Service requests

The funnel, honestly

Requests reported in the period followed through: submitted, acknowledged, accepted, converted to work — and whether that work actually finished.

Preventive

Compliance against the line

Month by month against the 90% target, the overdue schedules worst-first, and what falls due in the next thirty days.

Inventory

Out, low, healthy

Judged on available rather than on hand — with the parts that carry no reorder point counted and named rather than quietly folded into “healthy”.

Labour

Hours, and where they went

Hours logged, technicians who logged them, hours per finished job, hours by craft, and estimated against actual by work type.

Asset analytics

Fleet health and the bad actors

Machines with open issues, mean repair time over twelve months, the planned-to-reactive mix, and the equipment doing the damage.

Enterprise, then one site

A total that is the sum of its sites by construction

One row per site — open, overdue, in progress and ninety-day PM compliance — each figure computed by the same folds the site's own dashboard uses. An enterprise number that is not the sum of its site numbers is a bug this makes impossible to write. Pick a row and every figure on the page narrows to that site.

  • Site is applied at the source, not as a mask — the same figures, narrowed the same way the registers narrow, rather than an enterprise number with a filter drawn over it.
  • Tiles open the register they came from — the number and the rows it counted are one click apart.
  • Receipts here too — “3 cancelled work orders excluded”, “2 stocked parts have no reorder point and are not judged”, “4 finished jobs had no estimate and are excluded — unestimated is not free”.
  • A figure that cannot be computed says so — “Cannot be computed — no failures with repair time on record”, rather than a zero somebody will act on.
No chart library

Every mark is a rectangle, an arc or a polyline

The dashboard this replaced carried a charting library. This one carries none: donuts, trend lines, ranked bars and stacked segments are inline SVG and CSS the platform draws itself. That is a page which loads fast, prints predictably, follows your theme, and cannot break because somebody else shipped a new major version.

  • The palette comes from your design tokens — six colours, cycled, so a dark theme is a variable change rather than a second stylesheet.
  • Every chart has a text equivalent beside it — legends carry the counts and the shares, so nothing is only expressed as a colour.
  • Nothing is fetched to render a figure — no CDN, no third-party bundle, and no external script that gets to see your data on its way past.
  • Trend buckets widen with the window — weekly, then fortnightly, then monthly, so a year reads as twelve marks rather than fifty-two.
The home page

Composed by role, not arranged by hand

“Role workspace” usually means a settings screen where somebody arranges tiles — which is a feature for the two people who will ever use it. What a technician needs on a Monday and what a planner needs are different pages, and the product already knows which one is signed in.

  • Modules contribute panels; the page renders whatever announced itself — instead of a hard-coded list of imports from every module, which is the coupling every home screen eventually becomes.
  • Three roles means three sets of panels — in role order, because that is what a working supervisor who also holds tools actually is, and each panel appears once rather than three times.
  • One date window, every tile — with “all” as the default, because a count of open work is a statement about now rather than about a window.
  • Legend rows are doors — clicking a slice opens the register already wearing that filter, rather than leaving you to rebuild it.
And the rest of it

Everything around the number

A dashboard is a wall of reports

Put a saved question on a wall as a number, a bar list or a table, and reorder it. A widget owns no data — it names a report and a shape, so improving the report improves every wall it hangs on.

Tiles that open the register

Twenty of them, each landing on the screen its figure was folded from — because the second question after “how many?” is always “which ones?”.

Quick reports on the rail

Every saved question sits beside the dashboard, one click from a live answer — so the report library and the dashboard finally share one definition of a report.

Periods that mean what they say

Today, this week, last seven days, this month, last thirty, last three months, this year — with Monday-based weeks and real calendar months, not rolling approximations of them.

Trends that read at any width

Buckets widen with the window — weekly, then fortnightly, then monthly — so a year reads as twelve marks rather than fifty-two ticks nobody can distinguish.

The target is drawn, not implied

The PM compliance trend draws the 90% line, so “are we above it?” is a glance rather than an arithmetic exercise performed by everyone in the room separately.

Colour that means something

Thresholds are stated rather than felt, and a figure inside its tolerance is not coloured for attention — because colouring everything teaches people that the colours mean nothing.

Your words, everywhere

Rename Work Order, Asset or Storeroom and every label on every tile follows — never what a filter matches on.

Switchable per site

The operations dashboard can be turned off for a site, and the message says exactly where an administrator turns it back on. Saved reports are unaffected.

Enterprise foundations

Numbers somebody can reproduce

Analytics is the module where trust is won and lost fastest. One figure that cannot be traced back to rows, one total that does not match its parts, and every number on the screen becomes decoration for the rest of the year.

Answers, never caches

Nothing stores a computed figure. Every number is folded when it is asked for, so there is no staleness to reason about and no refresh to remember.

Folded from the same rows

A report, a tile and the register page share one definition of “open”, “overdue” and “available” — so they cannot tell three stories about one Tuesday.

Bilingual by birth

Full en-CA / fr-CA parity on every screen, hint, empty state and refusal — plurals handled properly, not by concatenation.

Accessible to everyone

WCAG 2.2 AA as a build rule: charts carry text equivalents, states are announced in words, and focus moves to the field an error refers to.

Designed around ISO 55000 · Asset management ISO 14224 · Reliability data WCAG 2.2 AA
Questions people actually ask

Before you book the demo

Can we export a report to Excel or PDF?
Not from the builder today, and it is the thing people ask for first. What a report gives you now is the headline, the groups, the rows and the receipt, live on screen and shareable as a link that recomputes for whoever opens it. Export lands with the server phase — along with durable storage for the definitions themselves — because a file emailed on Tuesday is a number nobody can re-derive on Thursday, and we would rather that file carried its receipt when it finally exists.
Can a report be emailed on a schedule?
Not from the report builder today. A report that arrives in somebody's inbox has to run while nobody's browser is open, which is server work — the same phase that gives report definitions durable storage and per-report permissions. What exists now is a saved question anybody can open for a live answer, and a dashboard wall that recomputes every time it is looked at.
What can a report be built over?
Six registers: work orders, service requests, assets, parts, purchase orders and projects — each with its derived fields as well as its stored ones, so “open”, “overdue”, “site” and “order value” are columns you can filter and group on rather than arithmetic you do afterwards. Each report reads one register: there are no joins, and that is deliberate. A question spanning two registers is a dashboard with two widgets, which anybody can check, rather than a join nobody can.
What filters are available?
Five operators — equals, not equals, at least, at most, contains — combined with AND, in the order you add them. Deliberately not there: OR, parentheses, and relative-date tokens. It is a query tool rather than a query language, and the receipt under the answer is only readable because each filter is a single, separate line.
Can we group by two fields, or build a pivot table?
One grouping level, with count or sum. There are no crosstabs, no nested groups and no subtotal rows. That is a real limit and worth knowing before you buy: if your reporting practice is built on multi-dimensional pivots, this is not that tool yet. What it is built for is the question a maintenance manager asks out loud — “open work by site”, “purchase order value by vendor”, “overdue work” — answered in a way anybody in the room can reproduce.
Why refuse instead of just showing no rows?
Because an empty table looks like good news. A filter naming a field the source does not carry will match nothing and print a confident zero, and somebody will act on it — so the report checks every column, filter, grouping and sum field before it answers, and prints the reason where the number would have been. Zero rows is an answer, and it is the wrong one.
How is the dashboard different from a report?
They are two things, on purpose. The operations dashboard is fixed: six domains of hand-built arithmetic — work orders, requests, preventive, inventory, labour, asset analytics — with period selectors, site context and tiles that open the register each figure came from. A dashboard wall is yours: saved questions arranged as numbers, bar lists and tables. Both fold out of the same live registers, so they cannot contradict each other or the screens people work on.
Who can see a report I save?
Today, everybody who can reach the analytics screen — there is no per-report ownership, no private/shared distinction, and the report engine does not narrow by site the way the operations dashboard does. Treat saved reports as shared by default. Per-report permissions and site scoping arrive with identity in the server phase, which is where users, groups and audit history belong.
Does the dashboard refresh itself?
It does not need to poll. Every section subscribes to the registers it folds, so the page moves the moment a work order is closed, a part is issued or a reading is recorded — no timer, no “last refreshed” stamp, and no cached answer waiting to go stale. That is the same property that makes the receipt trustworthy: there is only ever one copy of the number.
Do you use a charting library?
No, and on purpose. Donuts, trend lines, ranked bars and stacked segments are inline SVG and CSS drawn by the platform itself. Nothing is fetched from a CDN to render a figure, the palette comes from your theme tokens, and no third-party script sits between your data and the screen. The trade is real and we will name it: there are no interactive tooltips, no zoom, and no exotic chart types.
Why is a number sometimes blank instead of zero?
Because a blank and a zero are different facts. PM compliance with nothing due, mean repair time with no repair history, hours-per-finished-job with nothing finished — each of those is unknown, not bad, and a printed 0% is a crisis somebody will act on. Where there is room, the screen says why: “Cannot be computed — no failures with repair time on record.”
Can we report on PM schedules, meters or labour hours?
Not as report sources yet — those live on the operations dashboard as computed sections with their own tiles, trends and drill-downs. The six report sources are work orders, requests, assets, parts, purchase orders and projects. Adding a source is additive rather than structural: a register is flattened once, with its own derived fields, and everything downstream — filters, grouping, the receipt, the widgets — works on it unchanged.
See it on a number you already argue about

Bring the figure nobody can reproduce.

Every organization has one — the compliance percentage that changes depending on who ran it, or the backlog that is forty-one in one report and thirty-eight in another. Give us the question and we'll show you the answer with its receipt: what it started from, and exactly what each filter took out.

Zenith · Reports & Analytics Part of the Zenith maintenance & asset operations platform

Standards are named by number, title and scope only. CSA and ULC publications are paywalled — read the standard itself before building a compliance programme on any summary.