Dashboards
A dashboard puts several widgets — figures, decision lists, proportion bars, charts, tables — side by side, each fed by a query of a connector. It opens from the menu like a screen, and it is built in Liberty Next → Build → Dashboards.
At a glance
Widgets
Widgets sit on a 12-column grid, in the order they are declared. Each one takes a width of 1 to 12 columns and a height of 1 to 8 rows, and carries a title and an optional subtitle — one line under the title that says what the widget covers.
| Widget | Shows | Settings |
|---|---|---|
| KPI | One figure computed over every row of a query. | Connector, query, column, aggregation (count, sum, avg, min, max, or none for the first row's value), format, and compare with the previous period. |
| Figure | A figure card read from the query's first row, with a line of detail under it. | Value column, Format, Unit, Sub line. |
| List | A decision or ranked list: one line per row, with a coloured dot, a title, a subtitle, a figure and a tag. | Title column (required), Subtitle column, Value column, format, unit, Count column and Count wording, Tone column, Tag column, Rows shown. |
| Bars | A ranked list with a proportion bar under each row. | Label column and Value column (required), Sub label column, format, unit, Bar as a share of, Note under the bars, Rows shown. |
| Chart | A bar, line, area or pie chart. | A chart saved in Liberty Next → Build → Charts, or a connector, a query and a chart definition written in the widget — see Charts. |
| Table | The rows of a query. | Connector, query, the columns to show (all when empty), a row limit. |
| Text | A block of Markdown: what the page is for, how to read it. Headings, lists and links are allowed. | Text (Markdown). |
| Jobs | The Nomaflow jobs with their next run, their schedule in words and their last state, and Run now / Pause / Resume. Superusers only. | Jobs (ids, in order) — empty = every scheduled job —, Only these tags, Max rows (12 when blank). |
| Links | A card of entry points: menu items of the dashboard's application, or web addresses. | Links per row (1 to 4); per link a Menu item or a URL, an Icon, a Label (blank: the menu item's) and a Description. |
A widget whose query the user may not run is hidden; the rest of the dashboard still shows. Every card carries its title and subtitle inside it, and the page grows with its widgets: it scrolls to the last one.
Figure, List and Bars
These three widgets turn a dashboard into a synthesis page: the figures that matter, what needs a decision, and the proportions, each read from a query written for it.
- Format: Number, Integer, Currency (euros, no decimals for a whole amount) or Percent — a ratio between 0 and 1, shown as a percentage. The Unit follows the figure (
users,lines); a currency carries its own symbol. - Sub line (Figure): a sentence with placeholders filled from the first row,
{COLUMN}or{COLUMN:format}—{ENABLED:integer} enabled · {DISABLED:integer} disabledgives 380 enabled · 32 disabled. A placeholder naming an unknown column stays as written. - Tone column (List): a column holding
ok,warn,errororinfocolours the dot green, orange, red or blue; any other value gives a grey dot. The query decides the tone — a period that is closed, an amount above a threshold. - Count wording (List): the text around the count column,
{n} conflict lines. The Tag column shows its value as a pill next to the title, in the line's tone. - Bar as a share of (Bars): The total of the rows — the bars add up to 100 % — or The largest row, which gets the full bar.
The editor shows a live preview of the widget as soon as the connector, the query and the required columns are chosen.
Jobs
A Jobs card puts the scheduler on a dashboard. Each line shows the job — a click opens it in Nomaflow —, its next run or Paused, its schedule in words (every day at 03:00), the state of its last run, and three buttons: Run now with the job's saved values, Pause the schedule, Resume the schedule — applied at once. Without ids, the card lists the scheduled jobs, the next to run first, optionally narrowed to some tags (main, nomasx1). The card refreshes itself while a run is going.
The card is for superusers only: for anyone else, it does not show on the dashboard.
Text and Links
These two widgets turn a dashboard into the home page of an application: a few lines on what it does, the figures, then where to go.
- A Text or Links widget the full width of the grid (12 columns) takes the height of its content, with no scroll bar; a narrower one scrolls within its tile.
- A Links widget only shows the menu items the user may open: an entry their roles do not grant disappears from the card. A URL opens in a new browser tab. A URL link needs a label.
- In an export, a text keeps its Markdown and a links card becomes a table (Link, Description).
The period
A dashboard can carry a period: a date range control in its bar that applies to every widget.
- Presets: Today, Yesterday, Last 7 days, Last 30 days, This month, Last month, This quarter, This year, Last year, Last 12 months, All dates. The Yesterday preset covers yesterday and today.
- A free range: pick a start date, then an end date, in the two-month calendar, then Apply.
- Date basis: when the dashboard offers several dates (Document date, Paid on), a Date choice at the bottom of the panel picks the one the range applies to.
The dashboard opens on its own default preset, otherwise on the application's default (Liberty Next → Administer → App → Default period (dashboards), This month by default). A choice lasts as long as the dashboard tab stays open.
What the queries receive
| Bind | Value |
|---|---|
:PERIOD_FROM, :PERIOD_TO | The chosen range, as dates. All dates binds 0001-01-01 to 9999-12-31. |
:PREV_FROM, :PREV_TO | The period before (see below). |
:PERIOD_BASIS | The chosen date basis, when the dashboard offers several. |
A query that does not mention them is not affected. When the period names its date column — directly or through a dictionary item found in the widget's screen — the widget is also filtered on the server on that column, without any change to its SQL.
The previous period
| Range | Compared with |
|---|---|
| Starting on 1 January (This year, Last year) | The same dates one year earlier. |
| Starting on the 1st of a month | The same number of months just before — Last month with the month before, a whole quarter with the quarter before; This month on the 27th with the 1st–27th of the previous month. |
| Anything else | The same number of days just before. |
Comparing a KPI
With Compare with the previous period ticked, a KPI runs its query a second time on the previous period and shows, under the figure, the change — in percent, in points for a percent KPI — in green or red, and the previous value. Nothing is compared on All dates.
Filters
A dashboard can also carry filters, shown as dropdowns in its bar. Each filter has a label, a dictionary item and a query that provides its choices (value column and label column), and an optional default value. Choosing a value reloads every widget whose query returns a column carrying that dictionary item — through the widget's screen, or directly from the query's result columns: a column with the item's name, or with the connector's column prefix in front of it. The other widgets are left as they are. A period whose date column is given as a dictionary item finds its column the same way.
In the editor, each filter says which widgets it reaches — Reaches: …, with not: … for the others — or Reaches no widget when no column carries the dictionary item.
With All, nothing is filtered: a query that returns one total row first, then one row per value, shows the totals in its Figure and List widgets.
Refresh and cache
When a dashboard is opened again, each widget reuses its last result for Liberty Next → Administer → App → Dashboard cache (seconds, 0 = none) — 60 seconds by default. The ↻ button in the bar reloads everything, and Updated at 14:05 says when the data was fetched. The cache is kept in the browser, per user, until the page is reloaded.
Export to Excel and PDF
The Excel and PDF buttons, next to ↻, export what the bar holds: the filter picks, the period and its date basis, under the user's data scope. The server runs every widget again; nothing is taken from the screen.
| Excel | ||
|---|---|---|
| Layout | One sheet per widget; the KPIs together on a Key figures sheet. | A cover with the dashboard, the period and the filters, then the widgets one after the other. |
| KPI, Figure | A row of values. | A card, with the sub line in small type under the figure. |
| List, Bars, Table | Its rows. | A table. |
| Text, Links | The text; the links as rows. | The text; a table of the links. |
| Chart | Its data table. | The chart drawn, with a legend and the values on the bars. |
A widget whose query fails becomes an error section; the rest of the export still renders. Numbers follow the reader's language (1 234,5 / 1,234.5). PDF branding is set in Liberty Next → Administer → App.
Building a dashboard
In Liberty Next → Build → Dashboards, pick the application, then add or open a dashboard. The editor has:
| Part | Content |
|---|---|
| General | Title, description. |
| Period | Add a period: Opens on (a preset, or App default), Date column or dictionary item, and optional Date bases (key, label, date column or dictionary item). |
| Filters | The dropdowns of the bar. |
| Widgets | Add widget: Chart, KPI, Table, Figure, List, Bars, Text, Links or Jobs. Each widget has a Subtitle. Each widget has buttons to make it narrower or wider (W−, W+), lower or taller (H−, H+), and to move it earlier or later in the grid. |
A dashboard reads in the user's language: its title, its description, the filters' labels and the widgets' texts can carry a French version, and a List can read its titles from a French column of its query.
To make the dashboard reachable, add a dashboard entry to a menu (Menus); its permission is dashboard:<app>.<id>.
In TOML
[dashboards.sales.overview]
label = "Sales overview"
period = { column = "DOC_DATE", default = "thisMonth" }
[[dashboards.sales.overview.widgets]]
type = "kpi"
label = "Revenue"
connector = "sales"
query = "revenue_by_company_get"
column = "REVENUE"
aggregation = "sum"
compare_previous = true
col_span = 4
[[dashboards.sales.overview.widgets]]
type = "chart"
chart = "revenue_by_month"
col_span = 8
row_span = 2
Tips
- Give the dashboard a period rather than date filters in each query: one control, and the comparison comes for free.
- For a synthesis page, write one small query per Figure or List and let the query compute the tone: the dashboard only shows it.
- A KPI with
noneshows the first row's value: let the query compute the figure when the aggregation is complex. - Keep the cache on for dashboards opened often; ↻ always gives fresh figures.