> For the complete documentation index, see [llms.txt](https://docs.in8sync.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.in8sync.com/client-admin-guide/getting-started/report-components.md).

# Report Components

KPI tiles, charts, BRM queue widgets, and end-of-day reconciliation for Dashboard, Page, and Reports modules.

Report components surface live data and operational state — KPI tiles, multi-series charts, BRM queue health, and POS register reconciliation. For static stat strips use **Stats** in [Content Components](/client-admin-guide/getting-started/content-components.md); for inline JSON-driven charts use **Chart** there. For tabular saved-search data on transactions, see **Transaction List** in [Transaction Components](/client-admin-guide/getting-started/transaction-components.md).

## When you'd reach for this category

* **Single-value KPI tile from a saved search or SuiteQL** → Report Widget.
* **Multi-series chart driven by a query** → Chart Widget.
* **BRM queue health on a dashboard** → BRM Queue Widget.
* **Full BRM queue management page** → BRM Queue Report.
* **End-of-day POS reconciliation** → EOD Reports.
* **Flexible list of custom records or data** → List Widget.
* **Single prominent metric (number, currency, percent)** → Stat Card.
* **Static stat strip (no query)** → Stats in [Content Components](/client-admin-guide/getting-started/content-components.md).
* **Inline JSON-driven chart** → Chart in [Content Components](/client-admin-guide/getting-started/content-components.md).
* **Tabular saved-search data on transactions** → Transaction List in [Transaction Components](/client-admin-guide/getting-started/transaction-components.md).

## Report Widget

A report container for dashboards and pages. Each Report Widget can hold one or more named reports — data tables or charts — each backed by a NetSuite saved search or a custom query. When multiple reports are configured, they appear as tabs.

### Available in

* Dashboard modules
* Reports modules
* Page modules

### When to use

* An operations dashboard where one block holds tabs for *Open Orders*, *Pending Fulfilments*, and *Revenue This Month*.
* A reports page with a data table for transactions and a chart for revenue trends side by side.
* Any page where users need to browse and filter tabular data or see visual breakdowns.

For a single prominent number (one KPI metric), use **Stat Card** instead. Report Widget is for full data tables and charts, not a single-number tile.

### Settings

Open the configuration modal from the **Configure Reports** button. Each report inside the widget is configured separately:

| Setting                 | Description                                                                                                                     |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| **Title**               | Heading shown above the widget.                                                                                                 |
| **Report Label**        | Name for this report — shown as the tab label when multiple reports are configured.                                             |
| **Report Type**         | *Table* (a paginated data grid) or *Chart* (bar, line, area, or pie).                                                           |
| **Data Source**         | How the report gets its data: *Saved Search* (enter a NetSuite saved search ID) or *SuiteQL* (write a custom query).            |
| **Refresh Interval**    | How often the widget re-fetches data automatically. Minimum 30 seconds; default 300 seconds.                                    |
| **User Access Control** | Filter rows based on the signed-in user's entity type: Vendor, Customer, Partner, or Employee. Available for Saved Search mode. |
| **User Field Filter**   | Pin the query to the current user's ID, entity, or customer automatically. Works in both query modes.                           |

#### Table report settings

| Setting           | Description                                                                                                                                                                                                                              |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Filter bar**    | Show a live text filter above the table.                                                                                                                                                                                                 |
| **Export CSV**    | Add an Export button so users can download the filtered data.                                                                                                                                                                            |
| **Rows per page** | How many rows to show per page: 10, 25, 50, 100, or 200.                                                                                                                                                                                 |
| **Columns**       | Override auto-detected columns: each column has a field ID, label, format (*Text*, *Number*, *Currency*, *Date*, or *Badge*), and visible toggle. Use **Load from Query** to auto-populate column definitions from the first result row. |
| **Action Column** | Add an Actions column with a button per row. Configure the column label, the ID field, the record type, modal title, an optional URL pattern, and whether to show the record viewer, a NetSuite link, or both.                           |

#### Chart report settings

| Setting                    | Description                                                       |
| -------------------------- | ----------------------------------------------------------------- |
| **Chart type**             | Bar, line, area, or pie.                                          |
| **X-axis**                 | The field to use as the category axis.                            |
| **Y-axis series**          | One or more value fields to plot, with label, format, and colour. |
| **Labels / Grid / Legend** | Toggle display elements on or off.                                |

### SuiteQL session variables

SuiteQL queries can reference the signed-in user using these placeholders — substituted automatically at runtime:

* `{employeeId}` — the user's NetSuite employee internal ID
* `{locationId}` — the user's active location
* `{userId}` — the user's portal user ID
* `{subsidiaryId}` — the active subsidiary

{% hint style="info" %}
The **SuiteQL Assistant** is a built-in AI helper. Describe what data you want in plain language and it generates a SuiteQL query, then validates it by running it live so you can confirm it returns real data before saving.
{% endhint %}

### How it works

1. On page load, the widget runs the configured query for each report.
2. If more than one report is configured, tabs appear at the top — one per report label.
3. Table reports render as a paginated data grid with optional filter bar and CSV export.
4. Chart reports render the configured chart type using the query result.
5. Each report auto-refreshes on the configured interval.
6. User Access Control and User Field Filter are applied at query time, so each user sees data scoped to their entity type and identity.

### Examples

**Operations dashboard.** One Report Widget, three reports: *Open Orders* (table, saved search), *Pending Fulfilments* (table), *Revenue This Month* (bar chart). Appear as tabs across a dashboard section.

**Transaction grid.** Single table report — filter bar and CSV export on. Columns: Order Number, Date, Customer, Total, Status.

**Revenue trend.** Single line chart, SuiteQL query summing invoices by week for the current user's location.

### Common issues

* **No results** — the saved search or SuiteQL returned zero rows. Check the search criteria and confirm the correct saved search ID is entered.
* **Column names wrong** — the column field IDs don't match the query result. Use **Load from Query** to auto-detect them.
* **Tabs don't appear** — tabs only show when two or more reports are configured in the same widget.
* **Data not scoped to current user** — enable **User Field Filter** and select the correct field to pin the query to the signed-in user.

**See also:** [Stat Card](#stat-card) (for a single prominent KPI number), [Chart Widget](#chart-widget) (for a standalone chart block), [Transaction List](/client-admin-guide/getting-started/transaction-components.md) (for transaction-specific lists with row actions).

## Chart Widget

A live-data chart for dashboards. Configure a data source (SuiteQL query or saved search), pick a chart type (bar, line, area, pie), map the data to axes and series, and the widget renders the result.

This is the **dashboard widget** variant of charting. For static, manually-fed charts in content sections, use **Chart** instead. Chart Widget is for charts that should reflect live NetSuite data without manual updates.

### Available in

* Dashboard modules
* Reports modules
* Page modules

### When to use

* Dashboard pages where a chart should always reflect current sales, queue activity, transaction counts, or any other live metric.
* Reports modules where the chart needs to be a dashboard-style widget (with refresh, configurable data source, etc.).
* Anywhere you'd otherwise build a chart by hand from query results — Chart Widget collapses query + render into one block.

### Settings

The block opens a configuration modal that handles the data source, axes, series, and styling:

| Setting                   | Description                                                      |
| ------------------------- | ---------------------------------------------------------------- |
| **Title**                 | Heading shown above the chart.                                   |
| **Description**           | Optional supporting copy below the title.                        |
| **Chart Type**            | *Bar*, *Line*, *Area*, or *Pie*.                                 |
| **Data Source**           | The SuiteQL query or saved search that provides the data.        |
| **X Axis Key**            | Which column from the data source maps to the X axis.            |
| **X Axis Label / Format** | Display label and value format (date, number, currency).         |
| **Y Axis Keys**           | Comma-separated list of columns for the Y axis (one per series). |
| **Y Axis Label / Format** | Display label and value format.                                  |
| **Series**                | Per-series configuration — labels, colours, formats.             |
| **Pie Slice Colors**      | (Pie only) Color per slice.                                      |
| **Show Grid**             | Whether to render the chart grid lines.                          |
| **Show Legend**           | Whether to render the chart legend.                              |
| **Min Height**            | Minimum chart height (e.g. *300px*).                             |

### How it works

1. The configuration modal lets you pick a data source and map columns to axes.
2. At render time, the widget runs the query, transforms the rows into Recharts data, and renders the configured chart type.
3. Hover tooltips, legend interactions, and (for time-series) brush/zoom are wired up automatically.
4. Re-runs the query when relevant page state changes (e.g. date filters elsewhere on the page).

### Examples

**Daily sales chart.** Bar chart, data source *daily\_sales\_query*, X axis *date* (date format), Y axis *total* (currency format). Drop on a sales dashboard for at-a-glance daily revenue.

**Order-status breakdown.** Pie chart, data source *order\_status\_count*, slice colours per status. Useful at the top of an operations page.

**Multi-series trend.** Line chart with multiple Y series — *Sales*, *Refunds*, *Net*. Each becomes its own line, automatically coloured from the configured palette.

### Common issues

* **Chart shows "No data"** — the data source returned zero rows. Check the query and any filters in scope on the page.
* **Wrong values on axis** — verify the X / Y key columns match the data source's actual column names exactly. SuiteQL is case-sensitive for some setups.
* **Slow rendering** — large data sets can slow Recharts. Aggregate in the SuiteQL query rather than fetching raw rows.

**See also:** [Chart](/client-admin-guide/getting-started/content-components.md) (for static, manually-fed charts), [Report Widget](#report-widget) (for generic dashboard widget with table data).

## BRM Queue Report

A full-page queue manager for the BRM background processing queue. Lists every queue record with status filters, lets staff retry failed records, edit payloads before retrying, and trigger the queue processor on demand.

This is the heavyweight queue view, intended for administrators who need to see and act on the whole queue. For an at-a-glance widget, use **BRM Queue Widget** instead.

### Available in

* Reports modules
* Page modules

### When to use

* Operations dashboards where staff monitor and clear the BRM queue.
* Admin pages where someone needs to retry stuck transactions or fix a malformed payload before re-running it.
* Troubleshooting pages where you need to see exactly what went wrong with a specific queue record.

### Settings

The block opens a configuration modal:

| Setting                   | Description                                                                                                |
| ------------------------- | ---------------------------------------------------------------------------------------------------------- |
| **Title**                 | Block heading. Default: *BRM Queue Report*.                                                                |
| **Refresh Interval**      | Seconds between automatic refreshes. 0 = no auto-refresh (manual only). Default: 0.                        |
| **Page Size**             | Records per page. Default: 50.                                                                             |
| **Show Export**           | Show the *Export* button (downloads the current view as CSV). Default: Yes.                                |
| **Show Retry Button**     | Show the per-row *Retry* action. Default: Yes.                                                             |
| **Show Payload Editor**   | Allow editing a record's payload before retry. Default: Yes.                                               |
| **Show Status Filter**    | Show the status-filter dropdown above the table. Default: Yes.                                             |
| **Default Status Filter** | Status filter applied on load — *errors* (statuses 4 + 5), *all*, or a specific status. Default: *errors*. |

### How it works

1. Reads the BRM queue records via NetSuite SuiteQL — paginated by Page Size.
2. Renders them in a table with columns for record type, status, payload preview, error message, and timestamps.
3. **Retry** re-queues a single record. **Edit Payload** opens an inline editor; saving the edit also re-queues it.
4. **Trigger Processor** runs the BRM queue processor immediately so retried records are picked up without waiting.
5. Auto-refreshes if Refresh Interval is set, otherwise refreshes only on manual action.

### Examples

**Queue ops dashboard.** A Reports module with BRM Queue Report at the top, default status filter *errors*, refresh interval 30 seconds. Operations staff land on the page and see only failures, auto-refreshing.

**Read-only audit page.** Hide *Show Retry Button* and *Show Payload Editor*. Show all statuses. Useful for managers who want visibility without write access.

### Common issues

* **No records appear** — the BRM queue may genuinely be empty, or the user's NetSuite role may not have access to the queue record. Check role permissions.
* **Retries don't process** — the queue processor isn't running. Click *Trigger Processor* or contact your NetSuite administrator about the scheduled script.
* **Edit Payload changes don't save** — verify the user has edit permission on the queue record. Read-only roles will see the editor but not be able to save.

## BRM Queue Widget

A compact dashboard widget that surfaces the BRM background queue's most recent or most relevant records. Pick a status filter (e.g. *Pending* or *Errors*), set a row limit, and the widget shows that slice of the queue at a glance.

For full queue management — retry, edit payloads, trigger the processor — use **BRM Queue Report** instead. The Widget is the dashboard glance; the Report is the operations console.

### Available in

* Dashboard modules
* Reports modules
* Page modules

### When to use

* Operations dashboards where staff want a quick visibility on queue health alongside other widgets.
* Admin landing pages where one row tells you *do I need to act on the queue today?*.
* Reports modules when paired with BRM Queue Report — Widget for at-a-glance, Report below for action.

### Settings

The block opens a configuration modal:

| Setting                    | Description                                                                                                                                   |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| **Title**                  | Widget heading. Default: *BRM Queue Widget*.                                                                                                  |
| **Status Mode**            | *Interactive* (user can flip status filter on the widget) or *Fixed* (status filter is locked to the configured value). Default: Interactive. |
| **Status Filter**          | Default status to show — Pending, Processing, Success, Error, Partial, All, or *Errors* (statuses 4 + 5 combined). Default: Pending.          |
| **Refresh Interval**       | Seconds between auto-refreshes. 0 = manual only. Default: 0.                                                                                  |
| **Max Rows**               | How many records to show. Default: 6.                                                                                                         |
| **Show Search**            | Show a small search input above the widget table. Default: off.                                                                               |
| **Use Current Subsidiary** | When on, the widget filters to the currently-active subsidiary. When off, you specify a subsidiary ID explicitly. Default: on.                |
| **Subsidiary ID**          | (Only when *Use Current Subsidiary* is off) The NetSuite subsidiary internal ID to filter by.                                                 |

### How it works

1. Reads queue records via the same data hook as BRM Queue Report.
2. Filters by the configured status and subsidiary.
3. Shows the top *Max Rows* with status badges, record type, and timestamp.
4. In **Interactive** mode, the user can click status badges at the top to flip the filter; in **Fixed** mode, the filter is locked to the configured value.
5. Auto-refreshes if Refresh Interval is set.

### Examples

**Operations landing page.** Title *Queue Errors*, Status Mode Fixed, Status Filter *errors*, Max Rows 6, Refresh Interval 30. The dashboard shows whether anything's broken — drill into Queue Report for full management.

**Pending-queue heads-up.** Status Filter *Pending*, Status Mode Interactive, Max Rows 10. Staff can flip to *Errors* with one click if needed.

### Common issues

* **No records appear** — the configured status may genuinely have zero records, or the user's NetSuite role lacks access to the queue record. Check role permissions.
* **Numbers don't match BRM Queue Report** — the Widget filters to the current subsidiary by default; the Report may not. Toggle *Use Current Subsidiary* off if you need cross-subsidiary visibility.

**See also:** [BRM Queue Report](#brm-queue-report) (for full queue management), [Report Widget](#report-widget) (for generic report widget).

## List Widget

A flexible block for displaying lists of data — records, items, or results — with optional search, filtering, sorting, and pagination. Use it to browse custom record collections, nested item lists, or any tabular data that doesn't fit the standard Report Widget pattern.

The block supports inline editing for simple fields, custom columns, row actions, and visual layouts (card or table view).

### Available in

* Dashboard modules
* Reports modules
* Page modules

### When to use

* A page browsing custom records (e.g. custom prospects, projects, agreements).
* Displaying a dynamic list of items with optional inline editing for quick updates.
* Showing related record collections (e.g. all orders for a customer, all line items in a transaction).
* Anywhere you need a flexible, queryable list that Report Widget doesn't quite fit.

For standard transaction lists, use **Transaction List** in [Transaction Components](/client-admin-guide/getting-started/transaction-components.md). For saved-search driven reports, use **Report Widget** instead.

### Settings

| Setting            | Description                                                                             |
| ------------------ | --------------------------------------------------------------------------------------- |
| **Configure List** | Opens the configuration modal — data source, columns, layout, search, sorting, actions. |

The configuration modal supports:

* **Data Source** — SuiteQL query or saved search that provides the list data.
* **Display Layout** — *Card* (visual cards) or *Table* (tabular grid). Default: Table.
* **Columns** — for table mode: which fields to display, their labels, formats (text, currency, date, badge), and visibility. For card mode: which fields appear on each card and in what order.
* **Search** — enable/disable a search input; specify which fields are searchable.
* **Sort** — default sort order (e.g. *Name ascending*) and allow user sorting. Default: off.
* **Pagination** — number of rows per page. Default: 25.
* **Inline Editing** — enable editing for specific fields directly on the list (no modal popup). Requires user permissions. Default: off.
* **Row Actions** — add per-row buttons (e.g. *View*, *Edit*, *Delete*) that open modals or trigger workflows.
* **Refresh** — auto-refresh interval in seconds. 0 = manual only. Default: 0.

### How it works

1. Executes the configured data source query at render time.
2. Displays results in the chosen layout (card or table).
3. If search is enabled, users can filter the list by searchable fields.
4. If sorting is enabled, clicking column headers sorts the data.
5. Large result sets paginate — the user navigates pages.
6. If inline editing is enabled, clicking a field on a card or row opens an inline editor; clicking away or hitting Enter saves the change.
7. Row actions (buttons on each row) open modals or trigger downstream workflows.
8. Auto-refreshes if the Refresh interval is set.

{% hint style="info" %}
Use **Card layout** for visual data or when each item has rich content (image, description). Use **Table layout** for dense, comparable data or when users need to scan many rows at once. Both layouts are responsive and collapse cleanly on mobile.
{% endhint %}

### Examples

**Custom prospect list.** List Widget in card layout, data source = SuiteQL query for a custom record type (such as a list of prospects). Columns include Prospect Name, Company, Stage (badge format), and Next Action Date. Sort by Stage, pagination 20 per page. Row action = *View* (opens detail modal).

**Project tasks.** Table layout displaying project tasks with Status (badge), Due Date, Assigned To, and Priority. Inline editing enabled for Status and Due Date. Users can quickly mark tasks complete without opening a full modal.

**Custom record browser.** Card layout of custom records with search by Name + Description. Pagination 10 per page. No row actions — used for browsing only.

### Common issues

* **No results** — the data source query returned zero rows. Check the SuiteQL or saved search criteria.
* **Columns show wrong field names** — the column field IDs don't match the query result. Verify the column definitions match the query's actual column names exactly.
* **Inline editing doesn't save** — verify the user has edit permission on the custom record type and the field isn't locked by permissions.
* **Search doesn't work** — confirm search is enabled in the configuration and the searchable fields are specified.

**See also:** [Report Widget](#report-widget) (for saved-search reports with charts/tables), [Transaction List](/client-admin-guide/getting-started/transaction-components.md) (for transaction-specific lists).

***

## EOD Reports

The end-of-day reconciliation report for POS operations. Lists cash-drawer records filtered by location, date range, and subsidiary, and lets users open a detailed view per record — cash drawer summary, sales summary, tender summary, payment details, and individual invoices.

A printed copy is one click away inside the detail view.

![EOD Reports widget showing the runtime location and date filters, a paginated list of cash-drawer records, and the detail modal opened for one record](https://229581143-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAG04Mxmhw6PLRAZBvhtK%2Fuploads%2Fgit-blob-49f9ad2f84f444d1f2f6d0b8b8899f4a06c5cc65%2Fpb-eod-reports.png?alt=media)

### Available in

* Page modules
* Dashboard modules
* Reports modules

EOD Reports isn't available in Order Form, Catalog, Modal, or Navigation modules. It needs a context where the user is reviewing past activity, not driving a transaction.

### When to use

* Daily POS reconciliation page where managers (or cashiers) close out the register at the end of a shift.
* A multi-register operations dashboard where regional managers review variance across stores.
* A page that ties together cash-drawer activity with the underlying invoices for an audit trail.

### What it depends on

EOD Reports only shows records if cash drawers are being tracked by the **Registers** component in the POS workflow. If your cashier workflow doesn't include a Registers block, or if cash drawer tracking is disabled on that block (Enable Cash Drawer = No), this report will be empty.

| What must be in place                               | Where                                                |
| --------------------------------------------------- | ---------------------------------------------------- |
| **Registers** component on the Order Form page      | Cashier workflow → Place Order module → Page Builder |
| **Enable Cash Drawer** = Yes on the Registers block | Page Builder → Registers → Configure                 |
| Cashier has opened at least one drawer session      | Cashier logs in and runs the open-drawer flow        |

The report also reads the **subsidiary** from the user's session — it only shows records from the currently active subsidiary. Switch subsidiary in the top-bar selector to review a different entity's drawer records.

### Settings

| Setting            | Description                                                 |
| ------------------ | ----------------------------------------------------------- |
| **Title**          | Heading shown above the report. Default: *EOD Reports*.     |
| **Items per page** | Number of records per page. Min: 10. Max: 200. Default: 50. |

The location, date-range, and subsidiary filters are runtime controls — the user picks them at view time, they aren't configured in the block settings.

### How it works

1. The widget reads the active subsidiary from the user's session.
2. The user selects a location and a date range from runtime filter controls.
3. The widget fetches matching cash-drawer records.
4. Records render in a paginated, sortable list.
5. Clicking a record opens a modal with the full detail view: cash drawer summary, sales summary, tender summary, payment details, and individual invoices linked to that drawer session.
6. The detail modal has a Print button that opens an iframe with the printable layout.

{% hint style="info" %}
The block reads the subsidiary from the user's session — there's no manual subsidiary picker. To see another subsidiary's data, switch subsidiary using the top-bar selector.
{% endhint %}

### Examples

**Cashier close-out page.** A Page module with a Heading, the EOD Reports block (Title: *Today's Reconciliation*, Items per page: 25). Cashier opens it at end of shift, filters to the current location and today's date, opens their drawer record, prints the report, and tucks it into the safe.

**Manager weekly review.** A Reports module with EOD Reports set to 100 items per page. Manager filters to the past 7 days across all locations and works through the records in order, looking for variance.

**See also:** [Report Widget](#report-widget) (for general-purpose tabular reports), [Registers](/client-admin-guide/getting-started/transaction-components.md#registers) (the block that drives register selection), [Store Manager Workflow](/client-admin-guide/workflow-builder-overview/workflow-examples/store-manager-workflow.md) (the workflow EOD Reports is often dropped into).

## Stat Card

A clean, single-number display for dashboards and pages. Add a Stat Card wherever users need one key metric at a glance — total sales today, open invoices, items in a queue.

The value is live data: connect a saved search or custom query, and the block fetches the latest number when the page loads.

![Three Stat Cards across the top of a portal dashboard — Today's Sales, Open Orders, and Avg Order — each showing a value, a label, and a trend indicator](https://229581143-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAG04Mxmhw6PLRAZBvhtK%2Fuploads%2Fgit-blob-aac37a643577a60a42e00c09b81df2bc18550b93%2Fpb-stat-card.png?alt=media)

### Available in

* Dashboard modules
* Page modules
* Reports modules

### When to use

* A summary metric at the top of a dashboard — *Pending Orders*, *Revenue Today*, *Items in Queue*.
* A quick-reference number alongside a transaction form or operations view.
* A snapshot figure on a Reports page before a full table.

For a richer KPI tile with a trend arrow, icon, subtitle, and optional table mode, use **Report Widget** instead. Stat Card is intentionally simpler — the number, its label, and a format.

### Settings

| Setting              | Description                                                                                                                                                                          |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Label**            | The metric name shown with the value (e.g. *Pending Orders*).                                                                                                                        |
| **Format**           | How the number is displayed: *Number*, *Currency*, *Percent*, *Date*, or *Text*. Currency uses the subsidiary's configured currency symbol.                                          |
| **Data Source**      | *Saved Search* (enter a NetSuite saved search ID) or *SuiteQL* (write a custom query). The block reads the first result row. A built-in AI assistant can help you write the SuiteQL. |
| **Field ID**         | The column name in the query result to use as the displayed value.                                                                                                                   |
| **Label**            | Optional display label for the metric. Defaults to the Field ID if left blank.                                                                                                       |
| **Description**      | Optional text shown below the metric value — useful for context or units.                                                                                                            |
| **User Filters**     | When on, the query automatically receives the signed-in user's employee ID and location as filter inputs, restricting results to that user's data.                                   |
| **Refresh Interval** | How often the block re-runs the query to stay current. Minimum 30 seconds, default 5 minutes.                                                                                        |

### Multi-metric cards

A single Stat Card can display two or three metrics side by side. In the configuration modal, use **Add Metric** to add more fields — each with its own Field ID, label, and format. The block arranges them in a grid layout automatically.

### How it works

1. On page load, the block runs the configured query.
2. It reads the value from the first result row at the configured **Field ID** for each metric.
3. Each value is formatted per its **Format** setting and displayed with its label.
4. If **User Filters** is on, the query receives the signed-in user's employee ID and location automatically.
5. If the query returns no rows, the block shows a dash (—).
6. If a **Refresh Interval** is set, the block re-runs the query at that cadence to keep the value current.

### Common issues

* **Shows a dash** — the query returned no results. Check that your saved search or SuiteQL returns at least one row for the current user and filters.
* **Wrong number** — verify the **Field ID** matches a column name in your query result exactly.
* **Currency symbol missing** — set Format to *Currency*. Text format displays the raw value with no symbol.

**See also:** [Report Widget](#report-widget) (for a fuller KPI tile with trend arrows and table mode), [Chart Widget](#chart-widget) (for visual charts and time-series data).

## Related

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Common Patterns</strong></td><td>Dashboard and reports page recipes.</td><td><a href="/client-admin-guide/getting-started/common-patterns.md">Common Page Patterns</a></td></tr><tr><td><strong>Content Components</strong></td><td>Stats, Cards, Chart, and other lighter dashboard pieces.</td><td><a href="/client-admin-guide/getting-started/content-components.md">Content Components</a></td></tr><tr><td><strong>Page Builder Overview</strong></td><td>The Page Builder entry point with the full category list.</td><td><a href="/client-admin-guide/getting-started.md">Page Builder</a></td></tr></tbody></table>
