Skip to content
lurno
Reporting and analytics

Ask a question. Get a report you can put in front of a board.

Type what you want to know the way you would say it. What comes back is a real report you can chart, export and keep on a dashboard — and every number in it is defined once, so two people asking the same question get the same answer.

How it works

You write the question. The agent writes the report.

There is no query builder to learn and nobody to wait for. Ask, and you get something you can open, arrange on a board and send to whoever asked you for it.

The agent writes the report, not the answer — it never reads your data itself. It proposes a report definition, and that proposal runs through exactly the same checks as a report you built by hand: the same definitions, and the same permissions. So it cannot invent a number, and it cannot show you an organisation you were not already allowed to see.

Book a demo
Which departments are behind on compliance training this quarter?

3 of 9 departments below 80% complete

Grouped by department, this quarter to date.

Operations
96%
Finance
91%
Field Services
74%
Logistics
68%

Illustrative. Department names and figures are examples. Reporting and AI features are switched on per organisation by your administrator.

Why the number holds up

One definition per number, written down once

Lurno reporting is a read-only projection over a certified metric registry. Every metric — completion rate, time on task, seat utilisation, overdue compliance — is defined once in code, with one source view, one aggregation and a closed list of dimensions it may be grouped by. Certified reports, dashboard widgets, exports and answers from the plain-language question bar all resolve through the same validator and the same compiler, so a tile on a board and a figure in a spreadsheet cannot be computed two different ways. Reporting is enabled per organisation, and every query runs as the person reading it under the same row-level permissions that govern the rest of the platform.

Certified metric
A metric definition with a committed golden fixture behind it: a hand-checked expected result the build re-runs on every change. A metric may only carry the certified flag once its fixture exists. Uncertified metrics still run, but they are labelled Ungoverned, so nobody quotes one in a board paper by accident.

The registry is the design. A metric names one view, one column, one aggregation, and the dimensions it may be grouped by. Anything outside that list is refused, not guessed at. Rates are a numerator over a denominator on the same view, never an average of averages. Ids are never reused: a replaced metric is deprecated and superseded.

One query touches one view. Figures that span two grains are stitched at render time, never joined in SQL — which is what stops a fan-out doubling a count. The same views feed assessments, credentials and the guardian portal.

What you get

Registry, boards, questions, exports

The registry

Metrics are code, reviewed like code

32 metric definitions live in one reviewed file, each with its source view, its aggregation, the dimensions it may be grouped by, and a privacy classification. Adding a metric is a pull request, not an admin form.

  • 13 certified reports ship as templates: completion rate, overdue compliance, active learners, time on task, enrolment funnel, seat utilisation.
  • No metric is marked certified without a committed golden fixture.
Dashboards

Boards you arrange yourself

Drag and resize widgets on a grid. Keep as many named boards as you need — one for the compliance review, one per client company.

  • Each widget runs its own query, so one failure shows an inline retry instead of blanking the board.
  • Layouts are stored once, left-to-right, and mirrored at render for Arabic — including the drag grid.
Ask your data

A question in plain language, not a query language

Type the question. A model reads a description of the registry and proposes a report specification: measures, dimensions, filters, a chart type. It never writes SQL and never runs a query. The proposal goes back through the ordinary reporting door — same validator, same compiler, same permissions.

  • Ask for something the registry does not model and it refuses, then names the nearest metric it holds.
  • Answers are badged Ungoverned (AI), never Certified, and every run lands in an append-only log with its own request id.
How AI works across Lurno
Export

Take the numbers out

Export the rows on screen to CSV, formatted for your locale or raw for re-import. Larger jobs queue: the job stores the specification and who asked for it, never a result set and never a copy of their permissions.

  • At drain time the worker re-checks the requester's access and runs the query as them. If it shrank, the job fails and no file is written.
Accessibility

Charts that also work as text

Every chart carries a screen-reader data table beneath it, with real row and column semantics, so figures are reachable by keyboard and by assistive technology rather than only by hovering a tooltip. Series stay distinguishable without colour.

  • WCAG 2.1 AA is the target, with automated axe checks in CI. English, French, Arabic and Italian, formatted per locale in exports as well as on screen.
Next

Board packs and scheduled delivery

PDF board packs, XLSX export and reports that arrive on a schedule are designed and partly built. The queue and the worker they need already run for CSV. Talk to us if a Monday-morning PDF gates your rollout.

Governance

A certified report and an AI answer, side by side

Both take the same road to the database. What differs is where the question came from and how the answer is labelled.

CapabilityCertified reportAnswer from the question bar
Where the definition comes fromThe metric registry, in codeThe metric registry, in code
Who writes the queryA reviewed report templateA model proposes a specification; it never writes SQL
Validator and compilerThe same oneThe same one
Runs as the person reading itYesYes
Badge on screenCertifiedUngoverned (AI)
Appears in the AI run logNoEvery run, with a request id
Can be added to a board and exportedYesYes

Both refuse a metric that is not in the registry, and both suppress small cells on metrics carrying a re-identification risk.

Governance

Built for the person who has to defend the number

Runs as the reader

Every query executes with the reader's own claims through a restricted database role. Nothing runs on a connection that can step around those limits.

Small cells disappear

Metrics that could re-identify a person — including wellbeing case counts — group only above a minimum size. Below it the cell is suppressed, not rounded.

One number for staff, guardians and learners

A learner's progress, their guardian's read-only view and the administrator's completion report read the same certified views. A guardian is scoped on the server to one verified dependent.

Read-only by design

The reporting API cannot grade, release, acknowledge or message. Those actions stay in the modules that own them.

Stamped in your own clock

Results carry an 'as of' timestamp in the organisation's timezone. A Milan parent and its Dubai sub-organisation each bucket their days by their own clock.

Enabled per organisation

Reporting is switched on organisation by organisation. Where it is off the navigation is not there, and if the check cannot be answered it fails closed to off.

Questions buyers ask

Before you put this in front of a board

Not through a difference in definition. Every path — a certified report, a dashboard widget, an export, an answer from the question bar — resolves through the same validator and the same compiler. What legitimately differs is scope: the query runs as the reader, so a branch manager's completion rate covers their branch.

See it against the report your board actually asks for.

Bring the figure someone asks you for every month. We will show you which certified metric it maps to, or say plainly that it is not modelled yet.