---
title: Operator dashboard
slug: how-tos/TCZs-operator
docTags: HM2rWeeWAO1-Dgm69CZmi,G8BVEz3koxH3IqjirGj3V
createdAt: 2026-03-29T14:45:03.930Z
---

## Introduction

This document describes how to set up an operator dashboard focused on batch operations. We will do so using the [Faketory demo dataset](docId\:tJw2vWPK12gU3Z5AWHr4a), particularly the data pertaining to the Mixing area.

**Audience:** Floor operators, shift leads

**Purpose:** Real-time awareness and immediate action

## Dashboard layout

1. Current status
2. Realtime process trends
3. Batch steps history

## Step-by-step

::::::ExpandableHeading
### Creating variables `$line` and `$mixer`

Using Grafana variables is a great way to make a dashboard dynamic. Using the[Factry Historian Datasource](docId:0oT9AErU3HFA48S2ukB4F) you can populate these variables with value from Factry Historian.

:::::WorkflowBlock
:::WorkflowBlockItem
Create variable `$line`

There are 2 production lines in Faketory, so to make the dashboard works for both, create a variable that represents which line is currently being visualised: `$line`
:::

::::WorkflowBlockItem
Configure the name and label of the variable

- **General**
  - Name: `line`
  - Label: `Line`

:::hint{type="info"}
Using lowercase for variable names is widely considered good practice.
:::
::::

:::WorkflowBlockItem
Configure the query to populate the variable with values

- **Query options**
  - Query Type: `Asset`
  - Filter by asset path: `/^Line/`
    - This **regular expression** search pattern matches all assets in the asset tree for which the path starts with "Line"
  - Parent assets: `No parent`
:::

:::WorkflowBlockItem
Configure the selection options to only allow a single selection

- **Selection options**
  - *deselect* 'Allow custom values'
:::

:::WorkflowBlockItem
Create variable `$mixer`

The `Line 1` and `Line 2` assets do not contain any properties themselves, so create a `$mixer` variable as well, but hide it from the dashboard. It will automatically change to the correct Mixer asset based on the `$line` variable.

- **General**
  - Name: `mixer`
  - Label: `Mixer`
- **Query options**
  - Query Type: `Asset`
  - Filter by asset path: `/Mixer$/`
  - Parent assets: `$Line`
- **Selection options**
  - *deselect* 'Allow custom values'
:::
:::::

::Image[]{src="https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/84xWjZM5bZfLBBINfa1l8-20260324-144010.png" darkSrc="https://archbee-image-uploads.s3.amazonaws.com/SMPo4IS9FkillUAMsur2c/ozvvHgcx4kaJi2s59dkHa-20260324-144010.png" size="40" width="774" height="1628" darkWidth="774" darkHeight="1628" position="center" caption="$line variable creation" showCaption="true"}

::Image[]{src="https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/lWBDih23uLD23hTSSBiXg-20260324-144010.png" darkSrc="https://archbee-image-uploads.s3.amazonaws.com/SMPo4IS9FkillUAMsur2c/6HgTWoI6G38EBm-HjUESN-20260324-144010.png" size="40" width="774" height="1628" darkWidth="774" darkHeight="1628" position="center" caption="$mixer variable creation" showCaption="true"}
::::::

:::::ExpandableHeading
### Creating a new row: `"Status $line $mixer"`

Rows are a handy tool to organize a dashboard in specific sections that can be minimized or expanded on demand.

This row will focus on the current value of the mixer properties.

::::WorkflowBlock
:::WorkflowBlockItem
Click :inlineImage[]{src="https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/EhqvjhkKs3ATxhlx2CuQp-20260325-092933.png" alt caption width="116" height="48"} **>&#x20;**`Row`

Create a new row to visualize the current status of the selected mixer.
:::

:::WorkflowBlockItem
Configure the new row options

&#x20;The new variables can already be tested by creating a dynamic row title:
`"Status $line $mixer"`

::Image[]{src="https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/BOEOoWz_Lxj0W0ah34ipB-20260324-144401.png" darkSrc="https://archbee-image-uploads.s3.amazonaws.com/SMPo4IS9FkillUAMsur2c/VUpqCBBqKgXeY3QQLTxXl-20260324-144401.png" size="40" width="1000" height="572" darkWidth="1000" darkHeight="572" position="center" caption="Status row configuration" showCaption="true"}
:::

:::WorkflowBlockItem
Click `Update`
:::
::::
:::::

:::::ExpandableHeading
### Add a new `Stat` visualisation

::::WorkflowBlock
:::WorkflowBlockItem
Click :inlineImage[]{src="https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/EhqvjhkKs3ATxhlx2CuQp-20260325-092933.png" alt caption width="116" height="48"} > `Visualisation`
:::

:::WorkflowBlockItem
Select Data source: `Factry Historian Datasource`
:::

:::WorkflowBlockItem
Configure the data source

::Image[]{src="https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/Ki8J-TCUfP-s5-aykvHo2-20260324-153650.png" darkSrc="https://archbee-image-uploads.s3.amazonaws.com/SMPo4IS9FkillUAMsur2c/PV_Hfqu3aI6uJS0uID4MA-20260324-153650.png" size="60" width="1644" height="1344" darkWidth="1644" darkHeight="1344" position="center" caption="Mixer status datasource configuration" showCaption="true"}

- Tab: `Assets`
- Assets: `$mixer`
- Properties: `Running`
- Aggregation: `last`
:::

:::WorkflowBlockItem
Change visualisation to `Stat`

In general you can use **stat panels** to display the last value of important properties.
:::

:::WorkflowBlockItem
Configure the **stat panel** options

- Panel options
  - Title: `    `
    (*For the other properties it might make more sense to use a title. Leaving this empty makes the actual panel larger, which looks better.*)
- Value options
  - Fields: `Line 1\\Mixer\\Running`
    - By default the stat panel only shows `Numeric fields` which do not include booleans.
- Stat styles
  - Text mode: `Value`
  - Color mode: `Background Solid`
  - Graph mode: `None`
- Value mappings
  - `true` -> `RUNNING`, Set color: `Green`
  - `false` -> `STOPPED`, Set color: `Red`
:::

:::WorkflowBlockItem
Resize the panel

Go back to the dashboard, move the panel to the first row and resize the panel.
:::

:::WorkflowBlockItem
Save your dashboard
:::
::::

::Image[]{src="https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/FEOH2Sb1ga9cNHJ_zbCny-20260325-082820.png" darkSrc="https://archbee-image-uploads.s3.amazonaws.com/SMPo4IS9FkillUAMsur2c/HZ50reVqnicXDb9Ck3zYL-20260325-082820.png" size="60" width="1074" height="618" darkWidth="1074" darkHeight="618" position="center" caption="WIP dashboard #1" showCaption="true"}

This process can be repeated for other properties and the end result could look like this screenshot below.

![](https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/X4IIK3kXmiA_JDrzBytRn-20260325-083514.png "WIP dashboard #2")
:::::

:::::ExpandableHeading
### Creating a new row: `Process trends`

This row will focus on visualising the values of the mixer properties over time.

::::WorkflowBlock
:::WorkflowBlockItem
Click :inlineImage[]{src="https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/EhqvjhkKs3ATxhlx2CuQp-20260325-092933.png" alt caption width="116" height="48"}**&#x20; >&#x20;**`Row`
:::

:::WorkflowBlockItem
Configure the new row options :inlineImage[]{src="https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/ECnaytXssISQk7sqLn1uD-20260325-093600.png" alt caption width="32" height="32"}

&#x20;Row title: `Process trends`
:::

:::WorkflowBlockItem
Click `Update`
:::

:::WorkflowBlockItem
Drag the new row to the bottom

To drag a row, it must first be collapsed.

1. Click the collaps button on the left of the row title\::inlineImage[]{src="https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/fw4TG0cP5_8xL8UIjWZ8i-20260325-094151.png" alt caption width="32" height="32"}
2. Drag the row with the drag icon on the right: :inlineImage[]{src="https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/zs22YxuxcaTOTXsq0e8E6-20260325-094028.png" alt caption width="64" height="58"}
3. Uncollapse the row
:::
::::
:::::

:::::::ExpandableHeading
### Add a new `Time series` visualisation

See [Trending Assets Properties](docId\:nFccWY9aovwF8xPvni13k).

::::::WorkflowBlock
:::WorkflowBlockItem
Click :inlineImage[]{src="https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/EhqvjhkKs3ATxhlx2CuQp-20260325-092933.png" alt caption width="116" height="48"} > `Visualisation`
:::

:::WorkflowBlockItem
Select Data source: `Factry Historian Datasource`
:::

:::WorkflowBlockItem
Configure the data source

- Tab: `Assets`
- Assets: `$mixer`
- Properties: `Temperature`
:::

:::WorkflowBlockItem
Change visualisation to `Time series`

In general you can use **time series panels** to display how **numeric** values change over time.
:::

:::WorkflowBlockItem
Configure the panel options

- Panel options
  - Title: `Temperature`
  - Transparent background: `Checked`
    (*For most visualisations, this just looks better.*)
- Legend
  - Mode: `Table`
  - Values: `Min` `Max` `Mean` `...`
- Graph styles
  - Line width: `2`
  - Fill opacity: `10`
:::

:::::WorkflowBlockItem
\[Optional] Change the field name
This makes the legend visually cleaner.

::::Tabs
:::Tab{title="Option 1: Display name"}
Standard options

- Display name: `${__field.labels["AssetProperty"]}`
:::

:::Tab{title="Option 2: Field name"}
1. Add the transformation `Labels to fields`
2. Select Labels: `AssetProperty`
3. Value field name: `AssetProperty`
:::
::::
:::::

:::WorkflowBlockItem
Resize the panel

Go back to the dashboard, drag the panel to the second row and resize the panel.
:::
::::::

This process can be repeated for the other properties `RPM` and `Level`. In the end result could look like this screenshot below.

![](https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/sP_xeFYGu-1fyKr6C0-9O-20260327-162624.png "WIP dashboard #3")
:::::::

:::::ExpandableHeading
### Creating a new row: `Recent events`

This row will focus on showing the latest batch steps in a table.

::::WorkflowBlock
:::WorkflowBlockItem
Click :inlineImage[]{src="https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/EhqvjhkKs3ATxhlx2CuQp-20260325-092933.png" alt caption width="116" height="48"}**&#x20; >&#x20;**`Row`
:::

:::WorkflowBlockItem
Configure the new row options :inlineImage[]{src="https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/ECnaytXssISQk7sqLn1uD-20260325-093600.png" alt caption width="32" height="32"}

&#x20;Row title: `Recent events`
:::

:::WorkflowBlockItem
Click `Update`
:::

:::WorkflowBlockItem
Drag the new row to the bottom
:::
::::
:::::

:::::::ExpandableHeading
### Add a new `Table` visualisation

See [Viewing Event properties as a table](docId\:H6YbVqvQPr4V1M_xXdNpo).

::::::WorkflowBlock
:::WorkflowBlockItem
*Click* :inlineImage[]{src="https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/EhqvjhkKs3ATxhlx2CuQp-20260325-092933.png" alt caption width="116" height="48"} > `Visualisation`
:::

:::WorkflowBlockItem
Select Data source: `Factry Historian Datasource`
:::

:::WorkflowBlockItem
Configure the data source

- Tab: `Events`
- Query type: `Simple`
- Assets: `$mixer`
- Event types: `Filling step` `Mixing step` `Emptying step`
:::

:::WorkflowBlockItem
Add transformation `Merge series/tables`

The query returns a separate table for each event type by default, this transformation merges those into one.
:::

:::WorkflowBlockItem
Add transformation `Filter fields by name`

This transformation allows you to select the field you want and deselect the ones you don't want to see in the table by hand.

Select at least: `EventType` `StartTime` `StopTime`
:::

:::WorkflowBlockItem
Add transformation `Sort by`

After bringing the tables together with the merge transformation, the events are no longer in chronological order.

Field: `StartTime`

Reverse: `Checked`
:::

:::WorkflowBlockItem
Change visualisation to `Table`

In general you can use **table panels** to display events with their simple properties.
:::

:::::WorkflowBlockItem
Configure the panel options

- Panel options
  - Title: `   `
- To color the different EventType values in different colors, there are 2 options

::::Tabs
:::Tab{title="Option 1: Cell type"}
* Click `+ Add field override` > `Fields with name`
  - Fields with name: `EventType`
* Click `+ Add override property` > `Cell type`
  - Cell type: `Pill`
    *(This will highlight different field values in standard different colors, which makes the event types more visually distinctive in the table.)*
:::

:::Tab{title="Option 2: Value mappings"}
- Value mappings
  - *Click* `Add value mappings`
    - Value: `Mixing step`
    - Display text: *Leave empty*
    - Color: *Choose color*
  - *Repeat for&#x20;*`Filling step`*&#x20;and&#x20;*`Emptying step`
:::
::::
:::::

:::WorkflowBlockItem
Placement of the panel

Go back to the dashboard, drag the panel to the correct row and resize.
:::
::::::

![](https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/tNDp8cjMzmug8jT6JPiQK-20260327-203034.png "WIP dashboard #4")
:::::::

:::::ExpandableHeading
### Add a new `State timeline` visualisation

::::WorkflowBlock
:::WorkflowBlockItem
*Click* :inlineImage[]{src="https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/EhqvjhkKs3ATxhlx2CuQp-20260325-092933.png" alt caption width="116" height="48"} > `Visualisation`
:::

:::WorkflowBlockItem
*Select Data source:&#x20;*`Dashboard`

Since the event data was already queried by the previously created table panel, we can re-used that dataset and the transformations for this new panel.

Source panel: <font color="#2166ae76">`pick the correct panel`</font>

Transform: `Checked`
:::

:::WorkflowBlockItem
*Change visualisation to&#x20;*`State timeline`

In general you can use state timeline **panels** to display how **the state of something** changes over time. This panel type can also interpret a second timestamp to indicate the end of the 'state'.
:::

:::WorkflowBlockItem
*Configure the* *panel options*

- Panel options
  - Title: `    `
  - Transparent background: `Checked`
- Legend
  - Visibility: `Unchecked`
- Value mappings
  - *Click* `Add value mappings`
    - Value: `Mixing step`
    - Display text: *Leave empty*
    - Color: *Choose color*
      *(Best to use the same colors as the previous panel.)*
  - *Repeat for&#x20;*`Filling step`*&#x20;and&#x20;*`Emptying step`
:::

:::WorkflowBlockItem
Resize the panel

Go back to the dashboard, drag the panel to the second row and resize the panel.
:::
::::
:::::

## End result

The end result should look like something like this screenshot below.

![](https://api.archbee.com/api/optimize/SMPo4IS9FkillUAMsur2c/uQa_KeS1dk2k0QajySW0I-20260329-143509.png "Finished dashboard")
