Overview

Last updated 25 May 2026

A Flexie report producing both a data grid and a fully custom HTML page from the same saved query

A report in Flexie is a saved query plus a presentation. When someone opens it, Flexie runs the query, applies any user-supplied filters, and shows the result in one of two forms: a data grid (a sortable, filterable, exportable table) or a fully custom HTML page you wrote yourself.

What a report turns into

A single report can be used as:

There is no separate BI tool to learn; reports live alongside everything else.

The two output formats

When you create a report you pick one of two output formats. This is the central decision and changes both what you write and what the report can do.

Output format What you write What gets rendered When to use it
Data Grid (default) A SELECT query A sortable, filterable, paginated table Lists, exports, anything tabular
HTML HTML + CSS + JavaScript with Flexie Scripting Whatever you wrote, rendered as a page Fully custom layouts: cards, dashboards, kanban boards, anything you can build with web technology

You can mix and match in your account: some reports are grids, others are fully bespoke HTML pages. They are stored in the same table and listed together.

The output format is fixed for the life of the report. Once a report exists as a grid you can't flip it to HTML; create a new report if you need to switch.

What every report has

Whether it is a grid or HTML, every report has:

The lifecycle of a report

  1. Create at /reports/new, writing a query or HTML template.
  2. Open at /reports/view/{id}. Sort, filter, paginate, export to CSV.
  3. Refine the filters, sort, and columns and save.
  4. Reuse as a dashboard widget, or query it from a script.

The data refreshes on every open, so there is no stale-cache surprise. Heavy queries are protected by a hard 1,000-row cap (see Restrictions).

What is in this section

  1. Data Grid reports: writing the SELECT, the placeholder variables Flexie injects for you ({user_id}, {group_id}, {role_id}, {timezone}), the {filters} substitution, what queries are allowed and what is blocked, default sorting, and column ordering at view time.
  2. HTML reports: building a fully custom report from HTML + CSS + JavaScript with Flexie Scripting; using the full Flexie Scripting toolkit inside the template; calling multiple data lookups and weaving the results together; the security model.
  3. Viewing, exporting & access: the view page, sorting and pagination, CSV export, and the "Who can access this report?" permission model.
  4. Reports in workflows and dashboards: using a saved report as a dashboard widget (with six visualisation subtypes), pulling its data from a Flexie Scripting context, and the getReportData(...) accessor.
  5. Report filters (in depth): user-input filters above the grid. The JSON shape, the six filter types and their operators, the three substitution modes ({filters} placeholder, automatic, and manual), and, uniquely, using Flexie Scripting inside the filter JSON to build dynamic option lists, conditional filters, and date-aware labels.

Closely related