Appearance
Report Module Reference
Last updated
License feature: Reporting ModuleEvery module has a Module Title in the properties panel. Data modules show their title above the content; the Header module uses it as the report title.
Header
Report title, subtitle, date and logo. Default size 24 × 3.
| Setting | What it does | Default |
|---|---|---|
| Module Title | The large report title | "Header" |
| Subtitle | Smaller line under the title | empty |
| Show generated date | Adds "Generated" and the date and time, in the appliance's local time | on |
| Logo Image | An image from the File Manager | none |
| Alignment | Left, Center, Right | Left |
Data Table
Rows from one data source. Default size 24 × 8.
| Setting | What it does | Default |
|---|---|---|
| Data Source | Alarm History, Downtime Events, Quality Events, OEE Snapshots | Alarm History |
| Date Range | See designer; Custom shows From (ISO) and To (ISO) | Report Default |
| Device (optional) | Only rows for this device | all devices |
| Max Rows | Row limit | 20 (up to 10,000) |
| Sort | Newest first or Oldest first, by the source's date column | Newest first |
| Columns (JSON array, empty = all) | Which columns to show, in order, e.g. ["fired_at", "rule_name", "value"] | [] (all) |
- Column headings are the raw database column names.
- Values that look like timestamps are shown in the appliance's local date-time format.
- The PDF prints every row returned, up to Max Rows; a long table grows and continues onto the next page (see designer). Lower Max Rows to shorten it.
- Max Rows left blank or 0 means up to 5,000 rows.
Crosstab
Pivots a data source into a matrix — for example quality rejects by reason and device. Default size 24 × 8.
| Setting | What it does | Default |
|---|---|---|
| Data Source, Date Range, Device (optional) | As for Data Table | Alarm History, Report Default, all |
| Row Field | Column whose values become rows | empty (required) |
| Column Field | Column whose values become columns | empty (required) |
| Aggregate | Count of rows, Sum, Average, Minimum, Maximum | Count of rows |
| Value Field | Column to sum, average etc. Not used for Count of rows | empty |
| Row Totals / Column Totals | Add a total column / row | on / on |
| Max Columns | Distinct column values kept; extras are dropped with "Showing X of Y columns — narrow the query or raise the column limit." | 50 |
The pivot works on at most 5,000 source rows for the range. Errors: Crosstab needs both a row field and a column field; A "sum" crosstab needs a value field.
Chart
Line, area or bar chart of historian tags. Default size 12 × 8.
| Setting | What it does | Default |
|---|---|---|
| Chart Type | Line, Area, Bar | Line |
| Chart Tags | Tags to plot, with label, color and left or right axis | none |
| Date Range | As above; Custom shows From (ISO) / To (ISO) | Report Default |
| Aggregate Window | None (raw), 1 minute, 5 minutes, 15 minutes, 1 hour, 1 day | None (raw) |
| Aggregate Fn | Mean, Max, Min, Sum, Last | Mean |
| Show Grid / Show Legend | on / on |
Tags need history turned on (Tag Historian). Without aggregation, a tag with more than 1,000 changes in the range is charted from about 1,000 averaged points spread across the whole range. Choose an Aggregate Window to pick the window and function yourself; one too small to fit the range in 2,000 points per tag is widened automatically (7 days at 1 minute becomes about 5 minutes). If the historian is down, the module shows InfluxDB is not available.
KPI Stat
One number from a data source. Default size 6 × 4.
| Setting | What it does | Default |
|---|---|---|
| Data Source | As for Data Table | Alarm History |
| Aggregate | Count, Sum, Average, Min, Max | Count |
| Column (for sum/avg/min/max) | Numeric column, e.g. duration_s, quantity, oee | empty |
| Date Range, Device (optional) | As above | Report Default, all |
| Unit | Text after the number | empty |
| Accent Color | Number color | #6366f1 |
The value is rounded to 2 decimals. It is computed over at most 10,000 rows, so a count stops at 10,000. A misspelled column gives 0, not an error.
Image, Text, Divider
| Module | Settings | Default size |
|---|---|---|
| Image | Image File from the File Manager; Fit: Contain, Cover, Fill | 6 × 5 |
| Text | Content (line breaks kept); Font Size: Small, Medium, Large, Extra Large; Alignment; Bold | 12 × 2 |
| Divider | none — a horizontal rule | 24 × 1 |
Dashboard widgets
The Dashboard Widgets section of the palette adds a real dashboard widget to the report, configured with the same fields as on a dashboard. Only widgets that make sense on paper are offered: values, gauges and indicators; Chart, History Chart, Power Chart, Bar and Pie; Table, Data Table and History Table; OEE, downtime, quality, work order, labor and andon summaries; SPC and Cpk; Image, Text, Barcode, Symbol, Floor Plan; and Alarm. Buttons, toggles, sliders, inputs, forms, navigation, containers, timers, marquees, embedded pages and templates are left out ("… widget types are not offered because they need interaction or live updates to mean anything.").
| Setting | What it does | Default |
|---|---|---|
| Widget | "Choose a widget…" — changing it resets the widget's settings | the palette choice |
| Title | "Title shown on the report" | the widget name |
| Use the report's date range | The widget covers the report's default date range; its own Time Range and refresh fields are hidden | on |
| Widget fields | Exactly as on a dashboard (Dashboards) | widget defaults |
Embedded widgets fetch their own data while rendering, as the user who created the report. If that user is deleted or deactivated, widgets render empty. Live-value widgets show the value at generation time.
Data source columns
Column names are what you type in Columns, Row Field, Column Field, Value Field and Column. Devices appear as numeric device_id, not names.
| Data Source | Date column | Columns |
|---|---|---|
| Alarm History | fired_at | id, alarm_rule_id, device_id, tag_path, value, message, severity, fired_at, acknowledged_at, acknowledged_by, cleared_at, shelved, and from the rule: rule_name, rule_condition, rule_threshold |
| Downtime Events | started_at | id, device_id, reason_id, started_at, ended_at, duration_s, notes, operator_id, created_at, and from the reason: reason_name, reason_category, reason_color |
| Quality Events | timestamp | id, device_id, reason_id, quantity, work_order_id, timestamp, operator_id, notes, created_at, and from the reason: reason_name, reason_category, reason_color |
| OEE Snapshots | date | id, device_id, shift_id, date, availability, performance, quality, oee, good_count, reject_count, total_count, planned_downtime_s, unplanned_downtime_s, changeover_downtime_s, run_time_s, net_run_time_s, planned_production_time_s, quality_event_rejects, created_at |
| Electronic Signatures | signed_at | id, signed_at, signed_by (the signer's printed name), meaning, action, subject, reason, record_type, record_id. No device_id, so the device filter doesn't apply. See Electronic Signatures |
OEE Snapshots date is a plain day (2026-09-14); date ranges on that source compare whole days, so Today returns today's snapshots.
The event's own columns (id, message, severity) are the event's; the looked-up rule or reason columns carry the rule_ or reason_ prefix. Device-offline alarms have no rule, so their rule_ columns are blank.
Example crosstabs that work with these columns:
- Downtime seconds by reason and device: Downtime Events, Row Field
reason_name, Column Fielddevice_id, Aggregate Sum, Value Fieldduration_s. - OEE by device per day: OEE Snapshots, Row Field
device_id, Column Fielddate, Average ofoee. - Alarm count by rule and severity: Alarm History, Row Field
rule_name, Column Fieldseverity.
Downtime and quality events have no shift or day column, so "by shift" or "per day" pivots are only possible on OEE Snapshots.