---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Seeq Knowledge Base

*

  ## [Deploying and Managing Seeq](https://support.seeq.com/latest/cloud/deploying-and-managing-seeq.md)

  Plan, manage, and scale your Seeq deployment.
*

  ### [Connecting to Data](https://support.seeq.com/latest/cloud/connecting-seeq-to-data.md)

  Configure and manage datasources, agents, and connectors.
*

  ### [Using Seeq](https://support.seeq.com/latest/cloud/using-seeq.md)

  Use Workbench, Organizer, and Data Lab to analyze and monitor.
*

  ### [Developing with Seeq](https://support.seeq.com/latest/cloud/developing-seeq-add-ons-and-connectors.md)

  Build on and extend the power of Seeq.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# A Guide to Integrating User-Generated Visualizations into Seeq Organizer

## Overview

When working with user-generated visualizations in Seeq Organizer, there are multiple approaches to achieve different levels of interactivity, scalability, and user experience. Below is a breakdown of some methods:

### **Data Lab + SPy**

#### **Description**

This method involves using Python (with libraries like `matplotlib`, `plotly`, or `seaborn`) to generate visualizations, retrieving data via the [**SPy**](https://python-docs.seeq.com/user_guide/index.html), and manually uploading the resulting image into an Organizer topic. The process includes saving the figure, then pushing it to Organizer via `spy.workbooks.push` after parsing and updating the workbook.

**Example:** <https://python-docs.seeq.com/user_guide/Data%20Lab%20Visualizations.html#data-lab-visualizations>

#### **Use Case**

**Best suited for Organizer topics that only need a simple figure with minimal document formatting or interactivity** (e.g., static reports, one-off charts, or embedded visuals in dashboards where the primary focus is the image itself). This method is ideal when:

* The visualization is the sole content of the topic.

* No dynamic filtering or user interaction is required.

* The goal is to quickly generate and embed a figure without additional text, tables, or formatting.

#### **Pros**

* **Low Overhead**: Can be done entirely within a Data Lab Project.

* **Flexibility in Visualization**: Full control over styling and custom plots.

* **Static Image Integration**: Directly embeds figures into Organizer topics using template.

#### **Cons**

* **No Interactivity**: Images are static, so they cannot leverage dynamic filters (Date Range, Asset tools).

* **Technical Complexity**: Requires Python scripting and HTML parsing for updates.

* **Manual Effort**: Updating images involves re-generating, re-parsing, and re-uploading files.

*** ** * ** ***

### **Python Plotter Add-on**

#### **Description**

This method allows users to create reactive plots within Seeq Workbench that are then linked to Organizer topics via worksheet links. Data is retrieved using `spy.search` and `spy.pull` in Data Lab, and the plot is rendered in the Workbench interface. The Add-on supports dynamic filters (e.g., Date Range, Asset tools) and can be shared with other users.

**Link** : [https://seeq.atlassian.net/wiki/x/CgClAwE](https://support.seeq.com/latest/cloud/python-plotter-add-on.md)

#### **Use Case**

This approach is perfect for situations that necessitate custom visuals in the Organizer Topic, allowing for the assignment of date ranges and/or asset selections to the underlying data.  

#### **Pros**

* **Interactive in Workbench**: Plots update dynamically based on user inputs like date ranges or assets.

* **Link to Organizer**: Can be included in Organizer topics via worksheet links.

* **Re-usability**: Other users can apply the same plots to their data.

* **Simplified Python Scripting**: Requires minimal coding compared to other methods.

#### **Cons**

* **Strict Project Requirements**: Needs specific project naming, filename conventions, and notebook cell headers.

* **Complex Troubleshooting**: Workbench information is sent to the Data Lab Project generating the plot through a request payload, making debugging challenging.

* **No Interactivity in Organizer**: The plot is static when viewed directly in Organizer.

*** ** * ** ***

### **Custom Display Pane Add-on**

#### **Description**

This approach entails the development of a fully interactive visualization as a **custom Add-on** (for instance, utilizing React for the frontend and [Data Lab Functions](https://support.seeq.com/latest/cloud/data-lab-functions.md) for the backend). Once created, the Add-on can be installed via the Add-on Manager and will be accessible within Seeq Workbench, enabling users to engage with visualizations directly in Organizer.

**Link:** <https://support.seeq.com/kb/latest/cloud/add-on-package-example-generator>

#### **Use Case**

Best for scenarios requiring **interactive content in Organizer Topic**.  

#### **Pros**

* **High Interactivity**: Fully customizable and responsive controls.

* **Integration with Workbench**: Seamlessly embedded into Organizer topics.

* **Advanced Functionality**: Supports integration with Seeq Dashboards in Organizer Topic.

#### **Cons**

* **Complex Development**: Requires expertise in frontend (React) and backend (Data Lab Functions).

* **Steep Learning Curve**: Packaging, deploying, and maintaining Add-ons demands significant effort.

* **Admin Involvement**: Requires an admin to install the Add-on for others to use.

*** ** * ** ***

### **IOTA Content**

#### **Description**

This method uses a Data Lab Function (DLF) endpoint to generate dynamic visualizations that can be linked directly to an Organizer topic via the "IOTA Content" button. The endpoint receives input parameters like date ranges or assets, generates the plot on-the-fly, and returns it to Seeq.

**Link:** <https://support.seeq.com/kb/latest/cloud/inserting-seeq-content#InsertingContent-Documents-DataLabContentinOrganizer>

#### **Use Case**

Ideal for scenarios where dynamic content is required in Organizer, but developer doesn't want to develop a Display Pane Add-on.  

#### **Pros**

* **Interactive with Filters**: Visualizations update dynamically based on user inputs (e.g., Date Range, Asset).

* **Real-Time Updates**: Plots are generated in real-time using live data.

* **Flexible Data Handling**: Supports complex parameter passing (e.g., asset IDs or date ranges).

#### **Cons**

* **Technical Complexity**: Requires knowledge of DLF endpoints and how to pass parameters.

* **Limited Debugging Tools**: Harder to test and troubleshoot compared to simpler methods.

* **Parameter Management**: Users must obtain and input specific asset IDs or date range values, which can be cumbersome.

*** ** * ** ***

## **Summary Table**

|            **Method**            |            **Interactivity in Organizer**            | **Ease of Development** | **Scalability** | **Re-usability** |                                **Best Use Case**                                |
|----------------------------------|------------------------------------------------------|-------------------------|-----------------|------------------|---------------------------------------------------------------------------------|
| **Data Lab + SPy**               | Low (Static Images)                                  | Easy                    | Hard            | Limited          | Static figures in Organizer topics with minimal formatting                      |
| **Python Plotter Add-on**        | Medium (Interactive in Workbench)                    | Moderate                | Easy            | Easy             | Custom plots that need to be associated with Assets or Date Ranges in Organizer |
| **Custom Display Pane Add-on**   | High (Fully Interactive)                             | Hard                    | Easy            | Easy             | Advanced dashboards requiring dynamic controls                                  |
| **IOTA Content (DLF Endpoints)** | Medium-Hard (Requires IDs of Assets and Date Ranges) | Moderate to Hard        | Medium          | Medium to High   | Real-time, filter-responsive visualizations in Organizer                        |

*** ** * ** ***

## **When to Choose Each Method**

|                               **Scenario**                                |      **Recommended Method**      |
|---------------------------------------------------------------------------|----------------------------------|
| Simple static figure for a report or dashboard                            | **Data Lab + SPy**               |
| Plots are in Workbench and responsive to display and details pane changes | **Python Plotter Add-on**        |
| Advanced and interactive figures in Organizer                             | **Custom Display Pane Add-on**   |
| Dynamic Organizer content with filters                                    | **IOTA Content (DLF Endpoints)** |

*** ** * ** ***

## **Key Takeaway**

* **Data Lab + SPy**: Best for static figures in Organizer topics where simplicity and speed are prioritized.

* **Python Plotter Add-on**: Ideal for interactive plots that need to be shared across teams but require minimal coding.

* **Custom Display Pane Add-on**: Recommended for advanced, user-facing figures with dynamic controls (requires development expertise).

* **IOTA Content**: Suitable for real-time, filter-responsive visualizations where interactivity and dynamic data are critical.

By aligning your use case with the appropriate method, you can ensure efficient integration of your personally generated visualizations into Seeq Organizer while balancing complexity, scalability, and user experience.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# ABB 800xA Historian

.NET Agent

## Item Type Support

Signals

## Overview

The OPC-HDA connector enables Seeq to access data from the [ABB 800xA Historian](https://new.abb.com/control-systems/system-800xa/800xa-dcs/data-storage-and-visualization/history).

## Prerequisites

The ABB Historian will only expose data via OPC-HDA if it is in the Equipment Model. Verify or update your configuration if needed.  
![image2018-12-17_11-31-36.png](https://support.seeq.com/__attachments/a_dd80ab2b7310b604a41cdbf5459d256aa44b770d74bb34cf4eb6643c02383fdc/image2018-12-17_11-31-36.png?cb=60248c346ea77b98fd0007974495ed70)

### OPC Core Components Installation

The required version of the OPC Core Components libraries is not installed by default.  
If you have already used the Seeq Server Command Line Interface to [move the data folder](https://support.seeq.com/latest/on-premise/changing-the-data-folder-location.md) (using the command "seeq install --data \<new folder path\>") then you do not have to complete this step as the "install with data option" also installs the OPC Core Components libraries. You can skip to Verifying Connectivity below.

To install, execute the following command using the [Seeq Server Command Line Interface (CLI)](https://support.seeq.com/latest/on-premise/using-the-seeq-command-line-interface-cli.md): `seeq install`

This command will ensure all required components are installed. If an error is encountered, follow the instructions in the command output.  
If you do not install the OPC Core Components library, then there may be warnings/errors in the [net-link logs](https://support.seeq.com/latest/cloud/troubleshooting-a-datasource-connection.md) as below:

    Could not instantiate OPC Server Enumerator. Are the OPC Core Components installed?
    System.Runtime.InteropServices.ExternalException (0x80004005): CoCreateInstanceEx: Class not registered

    System.NotSupportedException: The COM server does not support the interface 'OpcRcw.Hda.IOPCHDA_Server'

    Seeq.Link.Connector.HDA.HDAConnection - Unable to connect to HDA server: <server_name>
    System.InvalidCastException: Unable to cast COM object of type 'System.__ComObject' to interface type 'OpcRcw.Comn.IOPCServerList2'.

### Connectivity Verification

One of the more difficult aspects of OPC HDA is initial connectivity. OPC HDA uses Microsoft Windows' DCOM infrastructure for communication and security.

In order to minimize problems and verify that the machine running Seeq will have connectivity, Seeq includes the OPC Foundation's sample OPC HDA client.

In most cases, *Windows Integrated Authentication* is used as the means of authentication for any OPC HDA client like Seeq. That means that you must run with credentials that are authorized on the OPC HDA server / historian to which you are connecting.

Take the following steps **on the Seeq Server machine** to verify connectivity:

* Browse to the **C:\\Program Files\\Seeq Server\\opc-hda-samples\\Bin** folder.

* Note: You may need to modify the path if you have installed to a non-default location.

* If you are using **Windows Integrated Authentication** (most common), hold down the **SHIFT** key and right-click on **OpcHdaSampleClient.exe** . Select **Run as different user**.

If you don't hold down the SHIFT key when right-clicking, you won't see the Run as different user option.

* In the resulting security dialog, enter the credentials that have appropriate permissions to browse tags and retrieve data on the target OPC HDA server.

  * If you're using **Basic Authentication** (where you expect to enter a username and password separate from a Windows account), just double-click on the **OpcHdaSampleClient.exe**.

* The **OPC .NET API Sample Historical Data Access Client** application will appear. In the **Server** textbox / dropdown at the top of the application, you must supply the address of the OPC HDA server.

* If the OPC HDA server is on this same machine, then you can click the dropdown icon on the right side of the textbox and click **Browse**. After a while, the server should appear in the list and you can simply select it.

* If the OPC HDA server is not on the same machine, you'll need the **hostname** and **ProgID**. The Hostname is the OPC HDA server's machine name or IP address.

* The ProgID for ABB 800xA Historian is `ABB.RtdbOpcHdaServer`. The address will take the form **opchda://hostname/ProgID**. For example: opchda://hostname/ABB.RtdbOpcHdaServer

<!-- -->

* Once the server address has been established, click **Connect** . If you are using *Basic Authentication*, you may be prompted for credentials.

This is the point at which you may have difficulty. You may receive relatively terse error messages. Here are some possible error messages and thei corresponding troubleshooting steps:

#### **Access Denied and E_Network_Error**

* The credentials you supplied are not authorized on the OPC HDA server. Try the following actions:

  * Ensure that the target server is configured to allow your user account to connect, browse tags and retrieve data.

  * Ensure that you are running the OPC HDA Sample Client with the correct credentials. (See above instructions for running the client under a particular Windows account.)

  * Ensure that the user is in the 'Distributed COM Users' group on both the OPC-HDA server and remote client machine.

  * NOTE: If this still doesn't work fully you may get an error in the OPC Sample Client saying "E_Network_Error". If this is the case, try adding the user to the Administrator group as well on the target server (i.e. the historian) and try again.

![20170807_DCOM users.png](https://support.seeq.com/__attachments/a_89ab8fbf78638e26903825d8c60a4e012e0df83c6a6e6f366a8404c321f940c0/20170807_DCOM%20users.png?cb=a3615d218cb3b40d34c36ce06ceac01e)

##### **CoCreateInstanceEx: The RPC server is unavailable.**

The OPC HDA client library either could not contact the server, or it could not establish the necessary DCOM apparatus on the server side. Try the following actions:

* Ensure that you've entered the hostname correctly.

* Ensure that the target OPC HDA server is accessible on the network.

* Ensure that the DCOM settings for the target OPC HDA server are configured appropriately to allow remote connections.

  * From the 'Run' menu on the Windows machine type "mmc comexp.msc /32" and then 'Enter'.

  * The '/32' switch is needed to access the menu option for the OPC-HDA server, typically written as a 32-bit application.

  * Navigate to the OPC-HDA server application, right-click on 'Properties', click on the 'Location' tab and ensure the 'Run application on this computer' is checked.

  * Apply changes and close the window.

![20170807_OPC-HDA troubleshooting.png](https://support.seeq.com/__attachments/a_08e7dbe56bee7a65376b8e16df6a6448050a6eb1825090c840f014f571fc96f5/20170807_OPC-HDA%20troubleshooting.png?cb=d216c6f42b3610392a8960f6135a49af)

* This article can be helpful: <https://www.matrikonopc.com/dcom-configuration-opc.aspx>

* If your connection is successful, you will see an entry for your server in the left hand panel. For example:

  ![image2017-2-14_17-57-59.png](https://support.seeq.com/__attachments/a_d8c421a71a5b9d96e4e7e8e005f879681bbc71a6290613013cd1a95bce481b0a/image2017-2-14_17-57-59.png?cb=50f0b8a7be19c528f3e59d4bd5621744)

* Right-click on the new entry and select **Add trend**. A dialog will appear and the first 100 tags will be enumerated.

You can optionally keep adding blocks of 100 tags by responding **Yes** if a dialog appears asking *More items exist. Continue browsing?*

* Browse to a tag that you know has recent data and double-click on it to add it to the list of tags in this new trend.

You can type in a specific tag name at the bottom of the **Create Trend** dialog to add it to the trend. This is useful when there are thousands of tags in the database and you want to check a specific tag.

For some OPC HDA servers, you can right-click on the root node of the tree and select **Set Filters** . Enter a tag name or wildcard pattern with asterisks into the **Item Name** field, then click **OK** . Note: Filters are not supported by **Honeywell PHD** -- an error will be shown.

* Click **Next** when you've added any tags you want to try.

* Click **Done**and observe that a new trend has been added as a child of your server entry, and the tags appear below the trend node.

* Right-click on the new trend (probably "Trend01") in the tree on the right and select **Read Raw**.

* The *Read Values* dialog will appear. You can choose to modify the **Start Time** , **End Time** , **Max Values** and **Include Bounds** parameters. By default, the trend will request 18 months of data ("NOW-18MO") but you can change that to something smaller like "NOW-1D" to request only a day.

  * You can also specify explicit times by selecting **Absolute** (it may be lurking hidden above the **Now** dropdown entry) in the format **2017-02-12T17:34:00.000Z**.

* Click **Next** and you should see data appear in a table on the right-side of the dialog box. You can right-click on the table of data and select **Graph** to switch to a visualization.

Check the **Result** textbox for an error. Errors start with **E_** . Successful queries start with **S_**. If you encounter an error with the sample client, then Seeq will likely encounter the same error if you attempt to bring up the same tag and date range.

If you made it this far, you are ready to enable the OPC HDA connection in Seeq!

## Configuration

This is an example configuration template that is displayed in the *Additional Configuration* box that appears when you click *Configure* for an existing datasource (or if a new datasource is being created, in the *Create new datasource connection* modal that appears after clicking *Add Datasource*) on the Datasources administration page.

    {
          "URL": "opchda://localhost/OPCSample.OpcHdaServer/{6a5eedec-1509-4627-997f-993ccb65ab7c}",
          "Username": null,
          "Password": null,
          "Filters": [],
          "ArchivingEnabled": true,
          "BuildTree": false,
          "RetryAttemptsOnError": 0,
          "RetryDelayOnError": "0.1s",
          "RecycleConnectionEvery": null,
          "Instrumentation": {
            "Enabled": false,
            "TagCountMax": 1000,
            "TagNameRegexFilter": null,
            "ValueCaptureEnabled": false,
            "ValueCaptureStartTime": "NOW-24MO",
            "ValueCaptureEndTime": "NOW",
            "ValueCaptureMaxValues": 10,
            "ValueCaptureIncludeBounds": true
          },
          "SimulationFile": null,
          "OpcApiCallTimeout": "60m",
          "HistorianQualityFilter": null
    }

### Additional Configuration

|    **Property Name**     |          **Default Value**          |                                 **Data Type**                                  |                                                                                                                                                                                                                                                                                                                                         **Description**                                                                                                                                                                                                                                                                                                                                          |
|--------------------------|-------------------------------------|--------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `URL`                    | null                                | String                                                                         | This is the URL used to connect to the OPC-HDA server, as collected in Prerequisites.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `Username`               | null                                | String                                                                         | This is the username if using *Basic Authentication*. Note that you can also set up *Windows Integrated Authentication* , follow the instructions in the [Installing A Remote Agent / Run as a Specific User article](https://support.seeq.com/latest/cloud/installing-and-upgrading-a-seeq-remote-agent.md#Running-the-Seeq-Remote-Agent-as-a-Specific-User) to configure the service appropriately.                                                                                                                                                                                                                                                                                                                    |
| `Password`               | null                                | String/[SecretFile](https://support.seeq.com/latest/cloud/storing-datasource-configuration-secrets.md) | This is the password if using *Basic Authentication* . It is recommended to [leverage a Secrets File](https://support.seeq.com/latest/cloud/storing-datasource-configuration-secrets.md) to store this information. Note that you can also set up *Windows Integrated Authentication* , follow the instructions in the article [Installing A Remote Agent / Run as a Specific User](https://support.seeq.com/latest/cloud/installing-and-upgrading-a-seeq-remote-agent.md#Running-the-Seeq-Remote-Agent-as-a-Specific-User) to configure the service appropriately.                                                                                                                                                                              |
| `Filters`                | An Empty List                       | List of FilterDefinitions                                                      | You can choose to include or exclude certain tags from your OPC-HDA datasource by specifying filter definitions. Note that these filters are distinct and work differently from the filters that you may have used with the OPC-HDA Sample Client.                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `ArchivingEnabled`       | true                                | Boolean                                                                        | Whether archiving is enabled. In general, this parameter should be left to the default value of `true` unless there are problems with indexing. For connections where indexing fails to index all items randomly and without causing indexing to fail outright, `ArchivingEnabled` can be set to `false`. Indexing then becomes cumulative; so it is better suited for connections that don't have many items archived over time.                                                                                                                                                                                                                                                                |
| `BuildTree`              | true                                | Boolean                                                                        | Whether an asset tree should be created. In general, this parameter should be left to the default value of `true` unless there are problems with indexing. In rare cases, the asset tree created by the connector based on the Elements in the OPC-HDA tree may be problematic. For example, the tree may have a single root Asset with over 100k Signals as direct children. In such cases, this parameter may be set to `false`. The same signals will be created as when `BuildTree` is `true`, but no assets or relationships will be defined. This avoids poor write performance when indexing the HDA metadata and slow navigation when searching for Signals in the Workbench Data panel. |
| `RetryAttemptsOnError`   | 0                                   | Integer                                                                        | The number of retries on error. If requests made to the HDA server are failing intermittently during normal operation. If this field is set to an integer greater than zero, any failed requests will be retried the number of times specified, with a delay of `RetryDelayOnError` after each failed request.                                                                                                                                                                                                                                                                                                                                                                                   |
| `RetryDelayOnError`      | `0.1s`                              | String                                                                         | The delay between retries on error. This field may be set using any valid Seeq duration string, but a delay greater than 10s is not advised.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `RecycleConnectionEvery` | null                                | String                                                                         | When set to a valid Seeq duration string, the connection to the HDA server will be closed and reopened whenever the period of time specifiedhas passed. This is occasionally helpful for HDA servers that continue to indicate a valid connection when checked but do not respond correctly to data requests or attempts to browse tags.                                                                                                                                                                                                                                                                                                                                                         |
| `Instrumentation`        | A default InstrumentationDefinition | InstrumentationDefinition                                                      | A troubleshooting tool that can be helpful is the *Instrumentation* capability. If you set the **Instrumentation / Enabled** field to **true**, an XML file will be produced in the log folder beneath Seeq's data folder. It will be named for the HDA server (e.g. OPC.PHDServerHDA.1-PHDPROD1.xml). You can examine this file yourself to get a sense for the API calls being made by Seeq, but it's probably best to engage with Seeq Support and send them the file to help you troubleshoot.                                                                                                                                                                                               |
| `SimulationFile`         | null                                | String                                                                         | Path to an XML file in a Seeq-created format for server simulation and testing; rarely used.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `OpcApiCallTimeout`      | `60m`                               | String                                                                         | A timeout used for calls to the OPC HDA server - if a connect, disconnect, status, validate, etc., call has not completed or thrown an error after this period of time, a timeout exception will be thrown, and the call will not succeed.                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `HistorianQualityFilter` | null                                | String                                                                         | This is the list of quality values that should not be sent to Seeq (note that this is different from sending to Seeq as invalid values). By default, (including when `"HistorianQualityFilter": null`) samples with quality set to `NoBound` are not sent to Seeq. Multiple invalid quality values can be specified by separating them by the pipe character (`|`). For example, setting this value to `NoData|DataLost` will exclude samples with a quality of *NoData* , *DataLost* , and *NoBound*.                                                                                                                                                                                           |

#### FilterDefinition Configuration

| **Property Name** | **Default Value** | **Data Type** |                                                                                                                      **Description**                                                                                                                       |
|-------------------|-------------------|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `Glob`            | `TEST_*`          | String        | The expression to be included or excluded in [File Glob Syntax](https://support.seeq.com/latest/cloud/file-glob-syntax.md).                                                                                                                                                        |
| `Type`            | `Exclude`         | String        | This field should be set to either `Include` or `Exclude`. If one or more Include filters are specified, then all tags that don't match the filter(s) are excluded. If an Exclude filter is specified, then tags that don't match the filter are included. |
| `Enabled`         | true              | Boolean       | Whether the filter is enabled or disabled.                                                                                                                                                                                                                 |

##### InstrumentationDefinition

|    **Property Name**    | **Default Value** | **Data Type** |                                                                                       **Description**                                                                                       |
|-------------------------|-------------------|---------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `Enabled`               | `false`           | Boolean       | Whether the intrumentation is enabled or disabled.                                                                                                                                          |
| `TagNameRegexFilter`    | `null`            | String        | Filter for the TagNames that will be included in the instrumentation file. When null, no filter will be applied.                                                                            |
| `TagCountMax`           | `1000`            | Integer       | Maximum number of children per node to intrument.                                                                                                                                           |
| `ValueCaptureEnabled`   | `false`           | Boolean       | True if you want to capture time series data for each tag.                                                                                                                                  |
| `ValueCaptureStartTime` | `NOW-24MO`        | String        | The start time for capturing time series data for each tag. Uses the OPC-HDA interface's specification scheme, which is generally "NOW-##MO", signifying "now minus some number of months". |
| `ValueCaptureEndTime`   | `NOW`             | String        | The end time for capturing time series data for each tag. Uses the OPC-HDA interface's specification scheme, which is generally "NOW-##MO", signifying "now minus some number of months".   |

See [OPC-HDA Filtering Examples](https://support.seeq.com/latest/cloud/opc-hda-filtering-examples.md) for more information.

## Known Issues

Seeq is aware of Microsoft KB5004442 and has validated that the OPC-HDA connector is not affected by this. See [DCOM Hardening](https://support.seeq.com/latest/cloud/dcom-hardening.md) for more information.

Please report any other issues you find to our [support portal](https://seeq.atlassian.net/servicedesk/customer/portal/3).

## Troubleshooting

### Verify with a standalone OPC-HDA Client

If you are experiencing any errors retrieving data, the first step is to confirm whether or not you can retrieve the same data using a standalone OPC-HDA client.

You can use the **OPC .NET API Sample Historical Data Access Client** as described in the Connectivity Verification section above. This tool accesses OPC-HDA data in exactly the same way as Seeq, so it's the most useful verification to perform.

You can also use the [MatrikonOPC Explorer](https://www.matrikonopc.com/downloads/176/software/index.aspx) tool, which has similar features.

### Enabling/disabling indexing, especially for larger systems

In some configurations, large systems may have too many tags and it may not be beneficial to index them all at once (for example, a company may have 20 OPC-HDA servers, and one may choose to index one server at a time), or ever again after the initial indexing has taken place (due to performance hit every few hours, or whenever Seeq chooses to index again either at startup or via a set schedule). To control whether or not to do indexing, set the indexing schedule according to the instructions in [Scheduling Connector Indexing Activities](https://support.seeq.com/latest/cloud/scheduling-connector-indexing-activities.md).

### Invalid Values

If the data being retrieved by Seeq is reported by the historian as being `bad` (as defined in section 6.8 of the OPC-DA specification), it will be sent as invalid. Data reported as `good` or `uncertain` will be read by Seeq as valid. In order to have Seeq treat this data as valid, the reason for the low quality should be addressed prior to using the data for analytics.

### Disabling archiving

Seeq may receive inconsistent results when browsing items from certain HDA systems or historians. This manifests as signals disappearing from the asset tree and not showing up in search results in Seeq. If it is the case that these signals still return samples successfully (for instance on a worksheet where they were previously added), and the `Archived`property on the signal is `true`, the Seeq connection to the historian may have archived that signal because it was not present in the most recent indexing process. One way to verify this is to search the [net-link log](https://support.seeq.com/latest/cloud/troubleshooting-a-datasource-connection.md) for the phrase "Datasource clean-up complete", which should appear on a line that includes the name of the server and the number of items archived.

In this case, one possible option is to disable archiving. The downside of this is that if items are removed from the HDA datasource, they will not be archived in Seeq - they will continue to show up in the asset tree and search results. The upside is that even if Seeq notices that the item is missing during the indexing process, it will not archive it - so intermittent missing items will be unaffected.

If you are running into other issues with connecting to or access data from ABB 800xA Historian, view our guide for [troubleshooting datasource issues](https://support.seeq.com/latest/cloud/troubleshooting-a-datasource-connection.md).

## Performance considerations

Connecting to ABB 800xA Historian does not have any special performance considerations. View our guide on [optimizing datasource performance](https://support.seeq.com/latest/cloud/optimizing-a-datasource-connection.md) for general guidance.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Accessing Data from a Follower Cluster

## Introduction

Often, when architecting an ADX cluster, you will leverage a leader and follower cluster. The leader will generally be responsible for ingesting data, and the follower will be available for ad-hoc query loads. Follower databases are read-only. This guide will explain how to set up your follower cluster so that Seeq can successfully index the follower tables in the read-only database.

### Why

During indexing, Seeq needs to query for metadata. This metadata typically does not have an available column that would work for paginated queries. Due to default returned row count limitations, Seeq leverages stored queries to paginate the metadata response query [as documented by Microsoft here.](https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/stored-query-results#pagination) This stored query functionality requires read/write.

## Prerequisites

1. This guide assumes that you have two ADX clusters arranged in a leader/follower configuration, [as described here](https://learn.microsoft.com/en-us/azure/data-explorer/follower?tabs=csharp).

2. You will need to create a new empty database in the follower cluster. No data will be in this database. It will only hold stored functions to access data in the read-only follower database.

## Creation of the Stored Functions

![Untitled Diagram-1698700853277.drawio.png](https://support.seeq.com/__attachments/a_02fed34cd7d8d0244ce13e49c2eeba91eba3c9ff152b559c1a5a7013c34b30f0/Untitled%20Diagram-1698700853277.drawio.png?cb=2c4ba34472a9846831912bb627050068)

In this example, we will be creating the structure shown above.

Leveraging the example [shown here](https://support.seeq.com/latest/cloud/example-accessing-metadata-and-value-data.md), we will be creating a stored function in our read-write database called `SeeqRead` that was created as part of prerequisite two above. Within the `SeeqRead` DB, you must create two stored functions. One for the dimension table and one for the fact table. The stored functions can be created with the following Kusto commands:

    .create-or-alter function with (folder = "Seeq") FactTableFn() {
        database("Documentation").FactTable
    }

This will create a stored function in a folder called "Seeq" called `FactTableFn`. This stored function will perform a cross-database query [as described here](https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/cross-cluster-or-database-queries?pivots=azuredataexplorer#perform-cross-cluster-or-cross-database-queries). Additionally, a second stored function will be used to perform the cross-database query for the dimension data.

    .create-or-alter function with (folder = "Seeq") DimensionTableFn() {
        database("Documentation").DimensionTable
    }

## Configuration of the ADX Connector

Now that we have created the stored functions, we will configure the connector to leverage them.

    {
        "RootAssetName": "Dimension Model",
        "GenerateTableAsset": false,
        "SignalTables": [
            {
                "Id": "String Data",
                "Name": "FactTableFn",
                "NameQuery": null,
                "GroupBy": [
                    "siteId",
                    "lineId",
                    "machineId",
                    "tag"
                ],
                "GroupByLimit": 0,
                "DataColumns": [
                    "Value_S"
                ],
                "DataColumnQuery": null,
                "TimeColumn": "TS",
                "LastGroupAsSignalName": true,
                "TransformQuery": null,
                "TimeUnit": null,
                "ComputedGroupByResult": null,
                "GroupByRequestProperties": null,
                "DataRequestProperties": null,
                "MetadataQuery": {
                    "TableName": "DimensionTableFn",
                    "Filters": "where valuetype == \"string\"",
                    "Columns": [
                        "interpolation",
                        "unit",
                        "siteId",
                        "lineId",
                        "machineId",
                        "tag",
                        "tagId"
                    ],
                    "UniqueKeyColumnName": "tagId"
                },
                "SignalPropertiesMap": {
                    "Interpolation Method": "interpolation",
                    "Description": "machineId"
                }
            },
            {
                "Id": "Numeric Data",
                "Name": "FactTableFn",
                "NameQuery": null,
                "GroupBy": [
                    "siteId",
                    "lineId",
                    "machineId",
                    "tag"
                ],
                "GroupByLimit": 0,
                "DataColumns": [
                    "Value_D"
                ],
                "DataColumnQuery": null,
                "TimeColumn": "TS",
                "LastGroupAsSignalName": true,
                "TransformQuery": null,
                "TimeUnit": null,
                "ComputedGroupByResult": null,
                "GroupByRequestProperties": null,
                "DataRequestProperties": null,
                "MetadataQuery": {
                    "TableName": "DimensionTableFn",
                    "Filters": "where valuetype == \"numeric\"",
                    "Columns": [
                        "interpolation",
                        "unit",
                        "siteId",
                        "lineId",
                        "machineId",
                        "tag",
                        "tagId"
                    ],
                    "UniqueKeyColumnName": "tagId"
                },
                "SignalPropertiesMap": {
                    "Value Unit Of Measure": "unit",
                    "Interpolation Method": "interpolation",
                    "Description": "machineId"
                }
            }
        ],
        "ConditionTables": [],
        "ApplicationId": "<example application Id>",
        "AccessKey": "<example access Key>",
        "TenantId": "<example tenant ID>",
        "UserName": null,
        "UserPassword": null,
        "Cluster": "https://<cluster name>.<cluster region>.kusto.windows.net",
        "Database": "SeeqRead"
    }

In the configuration above, the database field points to the read/write database we created in the follower cluster. The individual tables are configured to connect to the stored functions we created.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Action Required: Upgrade Data Lab Projects to Python 3.11

**Python 3.8 will be removed from Seeq Data Lab on October 7, 2025 because it reached** [**end-of-life**](https://devguide.python.org/versions/)**in October 2024.**

As a result, Project Notebooks, Scheduled Notebooks, Add-ons, and Data Lab Functions currently utilizing the Python 3.8 kernel will no longer be supported. This may lead to compatibility issues or unexpected behavior. To ensure continued functionality and access to the latest features and security updates, Data Lab will transition to Python 3.11 as the default kernel. We recommend that users update their Data Lab Projects to be compatible with Python 3.11 to avoid any disruptions.

The video below provides an overview of this transition and how to update projects to avoid disruptions  
<https://www.youtube.com/watch?v=tKuNcZXDFmc>

## What to do

Perform the steps in the [Data Lab Python 3.11 Compatibility Guide](https://support.seeq.com/latest/cloud/data-lab-python-3-11-compatibility-guide.md). This will instruct you on how to update existing Python 3.8 notebooks to use the Python 3.11 kernel.

Update the Add-on Manager and other Add-ons using the Add-on Manager.

## What happens once Python 3.8 is removed?

When Python 3.8 is removed from Seeq Data Lab, any notebooks previously saved with the Python 3.8 kernel will automatically default to using the Python 3.11 kernel. This includes Scheduled Notebooks, Add-ons, and Data Lab Functions, all of which will run using the Python 3.11 environment.

This means any notebook cell that attempts to import packages that have not been installed in the Python 3.11 environment will fail with a `ModuleNotFoundError`. To prevent this, make sure to verify that all necessary packages are installed and correctly configured in your Python 3.11 environment.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Add Home Screen Links

![image-20250129-195754.png](https://support.seeq.com/__attachments/a_4179a1e8b1e33c27e6527f86eaf69e8b04e3b972fb1a84930d6c48902b62a5a5/image-20250129-195754.png?cb=8dc1c33cb3b45365924f923ebd91cc66)  
Admins can add additional links to the home screen to easily link Seeq to other corporate sites. These links will be displayed in a collapsed Company Links section on the right side of the home screen.

To add additional links Admin can turn on and edit the feature in the Configuration tab of the Administration section of Seeq. The feature name is **Features/Homescreen/CustomSidebar.**  
![image-20220415-222254.png](https://support.seeq.com/__attachments/a_d7f002f267ca10519f7c7839d319cd9bbf94ffe163c4a031547aed31cd5966a7/image-20220415-222254.png?cb=a0f7e23fb24ef495b0adb583fc74501d)

Click **Override Default Value**and enter your new links using simplified markdown text.

Example Setup:

    # Company Links
    ## My Subheading
    - [Seeq Webinars](https://seeq.com/resources/webinars)
    - [Seeq Use Case Examples](https://www.seeq.com/resources/use-cases)

![image-20220415-223140.png](https://support.seeq.com/__attachments/a_ad9e316fff460ef6a86b6fd1aa6765114078c2711a2c6a334ce7e88fddfcced8/image-20220415-223140.png?cb=6f8b648999573cdbc386b3679f84f336)

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Add-on Calculation Engine

## Overview

The Add-on Calculation Engine allows customers to extend the calculation capabilities of Seeq with the compute capabilities of Python.

## **What can it do** ?

Add-on Calculations allows users to run Python scripts on Seeq Signals. The results of the calculation are directly accessible as Signals within Seeq Formula.

These calculations can either be performed by **key** or by **sliding-window.** Both types of calculation produce a **Signal** as output.

**Key calculations** give a Python script access to the sample (or samples, if multiple signals) at a particular key. The script then performs calculations to produce an output sample at that key.

**Sliding-window calculations** give a Python script access to a sliding-window of keys and all samples present at these keys. The script then performs calculations to produce an output keyed at the start of the sliding window.

## **How it works**

The **Python Connector** watches for script packages in a folder named `user` on Seeq Remote Agents.  
For Seeq SaaS, Remote Agents are the preferred location for add-on calculation scripts. For legacy on-prem, it is also possible to place them on the Seeq Server.

This folder is located at `~/.seeq/data/add-ons/calculations/python/user` on Linux or MacOS, and at `C:\ProgramData\Seeq\data\add-ons\calculations\python\user` on Windows.  
![User File location on a Windows Seeq Server](https://support.seeq.com/__attachments/a_c88f5823bd7bf67e0388a7f7a5f582310a7dfbaab983dca9a7378f9133f6b7cb/Screen%20Shot%202022-03-14%20at%208.12.53%20AM.png?cb=886cfefd938cf5eca36a18ff54663a73)
User File location on a Windows Seeq Server

The connector looks for changes in the `user` folder, appropriately responding to package creation, updates and removal.

The `example` folder contains an example package called `Seeq_Examples` that can be used as a starting point and inspiration for your own custom packages.

All changes in the `example` folder will get overwritten when Seeq restarts.

The `extcalc` folder is a Python module where the calculation engine and helping classes are provided.

`readme.html` provides more detailed descriptions of examples as well as the specific coding requirements of Add-on Calculations.

## **Script Packages**

Each folder in the `user` folder will create a User Defined Function package (see [User-Defined Formula Functions](https://support.seeq.com/latest/cloud/user-defined-formula-functions.md) ). These can be used to organize your scripts, such as by team or by topic.  
![Three packages in the user folder - Forecasting, RootCause, and SiteA](https://support.seeq.com/__attachments/a_32d88a761afd976b7aece522705b782e74c4924fd76e8fd58a72cdfa51a69947/Screen%20Shot%202022-03-14%20at%208.52.40%20AM.png?cb=1709407df5e3fe8f4cdd036e2ef6d6be)
Three packages in the user folder - Forecasting, RootCause, and SiteA  
When creating a new package, create the package folder first, then add scripts inside of it. Copying an entire package folder containing scripts into the `user` folder can occasionally cause scripts to not be integrated properly.

Package names are used as a prefix in the created User Defined Functions. For example, all scripts in the `Forecasting` package will produce functions with names such as `Forecasting_function1`, `Forecasting_function2`, etc. This makes searching for them in Formula Documentation easy: all you need is the package name to find all scripts in that package.

## **Script Definitions**

It is recommended to start from an example script from `examples/Seeq_Examples`. Create a new folder inside of the `user` folder to serve as your package. Copy the example script into your new package folder and begin modifying the `compute`, `compute_output_mode` and `function_details` methods. There is no need to restart Seeq when the script is changed as the entire `user` folder and its children are watched continuously for changes.
Python Script Details  

### Python Script Details

The file name of your script will be used as the name of the function created in Seeq. The script must end in the `.py` extension. It must be placed in a package folder, which is itself in the `user` directory. Multiple scripts can live in the same package folder, but they must have different Python files. For example  
![The Forecasting package containing two scripts - Function1.py and Function2.py](https://support.seeq.com/__attachments/a_8ce22b5b1650745c7952538f35d27064128ace185ae1f52b2e8eb429e18c155c/Screen%20Shot%202022-03-14%20at%209.35.19%20AM.png?cb=a90307b84b500e7f3a04a7fdf513168d)
The Forecasting package containing two scripts - Function1.py and Function2.py

Each Python file must have a class with the same name as the file. This class should extend one of `KeywiseExternalCalculationScript` or `WindowExternalCalculationScript`, depending on if your script operates on data at a single key, or over a window of data. Both of these classes support the following methods:  

|       **Method Name**       |                                     **Purpose**                                     |             **Called when?**             |  **parameters**   |                         **return values**                         | **Required** |
|-----------------------------|-------------------------------------------------------------------------------------|------------------------------------------|-------------------|-------------------------------------------------------------------|--------------|
| initialize                  | Initialize any values needed by the script.                                         | once, at the very beginning of execution | none              | none                                                              | No           |
| **validate**                | Validate that input types are correct.                                              | once, right after initialize             | validation_object | none                                                              | Yes          |
| **compute_output_mode**     | Tell Seeq if this Add-on calculation will return a String Scalar or numeric Scalar. | once, right after validate               | none              | 'NUMERIC' or 'STRING'                                             | Yes          |
| function_definition         | Holds the User Defined Function information for this Add-on calculation.            | once for each execution                  | none              | {function_details} see below.                                     | No           |
| cleanup                     | Clean up any state created by the script.                                           | once, at the end of execution            | none              | none                                                              | No           |
| get_test_signals_data_types | Define the types of data used to test with `get_test_data`.                         | once, when running in test mode          | none              | \[test_data_types\], all lists elements are 'STRING' or 'NUMERIC' | No           |
| get_test_data               | Return test data for testing the script.                                            | once, when running in test mode          | none              | \[test_data\] see below.                                          | No           |

Additionally, there is a `compute` method that differs between the two classes, as well as a `get_test_window_size` method only for `WindowExternalCalculationScript`s.  

| **Method Name (class)** |            **Called when?**            |     **parameters**     |      **return values**       | **Required** |
|-------------------------|----------------------------------------|------------------------|------------------------------|--------------|
| **compute** (Keywise)   | once for each key in the input signals | key, samples_for_key   | value at key                 | Yes          |
| **compute** (Window)    | once for each key in the input signals | keys, samples_for_keys | value at first key of window | Yes          |
| get_test_window_size    | once, when running in test mode        | none                   | int                          | No           |

Most scripts will only overwrite the `function_details`, `validate`, `compute_output_mode` and `compute` methods. Of these, the two computation methods and `function_details` are required, and `validate` is optional.  
Invalid or missing samples in inputs are represented as None. You can use `extcalc.Invalid` to return a sample with `Scalar.INVALID` or `extcalc.NoValue` if the calculation does not produce a value at that key.

#### Test Data

Data for testing your python script is an array of arrays. The first value in each array is the key value (keys in Seeq are epoch nanosecond longs). Other values in each array are the values of signal inputs at that particular key.

    For example, for keys 1, 2, 3, 4 and two signals where the
    first signal is NUMERIC and with values 2, 4, 6, 8 and
    the second signal is STRING with values 'red', 'blue', 'green',
    'white', the input would look like this:
    [
      [1, 2, 'red'],
      [2, 4, 'blue'],
      [3, 6, 'green'],
      [4, 8, 'white'],
    ]

Function Details (User Defined Function information)  

#### Function Details

This portion defines the **User Defined Function** that will be created in Seeq to represent this add-on calculation. It returns a dictionary with five components: **Name, Documentation, Formula, Parameters,** and **Examples**.

##### Name (String)

The name of the function. This name will be used to invoke the Add-on Calculation inside Seeq Formula.

##### Documentation (String)

A written description of your function. Can include any level of detail you desire. **Optional**.

##### Formula (String)

The formula of the created User Defined Function. Allows to pre-process the input signals using Seeq functions, or post-process the signal result of your Python calculation. The simplest form for a function with one parameter named `$signal` is `addOnCalculation(@@scriptId@@, $signal)`.

This Formula must contain a call to `addOnCalculation` or `addOnCalculationOnWindow` with `@@scriptId@@` as the first parameter. Input signals can be used by other operators within this Formula, or passed directly to the Python calculation.

##### Parameters (Array of Dictionary of Strings)

Each entry is a parameter to the created User Defined Function. Note that not all parameters must be passed to the Python script: some can be used in the Formula without passing them on. There are four fields settable in each parameter. At least one parameter is required in all Add-on Calculations.

Parameters in the list must be ordered

1. Mandatory parameters.

2. Optional parameters with default values.

3. Optional parameters without default values.

Optional parameters let you create different variants of your Add-on Calculation that can be called with different numbers of parameters.  

| **Field Name** |                                                                                                                                          **Description**                                                                                                                                          |                                                                                                   **Examples**                                                                                                    |       **Required**        |
|----------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------|
| Name           | Name of the parameter.                                                                                                                                                                                                                                                                            | `signal`, `throttle`, `input1`                                                                                                                                                                                    | Yes                       |
| Formula        | A formula used to determine the type (signal, condition, capsule, scalar) and metadata (unit of measure) of the parameter. The actual calculation of the formula is unimportant, only the type and units of the formula are used. If you are using default values, formula should **NOT** be set. | `1m.toSignal()` - parameter must be a signal with unit of measure meters. `days()` - parameter must be a condition. `capsule(42s, 42s)` - parameter must be a capsule `42` - parameter must be a unitless scalar. | Yes (if no default value) |
| Optional       | A boolean flag describing if this parameter must be included in calls to the Add-on Calculation. If this field is not set, it is assumed that this parameter is required.                                                                                                                         | `true`                                                                                                                                                                                                            | No                        |
| DefaultValue   | A default value to be used for this parameter if none is provided. Should be a valid Seeq formula. This field should only be set if Optional is set to `true`. If this field is set, you should **NOT** set the formula for this parameter.                                                       | `42m` `sinusoid()`                                                                                                                                                                                                | No                        |

Either the Formula or DefaultValue fields are used to compute the type and unit of measure of a parameter. Set exactly one of them: not both, and not neither.

##### Examples (Array of Dictionary of Strings)

Each entry is an example of the usage of your Add-on Calculation. Examples are **Optional**.

An example is a dictionary that can have two fields. If present, these examples will be visible in the Formula documentation.  

| **Field Name** |                                                                                                                                         **Description**                                                                                                                                          |                         **Examples**                         | **Required** |
|----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------|--------------|
| Formula        | The formula of your example. Use `@@functionName@@` as a placeholder for the name of the Add-on Calculation. It will get replaced by `packageName_functionName` where `packageName` comes from the Package (see section above) and `functionName` comes from the name field of Function Details. | `@@functionName@@($seriesA, $seriesB, 2.5, 2)`               | Yes          |
| Description    | A description of the example.                                                                                                                                                                                                                                                                    | `Multiplies $seriesA by $seriesB, scaled by 2.5 and adds 2.` | No           |

Different examples can be used to document different variants of the Add-on Calculation (invocations with different sets of optional parameters supplied).

## **Testing Your Scripts**

This sections is for testing the python portion of your calculation. To test the entire Add-on Calculation, try using it in Seeq Formula.

1. Override method `get_test_signals_data_types` in your class. This should return an array with the data types of the test input signals. You can use your own implementation or the predefined classes which provide test data.

2. Override method `get_test_data` in your class. This should return an array with data to be used for testing. You can use your own implementation or the predefined classes which provide test data. Details about test value format can be found in the class documentation of the script files or in the example scripts.

3. In case of a window based computation, override `get_test_window_size` also.

4. Start the script using `python -m extcalc <ClassName> <PackageFolderName> --test` in the `<seeq-data-dir>/add-ons/calculations/python` directory.

## FAQ

**Q** : It doesn't seem like Seeq is loading my function. What can I do?

**A** : Make a test Package and copy over one of the Seeq_Example python files into it. If this fails to load properly, there may be some issues with the Add-on Calculation connector. If this succeeds, your script likely has some syntax errors. Try testing the python script using the information in `Testing Your Scripts` above. Confirm that all parts of your `Function Details` are correct. Take a look into the jvm-link logs, searching for "Calculation" to find potentially helpful error messages.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Add-on Calculation Webhook

JVM Agent

## Item Type Support

Signals

## Overview

The Add-on Calculation Webhook connector extends the calculation capabilities of Seeq with the compute capabilities of other external systems. When an Add-on Calculation Webhook connection is properly configured, the webhook is triggered in Workbench to make an HTTPS request to the configured endpoint, sending a payload of data to your external server and getting a response back to Workbench. A registered Add-on Calculation Webhook is accessible to Seeq users in the Formula editor as a User Defined Function (UDF).

## Prerequisites

The main prerequisite to creating an Add-on Calculation Webhook connection is having a REST API endpoint accessible from the remote agent where the connection is configured.  
From the Seeq side, for versions before `2025-01-30-20-34-00.v0`, make sure that the `Features/AddOnCalculations/Webhook/Enabled` flag is enabled (`Administration > Configuration` with `Advanced Filter` enabled)

The webhook can be triggered when indexing the connection or from a compute request from Workbench. The endpoint needs to send different responses depending on whether the HTTP request was triggered from an indexing operation or from compute operation. The HTTP request sends, as part of the payload, the property `action` whose value can be either `metadata` or `compute` to distinguish between the indexing and compute operations that triggered the HTTP request.

Currently, two types of calculations are supported by the Add-on Calculation Webhook connector: 1) **keywise** calculations, and 2) **sliding-window** calculations. The main difference between the two is that window calculations provide expanded data in the HTTP request to perform calculations based on the time window specified (useful when doing data aggregation).

### HTTP request payload to your endpoint

|  **Property Name**  |                                                    **Values**                                                    |     **Data Type**      |                                                       **Description**                                                        |
|---------------------|------------------------------------------------------------------------------------------------------------------|------------------------|------------------------------------------------------------------------------------------------------------------------------|
| `action`            | `compute` or `metadata`                                                                                          | String                 | The action that triggered the HTTP request.                                                                                  |
| `signal_data_types` | \[ `"NUMERIC"` or `"STRING"`\]                                                                                   | Array                  | Seeq signal types. Only if `action: compute`                                                                                 |
| `data`              | \[\[ `key1`, `signal1_sample1`, `signal2_sample1`, ...\],\[`key2`, `signal1_sample2`, `signal2_sample2`, ...\]\] | Multidimensional Array | Signal data. Only if `action: compute`                                                                                       |
| `window_size`       |                                                                                                                  | Float                  | Size of the window in terms of number of samples. Only if `action: compute` and `"inputMode": "WINDOW"` in metadata response |

#### HTTP response from your endpoint

The response from your endpoint must be different depending on whether the request `action` is `compute` or `metadata`

##### HTTP `metadata` response

The `metadata` response must be a json object with the following properties.  

|    **Property Name**    |                                              **Values**                                              | **Data Type** |                                                                                               **Description**                                                                                                |
|-------------------------|------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `inputMode`             | `KEYWISE` or `WINDOW`                                                                                | String        | Determines whether the Seeq HTTP request will send an expanded windowed data timeframe.                                                                                                                      |
| `outputType`            | `"NUMERIC"` or `"STRING"`                                                                            | String        | The data type of the response from the `compute` action of the endpoint                                                                                                                                      |
| `udfDefinition`         | `Name` - String `Documentation` - String `Formula` - See below `Parameters` - List `Examples` - List | Dictionary    | UDF definition. [See this page for details](https://support.seeq.com/kb/latest/cloud/creating-user-defined-formula-functions#CreatingUserDefinedFormulaFunctions-2.CreatetheUser-DefinedFormulaFunction(s)). |
| `udfDefinition.Formula` | `addOnCalculation()` or `addOnCalculationOnWindow`                                                   | String        | Please see the configuration details for [Add-](https://support.seeq.com/latest/cloud/add-on-calculation-engine.md#Function-Details) [Calculation Engine](https://support.seeq.com/latest/cloud/add-on-calculation-engine.md#Function-Details)               |

##### HTTP `compute` response

The `compute` response must be a json object with the following properties.  

| **Property Name** |                     **Values**                     | **Data Type** |                                                                **Description**                                                                |
|-------------------|----------------------------------------------------|---------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
| `doubleSignal`    | \[`sample1`, `sample2`, `sample3`, ... \]          | Array         | Array of values that correspond to the samples of the output signal                                                                           |
| `signalKeys`      | \[`timestamp1`, `timestamp2`, `timestamp3`, ... \] | Array         | Array of timestamps in nanoseconds for the output signal. This is typically re-arrange from the `data` property in the payload of the request |
| `outputType`      | `NUMERIC` or `STRING`                              | String        | Whether the output signal from the endpoint is a numeric or a string signal                                                                   |

#### Examples

Python endpoint implementation example using Flask  
Python

    @app.route('/myendpoint', methods=['POST']) 
    def mycalculation():     
        action = request.json.get('action')      
        if action == "metadata":         
            return create_metadata()     
        else:           
            signal_data = request.json.get('data')          
            return {             
                "doubleSignal": compute(signal_data),             
                "signalKeys": [sample[0] for sample in signal_data],             
                "outputType": "NUMERIC"         
            }

    def create_metadata():     
        return {         
            "inputMode": "KEYWISE",         
            "outputType": "NUMERIC",         
            "udfDefinition": {             
                "Name": "MyAwesomeCalc",             
                "Documentation": "This function calls my endpoint to calculate a transformed signal based on Temperature and Pressure",             
                "Formula": "addOnCalculation(@@scriptId@@, 'NUMERIC', $temperature, $pressure)",             
                "Parameters": [
                    {"Name": "temperature", "Formula": "sinusoid()"},                            
                    {"Name": "pressure", "Formula": "sinusoid()"}
                    ],             
                "Examples": [{
                    "Formula": "@@functionName@@($temperature, $pressure)",                           
                    "Description": "My calculation based on Temperature and Pressure"
                    }]
                }
            }
            
    def compute(signal_data):     
        awesome_calculation = ...  # type: list
        return awesome_calculation

Python endpoint implementation using Data Lab  
This Jupyter notebook has several examples of endpoint implementations using Data Lab. To use it, import this notebook at a Seeq Data Lab project and save it.

[api.ipynb](https://support.seeq.com/__attachments/a_7cee015e8f69b9d6ef6abda6a5a2e0ea4dc705423e6157f3a04a55eabfb716f7/api.ipynb.md?cb=3dfbac6ca1be26420cd85525f114f10a)

The endpoint will be accessible as a REST API endpoint. See <https://support.seeq.com/kb/latest/cloud/invoking-a-data-lab-functions-rest-api-endpoint> for details on making an HTTP request to the Data Lab endpoints.
HTTP POST request (payload to your endpoint during indexing)  
`{"action": "metadata"}`
HTTP response from your endpoint when action is metadata  
**KEYWISE** calculation ([See UDF definition for more details](https://support.seeq.com/kb/latest/cloud/creating-user-defined-formula-functions#CreatingUserDefinedFormulaFunctions-2.CreatetheUser-DefinedFormulaFunction(s)). )

    {
        "inputMode": "KEYWISE",
        "outputType": "NUMERIC",
        "udfDefinition": {
            "Name": "numericNegation",
            "Documentation": "original function",
            "Formula": "addOnCalculation(@@scriptId@@, $signal)",
            "Parameters": [{
                    "Name": "signal",
                    "Formula": "sinusoid()"
                }
            ],
            "Examples": [{
                    "Formula": "$series.@@functionName@@()",
                    "Description": "Negate"
                }
            ]
        }
    }

**WINDOW** calculation

    {
        "inputMode": "WINDOW",
        "outputType": "NUMERIC",
        "udfDefinition": {
            "Name": "movingAverage",
            "Documentation": "This function can compute the moving average",
            "Formula": "addOnCalculationOnWindow(@@scriptId@@, 1/hour, 1day, startKey(), $signal)",
            "Parameters": [{
                    "Name": "signal",
                    "Formula": "sinusoid()"
                }
            ],
            "Examples": [{
                    "Formula": "$series.@@functionName@@()",
                    "Description": "Compute the moving average of $series"
                }
            ]
        }
    }

HTTP POST request (payload to your endpoint when request is triggered by compute)  
**KEYWISE** calculation

    {
        "action": "compute",
        "signal_data_types": ["NUMERIC"],
        "data": [[1712588760000000000, 64.79883458], [1712588880000000000, 64.7721975], ..., [1712600400000000000, 64.580117], [1712600520000000000, 64.53718506], [1712600640000000000, 64.46625369]]
    }

**WINDOW** calculation

    {
    	"action": "compute",
    	"signal_data_types": ["NUMERIC"],
    	"data": [[1715457600000000000, 82.43574576], [1715461200000000000, 87.63449123], ..., [1715637600000000000, null], [1715641200000000000, null]],
    	"window_size": 24
    }

HTTP response from your endpoint when action is compute  
**KEYWISE** or **WINDOW** calculation

    {
    	"doubleSignal": [-64.79883458, -64.7721975, ..., -64.580117, -64.53718506, -64.46625369],
    	"signalKeys": [1712588760000000000, 1712588880000000000, ..., 1712600400000000000, 1712600520000000000, 1712600640000000000],
    	"outputType": "NUMERIC"
    }

## Configuration

This is an example configuration template that is displayed in the *Additional Configuration* box that appears when you click *Configure* for an existing datasource (or if a new datasource is being created, in the *Create new datasource connection* modal that appears after clicking *Add Datasource*) on the Datasources administration page.

    {
        "AuthenticationType": "BEARER_TOKEN",
        "Url": "<endpointUrl>",
        "PackageName": "<packageName>",
        "Token": "<your token>",
        "Version": null,
        "ConnectTimeoutInSeconds": 120,
        "ReadTimeoutInSeconds": 300,
        "CallTimeoutInSeconds": 3600
    }

### Additional Configuration

If your API endpoint requires authentication, only Bearer Token authentication is supported by the Add-on Calculation Webhook connector.  

|     **Property Name**     |              **Default Value**              | **Data Type** |                                                                                       **Description**                                                                                       |
|---------------------------|---------------------------------------------|---------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `AuthenticationType`      | `BEARER_TOKEN` or `SEEQ_DATA_LAB_FUNCTIONS` | String        | Use `BEARER_TOKEN` if your endpoint requires an Bearer Token Authentication. Use `SEEQ_DATA_LAB_FUNCTIONS` if calling a Data Lab endpoint or your endpoint does not require authentication. |
| `Url`                     | null                                        | String        | The URL of your endpoint                                                                                                                                                                    |
| `PackageName`             | null                                        | String        | The name of the UDF package in Formula                                                                                                                                                      |
| `Token`                   | null                                        | String        | Token if `BEARER_TOKEN` is selected for `AuthenticationType`                                                                                                                                |
| `Version`                 | null                                        | String        |                                                                                                                                                                                             |
| `ConnectTimeoutInSeconds` | `120`                                       | Integer       |                                                                                                                                                                                             |
| `ReadTimeoutInSeconds`    | `300`                                       | Integer       |                                                                                                                                                                                             |
| `CallTimeoutInSeconds`    | `3600`                                      | Integer       |                                                                                                                                                                                             |

If your endpoint is set up in a Data Lab project, you must provide the `Agents` group with Read and Write permissions to the DataLab project that hosts the API endpoint.

## Known Issues

If using the `SEEQ_DATA_LAB_FUNCTIONS` to call a Data Lab Functions endpoint, then all Remote Agents must use version `R100.9.8410` or later. See [Updating Remote Agents from Seeq Server](https://support.seeq.com/latest/cloud/updating-remote-agents-from-seeq-server.md).

Please report any other issues you find to our [support portal](https://seeq.atlassian.net/servicedesk/customer/portal/3).

## Troubleshooting

If you are having issues connecting to or accessing data from the Add-on Calculation Webhook, view our guide for [troubleshooting datasource issues](https://support.seeq.com/latest/cloud/troubleshooting-a-datasource-connection.md). Also, check out the <https://support.seeq.com/kb/latest/cloud/add-on-calculation-engine> and <https://support.seeq.com/kb/latest/cloud/creating-user-defined-formula-functions>support pages.

## Performance considerations

Connecting to the Add-on Calculation Webhook does not have any special performance considerations. View our guide on [optimizing datasource performance](https://support.seeq.com/latest/cloud/optimizing-a-datasource-connection.md) for general guidance.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Add-on Development

* [Add-on Terminology](https://support.seeq.com/latest/cloud/add-on-terminology.md)
* [Add-on Package](https://support.seeq.com/latest/cloud/add-on-packaging.md)
* [Repositories](https://support.seeq.com/latest/cloud/repositories.md)
* [Examples](https://support.seeq.com/latest/cloud/examples.md)

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Add-on Extension Mechanisms

## Overview

The four extension mechanisms are Add-on Tools, Frontend Plugins, Data Lab Functions, and Formula packages.

### Add-on Tools

**Element Type:** `AddOnTool`  
Add-on Tools allow functionality developed in Data Lab to be made available in Seeq on the Analysis Tools Panel or the Home Screen. They provide a user interface and are typically developed in Python. When a Seeq user clicks the tool, a new window or tab opens to display the user interface. Add-on Tools are a quick way to provide a no-code experience allowing other Seeq users to take advantage of custom solutions that have been developed in Data Lab.  
![image-20230328-061051.png](https://support.seeq.com/__attachments/a_bc8a7f74ce21d0497bbd6951a66ad25bccf837d77d1170cf940c1dfe2a7d1458/image-20230328-061051.png?cb=975c0f1e4cbd3c91964e135f3774d874)
Add-on Tools

### Frontend Plugins

**Element Type:** `Plugin`  
Frontend plugins allow rich and highly integrated custom user interfaces to be added to Seeq. They are developed using standard web development tools/techniques (HTML, CSS, and JavaScript). They can be added to an Analysis Display Pane, Analysis Tool Panel, or the Seeq Home Screen. Frontend plugins use the [Plugin API](https://support.seeq.com/latest/cloud/plugin-api.md) to interact directly with the Seeq client application or to call into a custom API supplied by Data Lab Functions.  
![image-20230328-061349.png](https://support.seeq.com/__attachments/a_1665c4ab43068178469a9bc3c0ac8dd0c0e2f193da34bd045582023ee1a593a0/image-20230328-061349.png?cb=80e96acc077995904bc18bab961ad7a4)
Parallel Coordinates

### Data Lab Functions

**Element Type:** `DataLabFunctions`

Data Lab Functions is a Jupyter Notebook that provides a REST API. The API is callable by authenticated and authorized Seeq users. It is typically developed in Python. Adding an endpoint is as easy as adding `# GET /my-endpoint` to the top of a Jupyter Notebook cell. Quick loading and advanced applications can be developed by using Data Lab Functions for the backend and Frontend Plugins for the user interface. The Add-on Manager itself is implemented as a Home Screen Plugin frontend with a Data Lab Functions backend.

### Formula Package

**Element Type:** `FormulaPackage`  
Formula Packages allow custom functions to be added to Seeq Formula. Complex or highly specialized algorithms can be named and used in Formula just like any other Seeq-provided formula function. Formula packages are useful on their own, but they also can be used a part of a larger solution that includes other extension mechanisms.  
![image-20230328-061645.png](https://support.seeq.com/__attachments/a_bac2c163e214626ee97ebdee492b7983e13af816605f6b6a97d7ef8d88c18830/image-20230328-061645.png?cb=7f9f881fc2f940dbe2f57ecc73f5d460)
Example Formula Package

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Add-on Packaging Utility

The easiest way to become familiar with the structure of an Add-on package is with an example. A useful example can be very different depending on the Add-on elements required to fulfill a particular need. This is where the Add-on Packaging Utility can be helpful. The Add-on Packaging Utility is a CLI utility that generates Add-on package examples based on a predetermined project template and the user's answers to a series of prompts. Once the example is generated, you can use the included utilities to readily bootstrap, build, and deploy your example packaged Add-on to the Add-on Manager. When you are ready to start developing, you can change the code of the generated example and even "hot-reload" your changes with the `watch` command.

To get started with the Add-on Packaging Utility, and follow the instructions in the [repository](https://github.com/seeq12/seeq-addon-templates)README to install and use this CLI utility.

<https://github.com/seeq12/seeq-addon-templates>

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Add-on Package

## Overview

Add-on packages serve as extensions to Seeq, enhancing core functionality and enabling the implementation of custom solutions. An Add-on package is composed of one or more of the [Add-on Extension Mechanisms](https://support.seeq.com/latest/cloud/add-on-extension-mechanisms.md). These packages, represented by zip files with a `.addon` extension, encapsulate the elements constituting the Add-on, accompanied by a configuration file that outlines its contents. By utilizing the Add-on Manager, Seeq Administrators can easily install, update, and configure Add-on packages, as they are contained within a single, versioned, and distributable file. This article provides a step-by-step guide to comprehending the Add-on package structure and creating one.  
![image-20230804-180840.png](https://support.seeq.com/__attachments/a_080421823f58961eafb46e3926fa55a3e378d4b308c77f60ca770d19f5cab9a7/image-20230804-180840.png?cb=e5776161893773222c359ed97c9160a4)
The Seeq Add-on Manager

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Add-on Terminology

Are you interested in functionality that is not already available out of the box in Seeq? Consider creating your own tool via Seeq Add-ons! Add-ons serve as extensions to Seeq, enhancing core functionality and enabling the implementation of custom solutions. There are different types of Add-ons though, and some features in Seeq use the term Add-on as well. Thus, it is important to distinguish between different types of Seeq Add-ons to determine the most appropriate one for your needs.

The following is a list of terms that include the word `Add-on`, along with their definitions:

* **Add-on Calculation Engine:** Allows users to run Python scripts on Seeq Signals. The results of the calculation are directly accessible as Signals within Seeq Formula. These calculations can either be performed by key or by sliding window**.** [Add-on Calculation Engine](https://support.seeq.com/latest/cloud/add-on-calculation-engine.md)

* **Add-on Calculation Webhook:** Extends the calculation capabilities of Seeq with the compute capabilities of other external systems. A webhook makes an HTTPS request to a configured API endpoint, sending a payload from Workbench to an external server and getting the response back to Workbench. The results are accessible to Seeq users in the Formula editor. [Add-on Calculation Webhook](https://support.seeq.com/latest/cloud/add-on-calculation-webhook.md)

* **Add-on Element:** Any of the four extension mechanisms supported by the Add-on Manager. The four extension mechanisms are Add-on Tools, Frontend Plugins, Data Lab Functions, and Formula packages. [Elements](https://support.seeq.com/latest/cloud/elements.md)

* **Add-on Gallery:** A gallery with a combination of both first- and third-party Add-ons that can be used in conjunction with Seeq Workbench, Seeq Organizer, and Seeq Data Lab. <https://seeq12.github.io/gallery/>

* **Add-on Manager:** Point-and-click interface designed to help users search and request installation and updates of Add-ons. It also allows admins to install, uninstall, configure, and update Add-ons. Add-ons are synced through a JFrog repository, which enables seamless installation and synchronization. [The Add-on Manager](https://support.seeq.com/latest/cloud/the-add-on-manager.md)

* **Add-on Package:** A zip file with a `.addon` extension that encapsulates one or more Add-on Elements and a configuration file (`addon.json`). An Add-on package is the single way to install, update, and configure Add-ons using the Add-on Manager. [https://seeq.atlassian.net/wiki/spaces/SD/pages/2684321986/Add-on+Packaging](https://support.seeq.com/latest/cloud/add-on-packaging.md)

* **Add-on Tool:** Allows functionality developed in Data Lab to be made available in Seeq on the Analysis Tools Panel or the Home Screen [https://seeq.atlassian.net/wiki/spaces/SD/pages/2721808406/Add-on+Extension+Mechanisms#Add-on-Tools](https://support.seeq.com/latest/cloud/add-on-extension-mechanisms.md#Add-on-Tools). Add-on tools open from Workbench include references to the workbook and worksheet IDs.

* **Frontend Plugin Add-on** (or **Plugin Add-on** ): Allows interaction with the data in Trend View. Generally, a Plugin Add-on is a user interface (UI) developed using standard web development tools (HTML, CSS, and JavaScript). They can be added to an Analysis Display Pane, Analysis Tool Panel, or the Seeq Home Screen. [https://seeq.atlassian.net/wiki/spaces/SD/pages/2721808406/Add-on+Extension+Mechanisms#Frontend-Plugins](https://support.seeq.com/latest/cloud/add-on-extension-mechanisms.md#Frontend-Plugins)

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Add-on Tools

## Overview

Add-on Tools appear in an "Add-ons" group on the Seeq Tools panel or the Home Screen. These tools open an app-mode Data Lab notebook. The code of the Add-on Tool can be contained entirely in a single Data Lab notebook, or it can be split into many files to organize more complex development.  
![image-20210611-020414.png](https://support.seeq.com/__attachments/a_d2076a97ccc93929b4d27e3a69b5c65b8ffe4f36d61a8fca4ed6e45d63525ba6/image-20210611-020414.png?cb=ea36a17fe9b1dd3a993b24f6c3e3b8fd)

![image-20210611-021513.png](https://support.seeq.com/__attachments/a_825de6496fafd9e5fbd2a9dd34b0b645c73a8f780fbf81e97bf2a6b275c5433a/image-20210611-021513.png?cb=1ad64b9227d4486bc5643fa2d1da94b1)

## Configuration

An admin user can enable Add-on Tools through the Administration panel from the hamburger menu in the top right of Seeq. Navigate to the "Configuration" tab, change the "Advanced" column to "yes" and switch Features/AddOnTools/Enabled to true.  
![image-20210611-021600.png](https://support.seeq.com/__attachments/a_9eeb28c4db478e792c60ef3d08519ceff989962959c4c2800564bfa1c218ee1e/image-20210611-021600.png?cb=6cda67e66ea4c71faf89a7096c3e91b5)

![image-20210611-021642.png](https://support.seeq.com/__attachments/a_78917762833fb72e309e056fee1b37df6b855ac5b07ecb95a204ea0070d63d81/image-20210611-021642.png?cb=74ebe83b88cee03a52670f6874ad905c)

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Add-ons

Interested in functionality that's not already available out of the box in Seeq? Consider creating your own tool via Seeq Add-ons!

Add-ons can be created for almost anything you'd want to achieve within Seeq. Add-ons can be limited to certain users/groups, or available to all users. They are accessible in several places, depending on the type of Add-on:

* As an alternative visualization in Workbench (example: [Parallel Coordinates](https://seeq12.github.io/seeq-parallelcoordinates/introduction.html)). These Add-ons take context from the Details Pane and Display Range and provide other visualizations. This type of visualization will display in an Organizer Topic.

* As a new Tool in Workbench under Tools \>\> Add-ons. These Add-ons can either launch a pop-up for users to interact with or launch a Tool in the Tool Pane that does not ship with Seeq but is defined by the Add-on installed. This is a widely-used type of Add-on as some Data Lab users can take an example and modify it to achieve their specific purpose.

* Add-ons can also launch from the Home Screen and take over the space between the blue Seeq header and bottom gray footer where the Seeq version is displayed.

Some Add-ons are developed purely in Python (some pop-up Workbench Tools), while others can be developed in various languages including JavaScript, TypeScript, Gherkin, Vue, and Python.

If you want to get started with some free-and-open-source Add-ons, check out our [Add-on Gallery](https://seeq12.github.io/gallery/). This lists Add-ons that are provided by Seeq and partner organizations. Installation and user guides can be found in the documentation for each Add-on.

For more information on enabling/creating/managing Add-ons, please see [Add-on Tool Administration and Development](https://support.seeq.com/latest/cloud/how-to-develop-a-simple-interactive-add-on-tool-us.md).  
![Screen Shot 2021-11-22 at 1.51.40 PM.png](https://support.seeq.com/__attachments/a_3dbe9c419ad5b0e72a7049e1da5388a8cde745beb6c8c64fba1f348bdc8b4a9c/Screen%20Shot%202021-11-22%20at%201.51.40%20PM.png?cb=9dcfa0284fee0f351639932cf503a230)

![image-20220623-140100.png](https://support.seeq.com/__attachments/a_12109dc25c3c031ab82b39b7e26f161b01b2efb470dddb7075d2d0926173674a/image-20220623-140100.png?cb=540d15af1a71cfa2fdebdb0b0739dffa)

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Add Vantage Context

![image-20260706-174750.png](https://support.seeq.com/__attachments/a_7ee4506d30d412f1ac3dd4ddb4cb77cb3a2f87ab27958b7dcf0a03e021c3c32e/image-20260706-174750.png?cb=a7f006f748d1611db36a8a4d2948f1d0)

Use **Add Vantage Context** to add free-text comments or labels to Vantage events.

## When to use

* You have a set of Vantage events from upstream analysis and want to annotate them.

* You want to capture a human-readable summary directly on the events.

## Configuration

* **Instruction**: Specify which events should get context and what type of context. Be explicit about selection criteria (time range, severity, event type, etc.).

Best practices for labels:

* Provide Label name in the instructions if relevant to clearly identify the appropriate label to apply.

* Pair with an Analyze or Think node that has instructions on how the label should be determined.

Best practices for comments:

* Keep comments concise and relevant.

* Pair with a report node that creates the comment. This can include visualizations like tables and charts that can be added to the event as a comment. The comment node is just applying

* Provide relevant links

## Limits and cautions

* Commenting is a side effect: it modifies Vantage event data.

* Large event sets may need batching (start with "top 10" or a narrow time range).

* Reason codes are not supported.

## Example instructions

* "Add the comment 'Investigate root cause: inlet pressure spike' to the 10 most recent surge events."

* "Record the report in a nicely formatted comment on the capsule. Include trends and tables."

* "Based on the prior node, set a Priority label on the event."

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Adding Columns

## Overview

Creating new columns in a Scaling Table gives you more information to operate with, allowing you to perform more complex logic or create multivariate Formulas to get your desired output. Columns can be added in several ways depending on how you're interacting with the table.

Each method below describes how columns can be created and what makes that method unique.

### Using the Scaling Table Editor

While interacting with the table directly, adding columns via the Toolbar will be the most straightforward method of adding new columns. The Toolbar shows a selection of the commonly used column-creation rules.  
![image-20260202-165848.png](https://support.seeq.com/__attachments/a_708f073c4f6d2a5b7fbad8591ebf7a7b53a2766f8d520601c40f572d1cb8fa1d/image-20260202-165848.png?cb=40d6bef7fdb4c2d5721a0c370db08bde)

For more access to *all* the column creation rules, simply select the "Add column" option from the dropdown along the left-hand side, then select the rule and provide the name of the new column. For more information on the different rules used to define a column please refer to [Applying Column Rules](https://support.seeq.com/latest/cloud/applying-column-rules.md) .  
![image-20260202-213621.png](https://support.seeq.com/__attachments/a_237543829cb782dd9169f529e54dff0f35e8c36a0280f363379721d87e46eb7c/image-20260202-213621.png?cb=6156af3e6cadf4dae806e305e9903862)

#### Using Shortcut Options

As a way to save time in creating certain columns, shortcut options are provided on some columns that allow quickly creating new columns. On columns that are of the "Item" type, there are several column options available under the three-dot menu of the column header.  
![image-20260202-220646.png](https://support.seeq.com/__attachments/a_5f417603219e55eadc459cbfa6ece52dd798ba97a9b81169455925bda0f87c69/image-20260202-220646.png?cb=9e5db28d2c16ee0161ff99eca8ff9871)

The options to "Create Column" opens the side pane with options that generate new columns based on the properties available or the hierarchy of the existing data. In the image above, selecting "Create Descendant Column" allows the selection of any descendants of items in the "Search Items" column to be created as a new column as seen below.  
![image-20251022-200659.png](https://support.seeq.com/__attachments/a_819c104a4bd567b447ca0fc5c7964170f9e6ff6e2b8f4d5c2da817e13cdc7021/image-20251022-200659.png?cb=b7490f5a0dc0b415040f7cb692698e50)

#### Using Existing Tools

Columns can also be added to a Scaling Table using the existing tooling Seeq has to offer. After having added items from a Scaling Table to the Details Pane (see [Using created Analytics](https://support.seeq.com/latest/cloud/using-created-analytics.md) ), you can then use existing tools to create new calculated item columns in your Scaling Table.  
![image-20251022-194707.png](https://support.seeq.com/__attachments/a_b42f8ca5157e55bbc1175b8c7f7ec88f33e758998f2319da41437a04746a914d/image-20251022-194707.png?cb=91d5a199dc504afdaab22a9191cf3a29)

In the above example, the "Value Search" tool is used to create a condition on the "Optimizer" signal that has been added from a Scaling Table, however now there is an option presented to "Add to Scaling Table 1". Clicking this execute button will add a new column to the Scaling Table that converts the Value Search condition into a formula and creates the new column. Once the column is added, the calculated item from the Scaling Table is added to the Details Pane. The new item corresponds with the input signal's row in the Scaling Table to enable further operations like row swapping.  
![image-20251022-195124.png](https://support.seeq.com/__attachments/a_3353b2971875e5ac45cdb48036c1e9e17d790687756a4469a54b2933cb88c862/image-20251022-195124.png?cb=8a63449422a245e79cd102036c857bb0)

All of the inputs that are used in the tools must be from the same Scaling Table that is specified in the "Add to ..." button or an error will be presented. If you want to add calculations to your Scaling Table from the existing tools, make sure to add any input variables as columns in your Scaling Table before attempting to use the tool.  
![image-20251022-195220.png](https://support.seeq.com/__attachments/a_d4dbae29fbb8b97cf0a754838d68b432546b9ac661f496b772428a6ada28f45e/image-20251022-195220.png?cb=c83a5d5e792738bbab5d465ad62ffca1)

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Adjusting Date/Time Ranges

Multiple date ranges can be configured in the Organizer Topic to update Seeq content without opening the linked Workbench Analyses. Create fixed-date reports or live updating documents for continuous monitoring. Documents that automatically update will also need a[Schedule](https://support.seeq.com/latest/cloud/scheduling-organizer-topic-documents.md).  
![image2020-9-30_16-40-29.png](https://support.seeq.com/__attachments/a_b56369073c268fedebd635cbccf6606deecf764baa661320f48bc1135ddb7384/image2020-9-30_16-40-29.png?cb=e07735fec1ff0edcffee5b0d8c46c646)

![image2020-9-30_16-44-20.png](https://support.seeq.com/__attachments/a_036ee00707b8698eeb6e7de425723d0d3f3248e2c3b62bb853364e28a2fc941b/image2020-9-30_16-44-20.png?cb=cf84bb00bc60265d20ad6fdc40cca95b)  

## **Configure a Date Range**

Configure a new date range through the Properties tab in an Organizer Topic. A pop-up steps the user through the configuration. Each date range configured will be named Date Range 1, 2, 3, etc. by default unless the user renames them. Step through the wizard to configure a date range within the Organizer Topic.

After configuring a *new* date range you will automatically be prompted to assign this date range as a new property to as many pieces of content as needed by selecting pieces of content from a table and selecting the "Attach" button. To see more properties, click the double arrows on the right side of the pop-up. The new date range will be automatically populated in the date ranges dropdown.

### Fixed Date Range

(Optional) Name date range

Identify **Duration** and **Start** or **End**date as in the Workbench Analysis Display Range

Click **Save**after these changes are complete.

There is a ![image2019-9-12_12-16-8.png](https://support.seeq.com/__attachments/a_5a8489efcf582d13d33a2d2188fa1d80789c6624c3caaaf7b4a008b44ec31941/image2019-9-12_12-16-8.png?cb=27bbffae5ffbc3ac5e2862a06970a2c1) button that can be used to update each fixed date range such that the date range will end at the current time. Selecting this button at the top of the Fixed Date Ranges section will apply this change to all fixed date ranges. If there are some date ranges where this may not apply, instead select this button in line with each fixed date range to update it to the current time.

### Auto-Updating Date Range

Another option is to create a rolling time period (such as the last 7 days).

(Optional) Name date range

Identify **Duration**

Select the **Auto-update** box.

The start and end dates will no longer be editable, but the duration will still apply unless a condition is specified.

(Optional) Offset - define the difference to display if you would like to offset the time window into the past or future.

Select the **Rate**- Set how often content with this range will be updated.

Click **Save**after these changes are complete.

There is a ![image2019-9-12_12-16-8.png](https://support.seeq.com/__attachments/a_5a8489efcf582d13d33a2d2188fa1d80789c6624c3caaaf7b4a008b44ec31941/image2019-9-12_12-16-8.png?cb=27bbffae5ffbc3ac5e2862a06970a2c1) button that can be used to update all auto-updating date ranges such that the date ranges will end at the current time. Selecting this button at the top of the Auto-Updating Date Ranges section will apply this change to all auto-updating date ranges.

This kind of date range requires a [Schedule](https://support.seeq.com/latest/cloud/scheduling-organizer-topic-documents.md)to determine the update frequency.

![Last 7 Days.PNG](https://support.seeq.com/__attachments/a_f0375e3dbf0dc44377332f655ac4534fe8831dc5d3f363012edf10d05137d00e/Last%207%20Days.PNG?cb=28d2e87a7de0404398da7b7b71be107c)  

![Previous Week.PNG](https://support.seeq.com/__attachments/a_35600c78152e4b1af9b31a16240fe6a345c300389bbb7dafb8317544a22a2326/Previous%20Week.PNG?cb=512904c78c664bcb408905c1be3ee523)  
![Previous Week 2.PNG](https://support.seeq.com/__attachments/a_e05696861855ef73cb4f8b958e08c4f16113c86a92612995dcb6b22c4cb32736/Previous%20Week%202.PNG?cb=087bbf2c7d59a17e6387bf6d7b2992ea)  

### Periodic Date Range

This selection is very similar to [Periodic Conditions](https://support.seeq.com/latest/cloud/periodic-condition.md). One Example would be the previous week (Sunday to Saturday no matter what day today is).

(Optional) Name date range

Click **plus** icon to reveal the Condition drop-down

In the drop-down list, choose **Periodic Condition**

Choose **Duration**

* **Hourly:** No additional options. The subsequent selections will be hour-long time periods.

* **Hours:** Specify the # of hours in the periodic capsules and offset for the capsules relative to midnight. The subsequent selection will be available for those hours per day with duration and offset from user inputs.

* **Daily:** Specify all days or specific days of the week. The subsequent selection will be day-long time periods.

* **Weekly:** Specify the start of the week. The subsequent selections will be week-long time periods starting from the specified day of the week.

* **Workweek:** No additional options. The subsequent selections will be 5-day time periods spanning Monday to Friday.

* **Weekend:** No additional options. The subsequent selections will be 2-day time periods spanning Saturday to Sunday.

* **Monthly:** Specify all months or specific months of the year. The subsequent selections will be month-long time periods.

* **Quarterly:** Specify all quarters or specific quarters of the year. The subsequent selections will be quarter-long capsules.

* **Yearly:** No additional options. The subsequent selections will be year-long time periods.

**Advanced options:** Provide interface to shift the start of each capsule or select a time zone specific for the date range if different from the worksheet source data.

Click **Execute**

Adjust the**Computed Date Range** until it matches your desired date range by changing two options:

* **Duration**- This is the window of time you are searching (similar to the Display Range in Workbench Analysis). Make sure it is large enough to have the capsule you are interested in within the range.

* **Configure Capsule Selection** - This adjusts which capsule within the specified duration is selected based on its position in the time window.

(Optional) Check the **Auto-update** box if you would like the date range to update automatically. (For example, to always show the previous day midnight to midnight)

Click **Save**after these changes are complete.  

### Condition-Based Range

Condition-based ranges can be very useful in reports and dashboards. A few examples of when to use this range are to show the last startup, compare the last batch to the previous one, or to show the last 3 deviations.

(Optional) Name date range

Click **plus** icon to reveal the Condition drop-down

In the drop-down list, choose **Existing Condition**

Use the search box or the Recently Accessed menu to select the appropriate **condition** . Note that to use a condition to set a date range, the condition must be made public by checking the **Available outside this analysis** box in the Workbench Analysis.

Adjust the**Computed Date Range** until it matches your desired date range by changing two options:

* **Duration**- This is the window of time you are searching (similar to the Display Range in Workbench Analysis). Make sure it is large enough to have the capsule you are interested in within the range.

* **Configure Capsule Selection** - This adjusts which capsule within the specified duration is selected based on its position in the time window.

(Optional) Check the **Auto-update** box if you would like the date range to update automatically. (For example, to always show the last startup.)

Click **Save**after these changes are complete.  
![Condition Based Range.PNG](https://support.seeq.com/__attachments/a_7ead8c0a00f74b013c908d958aa32ec9a081348c162f334f973deb17627c7594/Condition%20Based%20Range.PNG?cb=6693c4275260c0ea89ece9c7217b4ce7)

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Adjusting Signal Lanes, Axes & Formatting

## Single Click Adjustments

The easiest way to make common adjustments to signal trends is through the single-click buttons above the trend. These buttons take action on either the currently selected signals OR if no signals are selected, all signals on the trend. Signals are selected in the Details Pane.

### One Lane

This button condenses the selected signal trends into a single lane. Signals maintain minimum and maximum axis bounds.

#### One Y-Axis

This button scales all axes on selected signal trends such that they share a common minimum and maximum value. This action may be applied to signals that are in the same lane or in separate lanes. For signals in the same lane, this button condenses the multiple axes labels to a single unified axis.

#### Spread

This button resets all selected signals to their own lane with their own auto-scaled Y-axis. This eliminates any manual adjustments which have been made to the Y-axis limits.  
![screenshot-explore.seeq.com-2020.09.16-09_48_58.png](https://support.seeq.com/__attachments/a_3de24d1f55285a91e4e0c49fea69eab50fa248bf6e5be2bada9d9ff052016e82/screenshot-explore.seeq.com-2020.09.16-09_48_58.png?cb=107fd8072c8588e663c2fa81e70ea915)  

#### Labels

The Labels button opens the Labels menu where many aspects of Trend labels can be managed.

Signal labels can appear on the lane or axis and can include the signal name, asset path, and unit of measure. Custom labels are text defined by a user and can also be added to either the lane or axis.

##### Cursors

Cursors are placed on the trend by holding Shift+Left-Click or with a Right-Click.

The text inside the cursor's "flag" can be edited from the Labels menu, as well as the flag's Y-axis position and left/right orientation.

The display of the cursor's value can be turned off by selecting the "Hide" radio button. The text that displays next to the cursor's value can be customized to show one or more of the following **Cursor Label Properties:**Name, Asset, and Description. This can help in distinguishing one cursor from another.

To remove an individual cursor from the trend, click its flag and then click the 'x' that appears next to the flag. A cursor can also be removed by clicking the 'x' next to it in the Cursors section of the Labels menu.

The "Remove all cursors" button will delete all the cursors inside a selected region, or, if there is no selected region, all the cursors on the trend.

Users can add capsule properties to the [Capsules Pane](https://support.seeq.com/latest/cloud/displaying-signal-or-capsule-properties-and-statis.md) to display the property on each capsule.  
![image2020-4-21_11-42-27.png](https://support.seeq.com/__attachments/a_30605d438b7a51c8ce22f53cd619174773fae53135443de08bd8c38080bd315f/image2020-4-21_11-42-27.png?cb=c76c0067ed48e969ef60672c31821783)  
![image-20260114-023430.png](https://support.seeq.com/__attachments/a_e7b3b60cf63c814bc295fdcdd645841222651a264d674e4423fd1cd3127c7a2c/image-20260114-023430.png?cb=f975156be41568934349ff530dd1acb8)
Cursor labels on the Trend and customizing them in the Labels menu  
![single_Cursor_removal.png](https://support.seeq.com/__attachments/a_8fbcda4a76a6dbb66b7e8070b80e2bae63c3149474e022778e5a9f0d1840c314/single_Cursor_removal.png?cb=abc36a4518a209d7e9d4155c815c96c5)
Click the 'x' to remove a cursor from the trend.  

#### Dimming

When this button is pressed, only items selected in the Details Pane will be displayed on the trend. Un-selected items are not trended but remain listed in the Details Pane.

![image-20231013-230039.png](https://support.seeq.com/__attachments/a_0231f3ad31c0c730f9f5ed16c99855a0fa633bb00fba203b9ae5585749a4d9b1/image-20231013-230039.png?cb=72a209a360c10f31787137c939d413be)  
In Capsule View, this button displays two options, show data outside conditions or show only selected items. The first option will show data after each capsule end up to the duration of the longest capsule. The second option is the same as pressing the Dimming button in other views.  
![image-20231013-230644.png](https://support.seeq.com/__attachments/a_0d15f32ee046e5dc7840d393d0533e15ae609e6f5adaffb82f7dc277a4ebbd8b/image-20231013-230644.png?cb=48e7d67dfdf68b320fb9ffc662b55bc0)  

#### Gridlines

The Gridlines button can display gridlines across numeric and string signals. Note that gridlines can't be shown when one lane has multiple y-axes.  
![image-20200916-145547.png](https://support.seeq.com/__attachments/a_abd923d4fe7142744906fc30ebfd5ae25abab9abc5e46296b87d71841ea6b3de/image-20200916-145547.png?cb=8d188a35a7f58c0bf92e0bf0c79e8a5c)  

#### Color

The Color button can be used in Calendar, Chain, Capsule, and Compare Views to change the color of any items on the trend. Clicking on the color sample allows you to select a new color from the Seeq pallet, standard colors, or user defined colors selected using either [Hex Color Codes](http://htmlcolorcodes.com/) or RGB color codes. Item colors can also be changed from the Customize menu.

In Calendar and Chain views you can also color capsules by a Capsule Property rather than by the condition color. This can be useful to visually differentiate important details about certain capsules within a condition such as the the stage a compressor was in when the temperature was high what operation was running at different points in time.  

![Color in Trend View.png](https://support.seeq.com/__attachments/a_1b0b00ecdf96e2f8371420f6271a147ea58d8791ca9ede8171c71fe8e5e1c8ff/Color%20in%20Trend%20View.png?cb=9e956d3eccc86f3ca7280355a41c9bab)

## Advanced Item Formatting

To enter the advanced item formatting mode, click the "Customize" button in the Details Pane header. In this mode, every aspect of a signal's appearance can be adjusted.

When in this mode, several additional buttons (All, Axis, Order, Style) are available next to the Customize button so you can better focus on a subset of the formatting options available.

When Customize is enabled, each lane will have an extra label in gray indicating the lane's number. This is not displayed when Customized is disabled.  
![image-20230915-223921.png](https://support.seeq.com/__attachments/a_f38b9052fc8b0aa9787a2f90c24b209b036cfc484b2e70faa1322ef1a7574f6d/image-20230915-223921.png?cb=b3643324d4ebeedb7e5e9acf761771c9)

### Style

#### Color

Clicking on the color sample allows you to select a new color from the Seeq pallet, standard colors, or user defined colors selected using either [Hex Color Codes](http://htmlcolorcodes.com/) or RGB color codes. Color can also be changed from the Toolbar.

#### Values

When this box is selected, values for each data point will display on the trend, to the best ability based on available room. This is recommended for infrequently sampled data.

#### Samples

This option changes how each individual sample coming from the datasource is plotted.

* **Line only** - No samples are shown (default).

* **Line and points** - A point is shown for each actual sample in your datasource with connected lines. This view is particularly useful for debugging interpolation issues and data cleansing.

* **Points only** - Only sample points from the datasource are shown. There is no visual indication of the interpolation methods between points.

* **Column chart** - A column is drawn for each sample point. This is particularly useful to display aggregated values created using the [Signal from Conditions](https://support.seeq.com/latest/cloud/signal-from-condition.md) tool.

#### Line

This option allows you to select a different line style to help distinguish one signal from another. These options do not represent interpolation method changes.

#### Thickness

This option allows you to adjust the thickness of a signal or condition. This can be used in conjunction with Line and Sample styles.

### Order

#### Lane

This option allows you to specify the lane where each signal will be plotted.  
![reordering-help.gif](https://support.seeq.com/__attachments/a_073ccd1b774b39ea22eb8364587501b0f99e7b6811b8b4772e01b8b997dfc929/reordering-help.gif?cb=938c7c741d2d8fcbffed26772f8a802d)

### Axis

#### Axis

This option allows you to select the axis grouping for each signal. The dropdown menu is a list of letters with one option for each signal currently displayed in the trend. To group signals so that they share the same Y-axis limits, select the same axis letter for each signal.

#### Align

This option allows you to adjust if the axis labels are displayed on the left or right side of the trend.

#### Show

This option allows you to show or hide the Y-axis labels.

#### Auto

This option allows you to auto-scale the trend to the min and max value of that signal over the current time range. These min and max values will change as users change the time range.

#### Axis Min/Max

This option allows you to set a fixed minimum and maximum value for a signal's y-axis. These values remain fixed as users scroll through time.

#### Y-Axis Type

This option allows you to change the y-axis type between a linear and a logarithmic (base 10) scale.

*Note: this will not change your data, it will only change how it is displayed on the trend.*

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Adjusting Time Ranges

When working in trend view, two time ranges are available: the **Display Range** , and the **Investigate Range**. Both can be adjusted using the time range selectors (detailed below) located below the trend display area.  

## Controlling the Display Range

The display range in Seeq Workbench refers to the time over which signals and conditions are trended. It is the top of the two time ranges users can adjust inside Seeq Workbench.

### Pan and Zoom

With your mouse over the time axis labels (**4:00 pm, 6 pm, 8 pm, etc** in the screenshot to the right) your mouse will change to a horizontal double arrow ![horizontal arrow.png](https://support.seeq.com/__attachments/a_93825ea10b0e0975f892a661f4b8ed82893e8e75362c0ff808bafac1957233b7/horizontal%20arrow.png?cb=268046f685e05a0148d774077e253b7a) . When this icon is displayed you can zoom in or out by scrolling your mouse wheel or you can pan the trend by clicking and dragging left or right.

#### Entering Time Values in Fields

The start, end, and duration fields can be edited directly by clicking on the label (**10/22/2018 3:09 PM CDT** / **1 day** / **10/23/2018 3:09 PM CDT** in the screenshot to the right). To change any of these fields just type in a new date and press enter. You can also enter partial dates and times as adjustments. For example, if you want to change the start date from 11/14/2017 10:03am to 9:00 am in the example to the right you only have to type, "9:00am," and press enter and the time selection box will keep the day constant. Similarly, you can type only, "11/15," and it will hold the time constant.

##### Tips and Tricks for Entering Values in Date Fields

| Entry  |                       Result                        |
|--------|-----------------------------------------------------|
| -1d    | Move the start/end date back 1 day                  |
| +1wk   | Move the start/end date forward 1 week              |
| \*     | Move the start/end date to the current time         |
| \*-30d | Sets the range to the last 30 days                  |
| $-12h  | Sets the start date to 12 hours before the end date |

**Display Range**  
![2019-03-14_14-30-52.jpg](https://support.seeq.com/__attachments/a_d3331be797dd93493788f94307bfe0d55f6e5dcf23d01679eb87d3c2d17105a5/2019-03-14_14-30-52.jpg?cb=2740c373951e1e565cd13b5b4a55ac7d)

##### Quick Change Buttons

![image2019-3-14_14-41-2.png](https://support.seeq.com/__attachments/a_317aa4231ec79784de0916f93f6c25d088491616895e2596dd2c09584517ec93/image2019-3-14_14-41-2.png?cb=a65dabfd346171f08d7165c4685670fa)

* ![image2019-3-14_14-41-31.png](https://support.seeq.com/__attachments/a_f283adbe6cbca635683176a7b31ec2e03e59f6bcbea38aa9e6c7bbc61216da47/image2019-3-14_14-41-31.png?cb=de2e11916641d31dbfeed1aace131d3c) **Full step forward/backward** - Clicking the double arrows will page an amount equal to the current duration in either direction. In the example abovev it will move the display range forward/backwards 1.7 days.

* ![image2019-3-14_14-41-57.png](https://support.seeq.com/__attachments/a_38fb2c64de3e705ea0e8f188e0f95216f442338eaa26e6c097665680d2af33b4/image2019-3-14_14-41-57.png?cb=716e4d2c7a9e8e2fa8eb6d2261f7acae) **Half step forward/backwards** - Clicking the single arrow will page the trend half of the current duration in either direction. In the example above, it will move the display range forward/backwards 0.85 days.

* ![image2019-3-14_14-42-20.png](https://support.seeq.com/__attachments/a_5df8b33869a1d31857156c7d1a10bfdef538b1fd0076431970349534c9f37e42/image2019-3-14_14-42-20.png?cb=66a700139f9909807d63dee6f3fb8abe) **Step to current time**- Clicking the right most arrow will step the right side of your trend to the current time while keeping the total duration of your trend constant.

* ![image2019-3-14_14-42-34.png](https://support.seeq.com/__attachments/a_e907baa8e7231a0c1cc0fc2ca923f810064cbfa0d2c5918fa5925404cee48889/image2019-3-14_14-42-34.png?cb=07c460b5707e385774ea7902173dbef4) **Enable auto update mode** - Clicking on the update icon will set the trend into a streaming mode. After clicking you will be able to select how often the trend updates. The duration of your investigation range will remain constant, but trends will stream across the screen from right to left. This mode will also enable live computation of calculated signals and conditions.

## Controlling the Investigation Range

The investigation range in Seeq Workbench refers to the time over which conditions are displayed in the mini-map below the trend. It is the bottom of the two time ranges users can adjust inside Seeq Workbench.

### Controlling the Display Range

The display range is shown inside the the investigation range as a highlighted region. You can adjust the display range by dragging the left or right edges of this highlighted area or by clicking, holding and panning left or right.

#### Viewing Capsules in the Investigation Range

Capsules are shown as colored bars in the investigation range. This allows you to see if there are capsules to the left or right of your current display range and so are not being displayed on the trend.

**Swapping the Investigation and Display Ranges**

Thetwo arrow icons on the left side of the display and investigation ranges will copy the start and end dates from one range to the other. For example, if you would like to trend the entire investigation range you can click on the up arrow and your display range will now match the entire investigation range.

##### Entering Time Values in Fields

Date entry follows the exact same format as date entry in the display range.

**Investigation Range**  
![2019-03-14_14-11-25.jpg](https://support.seeq.com/__attachments/a_c7262bc8b6ab80acd66a573bb16a3a2728ad79177e920548cd230ac11fbfdceb/2019-03-14_14-11-25.jpg?cb=4a2531bc36e889c7829a72a922cb2ed6)

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Administration Capabilities

There are various administration capabilities that can be given to other users without making them a full Seeq Administrator. This allows users to have the capabilities they need without giving them unnecessary capabilities.

The capabilities described below also apply when accessing Seeq via the SDK or API, whether through SPy or an external script or application. Users only have the ability to access and make changes as permitted by the capabilities they have been granted.

## User Administrator

User Administrator can access Users, Groups, Access Keys, Applications, and Capabilities in the Administration panel. Users with this capability will be able to create, edit, disable and remove users, see who is logged in, reset passwords for users in the Seeq directory, create and edit groups, create applications for integrations, and grant/revoke any capabilities. See more details on [Managing Users and Groups](https://support.seeq.com/latest/cloud/users-and-groups.md).

### Datasource Administrator

The Datasource Administrator can access only Datasources and Agents in the Administration panel. Users with this capability will be able to add, update, manage access to, and re-index datasources, as well as add and update remote agents. See more details on [Managing Datasources](https://support.seeq.com/latest/cloud/managing-datasources.md).

### Analytics Administrator

The Analytics Administrator can access Schedules, Usage, Requests, Subscriptions, Jobs, Exports, and Plugins. Users with this capability can monitor Seeq usage, adjust scheduled reports, manage notifications, troubleshoot performance, and access all Seeq content. For more information see the following pages: [Troubleshooting Performance](https://support.seeq.com/latest/cloud/troubleshooting-performance.md), [Managing Notifications](https://support.seeq.com/latest/cloud/notification-administrator-controls.md), [Exploring Usage Data](https://support.seeq.com/latest/cloud/insight-on-seeq-usage.md).

There are additional Capabilities for accessing the Seeq Logs and [Audit Trail](https://support.seeq.com/latest/cloud/seeq-audit-trail.md).

## Granting Capabilities

Administration Capabilities may be granted from either the Groups or Capabilities tabs in the Administration UI.

### Grant (one or more) capabilities to a single user group

Create or edit a user group, then select/unselect the capabilities from to the Capabilities tab.  
![Group Capabilities.png](https://support.seeq.com/__attachments/a_fac31a877296c6bf18ce9f7b792110ddc4e5d5e686d31cd0946a0d83366c20ff/Group%20Capabilities.png?cb=3d2c47bc0a9e9564ea7bc9d04ebd1fe5)

### Grant Capability to multiple users/groups

To grant a specific capability to one or more users or groups, find the specific capability from Capabilities, then click edit. Add (or remove) users or groups from this capability.  
![image-20250218-172328.png](https://support.seeq.com/__attachments/a_29c5bb66ced8a02a2df7e0361c9aceef37f6b3226d3f5f7e5a98c01bd9bd8cdc/image-20250218-172328.png?cb=e86cf4b050d92b46c1125ee3d34f1e90)

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Administrator

As an admin, you will have access to several features and functionalities to manage Add-ons. Admins will be able to Install, Uninstall, Update and Configure Add-ons. Access control for Add-ons will also be managed through the Add-on Manager interface.

## Add-on Manager Operations

### Give Users Access To Add-on Manager

The Add-on Manager is initially visible only to Admins, non-admin users can access it after granted permission through the Add-on Manager configuration.

To give users access to the Add-on Manager:

1. Open the Add-on Manager

2. Navigate the to the Add-on Manager configuration panel

3. Allow Access to Group(s) or individuals

4. Click "Save"

![Recording 2023-11-29 at 15.34.37.gif](https://support.seeq.com/__attachments/a_a0a4e2b7969907105a24f82d766ae399ab80721f67a59a238aa9c214aab837cc/Recording%202023-11-29%20at%2015.34.37.gif)  

### Install

To install a new Add-on:

1. Open the Add-on Manager

2. Click the "Install" button

3. If the Add-on requires configuration such as database access other configuration parameter this is where those changes will need to be updated.

4. Allow access to Groups or Individuals

5. Click "Install"

   1. While installing, the state of the Add-on will change to "Installing..." All other admins will see this state.

6. When the installation is complete the Add-on will show as "Installed" and the Configuration option will be available.

[AoM_AddOnInstall.mp4](https://support.seeq.com/__attachments/a_080be5a04da5c093510b85d4593b2519d6f5f55fe3e27c85ceca8184d151ab8b/AoM_AddOnInstall.mp4.md?cb=c4ff185584794c238adcac9bca4814e4)  

### Configuration

While not all Add-ons require configuration, some may require certain parameters to be set for proper functionality. These configuration parameters, if required, will be displayed as JSON in the Configuration section. During the initial installation process, the Configuration section will be displayed if necessary. However, it can also be accessed and modified at any time by clicking the Configuration (gears) icon after installation.  
[AoM_AddOnConfigure.mp4](https://support.seeq.com/__attachments/a_ea87ecac08c6c3111ed46dc23f31b7bf8cc61dc004cd3efd3e52123d2422333d/AoM_AddOnConfigure.mp4.md?cb=05a70fbb487e5ca0673d20f112bc2e61)

### Uninstall

To uninstall an Add-on:

1. Open the Add-on Manager

2. Navigate to or Search for the Add-on to be updated

3. Click the Configuration button

   ![image-20230306-223120.png](https://support.seeq.com/__attachments/a_1ab69cbcb66620ede93e2f15a35a33149d04677483dbc2783e81e9f4a35b9e2a/image-20230306-223120.png?cb=af3f25e61cdb6be6f77660cc733c4121)
4. Click "Uninstall"

[AoM_AddOnUninstall.mp4](https://support.seeq.com/__attachments/a_737686b37ab934e3a1355f84d49fffa5049a6ec3fc457de96cc6ab80abee1726/AoM_AddOnUninstall.mp4.md?cb=b40c7ac5861ae4e4f8590f317a1f06a0)

### Updating

To Update an Add-on:

1. Open the Add-on Manager interface from your software or application.

2. Navigate to or search for the Add-on that you want to update. Add-ons that can be updated will have an "Update" button next to them.

3. Sometimes, an updated Add-on can have different or new configuration options. If there is a configuration, you will be prompted to choose from the following options:

   1. Installed Settings: This option will use your current configuration settings.

   2. Merged Settings: This option will merge your current configuration settings with the update settings. This is the default selection and it's usually the best choice, unless you have a specific reason to choose otherwise.

   3. Default Update Settings: This option will use all the default update settings, replacing any configuration options that you may have previously set.

By following these simple steps, you can easily update your Add-ons with just a few clicks, without worrying about any loss of data or configurations.

### Updating the Add-on Manager

See the following article for graphical step-by-step instructions on updating the Add-on Manager.

[Updating the Add-on Manager](https://support.seeq.com/latest/cloud/updating-the-add-on-manager.md)  
Add-on Manager version `1.8.1` and later have an option to "Enable Add On Manager Auto Update". If this option is checked, then the Add-on Manager will keep itself up to date as new versions are released. Seeq recommends enabling this option.  
![image-20250423-222414.png](https://support.seeq.com/__attachments/a_b603356db678a6c23e1eb09228694623b8f12df5ff77b0699ec91a085a50630c/image-20250423-222414.png?cb=fdf79820a8a3e485d78c94d8e4839b11)
Configuring the Add-on Manager

### Manual Installation and Updating

#### How to manually install an Add-on:

1. Obtain the Add-on file

: The Add-on must have a `.addon` extension and be properly formatted for the Add-on manager. Please see [Add-on Package](https://support.seeq.com/latest/cloud/add-on-packaging.md) for additional information on how to package the Add-on.  
1. Upload the Add-on

: Log in to the Add-on Manager as an administrator, and click on the "Upload" area. Alternatively, you can drag and drop the Add-on file into the upload area.  

![image-20230323-192144.png](https://support.seeq.com/__attachments/a_051b493ad4ca9c16466a314cc4b1df2ca314eed2aceed5ee9fb746d24f45917e/image-20230323-192144.png?cb=c62a4c298e9c562a841054f3d1a27e3d)

1. Configure and install the Add-on:

Once the Add-on is uploaded, you'll be prompted to configure and install it. Follow the on-screen prompts to complete the installation.

2. Manage the Add-on:

Once the Add-on is installed, you can manage it from the Add-on Manager.

#### How to Manually Update an Add-on

To manually update an Add-on, follow the same steps to manually install the Add-on but with the updated `.addon` package

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Administration

This section contains information on various Admin tasks \& abilities.

* [Managing Users and Groups](https://support.seeq.com/latest/cloud/users-and-groups.md)
* [Customizing Seeq and Communicating with Users](https://support.seeq.com/latest/cloud/customizing-seeq-and-communicating-with-users.md)
* [Seeq Audit Trail](https://support.seeq.com/latest/cloud/seeq-audit-trail.md)
* [Configuring Seeq](https://support.seeq.com/latest/cloud/configuring-seeq.md)
* [Exploring Usage Data as Administrators](https://support.seeq.com/latest/cloud/insight-on-seeq-usage.md)
* [Getting Support](https://support.seeq.com/latest/cloud/getting-support.md)
* [Managing Notifications](https://support.seeq.com/latest/cloud/notification-administrator-controls.md)
* [Allowing Seeq to be Embedded in Frames](https://support.seeq.com/latest/cloud/allowing-seeq-to-be-embedded-in-frames.md)
* [Sensitivity Label](https://support.seeq.com/latest/cloud/sensitivity-label.md)
* [Administration Capabilities](https://support.seeq.com/latest/cloud/administration-capabilities.md)
* [Champion Dashboard Add-On -- Quick Reference](https://support.seeq.com/latest/cloud/champion-dashboard-add-on-quick-reference.md)

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Advanced Agent Configuration

This section covers advanced agent configuration options.

## Configuration

This is an example configuration that is displayed in the *Configure Agent* box that appears when you click *Configure* for an existing agent on the Agents administration page. These are advanced configuration options that should generally not be changed without help from Seeq support. Most options have `null` default values, meaning the actual values used should be determined automatically by the agents.
JSON

    {
      "WatchdogOverride": {
        "WatchdogEnabled": null,
        "SeeqServerHttpConnection": null,
        "SeeqServerWebSocketConnection": null,
        "SeeqServerResponse": null,
        "AgentHeartbeat": null,
        "HighMemoryUse": null,
        "ConnectorConfigChange": null
      },
      "Connectors": [
        {
          "Name": "OSIsoft AF Connector",
          "Enabled": true
        }
      ],
      "ConcurrentMetadataSync": true,
      "RemoteLogStreaming": true,
      "SeeqServerApiProviderConnectTimeout" : null,
      "SeeqServerApiProviderReadTimeout" : null,
      "SeeqServerApiProviderNetworkTimeout" : null,
      "SeeqServerReadTimeoutForIndexing": null,
      "SeeqServerNetworkTimeoutForIndexing": null,
      "SeeqServerReadTimeoutForLiveliness": null,
      "SeeqServerNetworkTimeoutForLiveliness": null,
      "ExportMaxConcurrencyLevel": null,
      "HighMemoryUseThresholdGB": null,
      "MinConnectorReinitializationDelay": "5s",
      "MaxConnectorReinitializationDelay": "10 min",
      "WebSocketKeepAliveInterval": null,
      "WebSocketKeepAliveTimeout": null,
      "DefaultInitialSizeForBatchOperations" : null,
      "DefaultMaximumDurationForBatchOperations" : null,
      "AgentKeyRotationDays": null,
      "ApiRequestErrorsRequiringRetryOverride": null
    }

### Configuration Options

|                    **Property Name**                     |                                                                          **Built-in Value (when** `null`)                                                                          |                                                                                                   **Data Type**                                                                                                   |                                                                                                                                                                  **Description**                                                                                                                                                                   |
|----------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `Connectors`                                             | The list of connectors found by the agent, all enabled                                                                                                                             | List of connectors                                                                                                                                                                                                | A list of connectors found by the agent and whether they should be loaded.                                                                                                                                                                                                                                                                         |
| `SeeqServerApiProviderConnectTimeout` (JVM Agent only)   | `"30 min"`                                                                                                                                                                         | String                                                                                                                                                                                                            | The connect timeout for the HTTP client used during general Seeq API calls.                                                                                                                                                                                                                                                                        |
| `SeeqServerApiProviderReadTimeout`                       | `"30 min"`                                                                                                                                                                         | String                                                                                                                                                                                                            | The read timeout for the HTTP client used during general Seeq API calls.                                                                                                                                                                                                                                                                           |
| `SeeqServerApiProviderNetworkTimeout`                    | `"30 min"`                                                                                                                                                                         | String                                                                                                                                                                                                            | For how long failed Seeq API requests made during general Seeq API calls should be retried.                                                                                                                                                                                                                                                        |
| `SeeqServerConnectTimeoutForIndexing` (JVM Agent only)   | `"30 min"`                                                                                                                                                                         | String                                                                                                                                                                                                            | The connect timeout for the HTTP client used during connection indexing.                                                                                                                                                                                                                                                                           |
| `SeeqServerReadTimeoutForIndexing`                       | `"30 min"`                                                                                                                                                                         | String                                                                                                                                                                                                            | The read timeout for the HTTP client used during connection indexing.                                                                                                                                                                                                                                                                              |
| `SeeqServerNetworkTimeoutForIndexing`                    | `"30 min"`                                                                                                                                                                         | String                                                                                                                                                                                                            | For how long failed Seeq API requests made during connection indexing should be retried.                                                                                                                                                                                                                                                           |
| `SeeqServerConnectTimeoutForLiveliness` (JVM Agent only) | `"5 s"`                                                                                                                                                                            | String                                                                                                                                                                                                            | The connect timeout for the HTTP client used during connection heartbeats and pings.                                                                                                                                                                                                                                                               |
| `SeeqServerReadTimeoutForLiveliness`                     | `"5 s"`                                                                                                                                                                            | String                                                                                                                                                                                                            | The read timeout for the HTTP client used during connection heartbeats and pings.                                                                                                                                                                                                                                                                  |
| `SeeqServerNetworkTimeoutForLiveliness`                  | `"20 s"`                                                                                                                                                                           | String                                                                                                                                                                                                            | For how long failed Seeq API requests made during connection heartbeats and pings should be retried.                                                                                                                                                                                                                                               |
| `MinConnectorReinitializationDelay`                      | `"5s"`                                                                                                                                                                             | String                                                                                                                                                                                                            | The initial delay when reinitializing a connector that failed to initialize.                                                                                                                                                                                                                                                                       |
| `MaxConnectorReinitializationDelay`                      | `"10 min"`                                                                                                                                                                         | String                                                                                                                                                                                                            | The maximum delay when reinitializing a connector that failed to initialize multiple times, with each attempt having an exponentially longer delay.                                                                                                                                                                                                |
| `WebSocketKeepAliveInterval`                             | `"5 s"`                                                                                                                                                                            | String                                                                                                                                                                                                            | The interval between pings sent to the Seeq server to maintain the websocket connection alive.                                                                                                                                                                                                                                                     |
| `WebSocketKeepAliveTimeout`                              | `"5 s"`                                                                                                                                                                            | String                                                                                                                                                                                                            | The accepted delay between sending a ping to the Seeq server and receiving a pong in response.                                                                                                                                                                                                                                                     |
| `DefaultInitialSizeForBatchOperations`                   | `100`                                                                                                                                                                              | Integer                                                                                                                                                                                                           | A number greater than 0 defining the initial size for batch operations (for example, sending items during connection indexing). This size will be adjusted dynamically to attempt to achieve `DefaultMaximumDurationForBatchOperations`.                                                                                                           |
| `DefaultMaximumSizeForBatchOperations`                   | Unlimited                                                                                                                                                                          | Integer                                                                                                                                                                                                           | A number equal to or greater than `DefaultInitialSizeForBatchOperations`, defining the maximum size for batch operations. A value of `null` means unlimited size.                                                                                                                                                                                  |
| `DefaultMaximumDurationForBatchOperations`               | `"10 s"`                                                                                                                                                                           | String                                                                                                                                                                                                            | The target maximum time spent on each batch operation. The batch size will be adjusted dynamically to attempt to achieve this duration.                                                                                                                                                                                                            |
| `AgentKeyRotationDays`                                   | disabled                                                                                                                                                                           | Positive Integer                                                                                                                                                                                                  | Specifies the number of days after which the provisioned agent user's key will be rotated. This parameter is generally not recommended and should be left null in most deployments to disable key rotation. If the parameter is set, the indexing operation may be disrupted during key rotation and data requests may fail.                       |
| `ApiRequestErrorsRequiringRetryOverride`                 | [See below](https://support.seeq.com/kb/latest/cloud/advanced-agent-configuration#AdvancedAgentConfiguration-OverridingautomaticretrieswithApiRequestErrorsRequiringRetryOverride) | A list of API error matchers ([see below](https://support.seeq.com/kb/latest/cloud/advanced-agent-configuration#AdvancedAgentConfiguration-OverridingautomaticretrieswithApiRequestErrorsRequiringRetryOverride)) | What Seeq API errors should cause requests to be retried. Setting this option completely overrides the built-in list of errors the would normally be retried ([see below](https://support.seeq.com/kb/latest/cloud/advanced-agent-configuration#AdvancedAgentConfiguration-OverridingautomaticretrieswithApiRequestErrorsRequiringRetryOverride)). |

#### Overriding automatic retries with `ApiRequestErrorsRequiringRetryOverride`

This configuration options takes a list of error matchers, like the following:
JSON

    "ApiRequestErrorsRequiringRetryOverride": [
        { "Code": 500, "MessageFilterRegex": "^Temporarily unavailable$" },
        { "Code": 520, "MessageFilterRegex": "timeout" },
        { "Code": 522, "MessageFilterRegex": null },
      ]

In this example, if an agent makes a request to the Seeq API and encounters an error, the request should be retried under the following conditions:

* Has HTTP status code `500` and the error message that is exactly `Temporarily unavailable` OR

* Has HTTP status code `520` and error message containing the word `timeout` OR

* Has HTTP status code `522` and any error message

Setting this option to a value different than `null` or `[]` will completely override the built-in list of errors automatically retried by the agent, which is equivalent to the following:
JSON

    "ApiRequestErrorsRequiringRetryOverride": [
        { "Code": 0, "MessageFilterRegex": null },
        { "Code": 500, "MessageFilterRegex": null },
        { "Code": 502, "MessageFilterRegex": null },
        { "Code": 503, "MessageFilterRegex": "^((?!canceled).)*$" },
        { "Code": 504, "MessageFilterRegex": null },
        { "Code": 520, "MessageFilterRegex": null },
        { "Code": 522, "MessageFilterRegex": null },
    ]

Note:

* The entry with Code `0` is only actually used in the .NET agent, to handle connection failure errors from its REST library

* The MessageFilterRegex used with Code `503` is meant to exclude canceled requests from being retried

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Advanced Configuration

Data Lab Functions has various kernel and log configuration properties that can be set per `DataLabFunctions` element as configured in the `addon.json` for the Add-on.

## Configuration Properties

### kernel_name

Unlike a typical Jupyter notebook where the notebook kernel is determined from the kernel name stored in the notebook metadata, Data Lab Functions uses the `kernel_name` configuration property in determining the actual kernel language and version to launch when the Data Lab Functions project starts. Valid values are `python38` for Python 3.8 kernel and `python311` for Python 3.11. If unspecified the default kernel is the oldest Python version currently installed in Data Lab. See [Python Versions and Packages](https://support.seeq.com/latest/cloud/data-lab-python-versions.md) for currently supported Python versions.

#### kernel_global_pool_min

When a Data Lab Functions project starts, kernels are immediately launched and bootstrapped with Data Lab Functions initialization code (various Python package imports) so that these kernels can be "warmed" in anticipation of actual Data Lab Functions requests. Once a request is received, a kernel from this "global kernel pool" will be assigned to the Seeq user making the request. A new kernel will be started and added to the global poll in its place. The `kernel_global_pool_min` property determines the number of kernels to maintain in the global kernel pool through the life of the Data Lab Functions project instance. If unspecified, the default minimum number of global kernels is 5.

#### kernel_user_pool_max

Data Lab Functions recycles kernels from previous requests by assigning the kernel to a user-specific kernel pool. When a new request is received, a kernel from this user will pool will be used to service the request. If none exist or are busy servicing other requests, a kernel will be adopted from the global kernel pool and assigned to the current user. The `kernel_user_pool_max` property is the maximum number of simultaneously executing kernels for a given user. If unspecified, the default maximum number of user kernels is 10.

#### kernel_cull_interval

When there is inactivity for requests to Data Lab Functions, kernels are culled to reduce overhead and resources. The `kernel_cull_interval` property is the frequency in seconds to run the process to check for inactive kernels to destroy. If unspecified, the default frequency to check for inactive kernels is 60 seconds.

#### kernel_cull_idle_timeout

When there is inactivity for requests to Data Lab Functions, kernels are culled to reduce overhead and resources. The `kernel_cull_idle_timeout` property is the number of seconds a kernel must be inactive to be a candidate for culling. If unspecified, the default frequency to check for inactive kernels is 120 seconds.

#### log_level

The log level to display Data Lab Functions Add-on log messages. Accepted values are `TRACE, DEBUG, INFO (default), WARNING, ERROR.` The default `log_level` value is `INFO`.

#### log_format

The formatter for the Data Lab Functions Add-on log messages. The default `log_format` is `%(levelname)-7s %(asctime)s.%(msecs)03dZ %(name)s - User: %(user_id)s %(notebook)s %(method)s %(endpoint)s - Request: %(request_id)s :: %(message)s`.

#### log_file_max_bytes

The integer maximum size of the log file in bytes before it rotates to the next file. The default `log_file_max_bytes` value is 5242880 (5MB).

#### log_backup_count

The number of Data Lab Functions Add-on log backup files to keep before rotating the log file. The default `log_backup_count` value is 10.

### Modifying Configuration Properties at Runtime

Data Lab Function configuration properties can be retrieved or set at runtime through their built-in REST endpoints. Manage permission is required to [invoke the endpoints](https://support.seeq.com/latest/cloud/invoking-a-data-lab-functions-rest-api-endpoint.md).

#### GET functions/config

The GET endpoint retrieves all configuration properties for the current instance of the Data Lab Functions Add-on project.

#### POST functions/config

The POST endpoint updates the configuration of the current instance of the Data Lab Functions Add-on project. Restarting the project will revert the configuration settings to the values applied to the Add-on project as set in Add-on Manager. With the exception of `inactivity_timeout` and `kernel_name`, all configuration settings can be updated for a running instance:

An example of the body schema for the POST endpoint:

    {
      "configuration": [
        {
          "name": "kernel_cull_interval",
          "value": 60
        },
        {
          "name": "kernel_cull_idle_timeout",
          "value": 120
        },
        {
          "name": "kernel_global_pool_min",
          "value": 5
        },
        {
          "name": "kernel_name",
          "value": "python311"
        },
        {
          "name": "kernel_user_pool_max",
          "value": 10
        },
    	{
          "name": "log_level",
          "value": "INFO"
        },
    	{
          "name": "log_format",
          "value": "%(levelname)-7s %(asctime)s.%(msecs)03dZ %(name)s - User: %(user_id)s %(notebook)s %(method)s %(endpoint)s - Request: %(request_id)s :: %(message)s"
        },
    	{
          "name": "log_backup_count",
          "value": 5
        },
    	{
          "name": "log_file_max_bytes",
          "value": 1048576
        }
      ]
    }

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Advanced Integrations

This section covers advanced topics including accessing Seeq's REST API, SDKs and integrating with third-party applications.

* [IOTA Software - Seeq Integration](https://support.seeq.com/latest/cloud/iota-software-seeq-integration.md)
* [Building a Worksheet from URL Query Parameters](https://support.seeq.com/latest/cloud/building-a-worksheet-from-url-query-parameters.md)

  You can create an entire Seeq worksheet by passing query parameters to a special URL endpoint in Seeq Workbench.
* [Configuring an Organizer Topic with URL parameters](https://support.seeq.com/latest/cloud/configuring-an-organizer-topic-with-url-parameters.md)
* [Seeq Scripting in Ignition](https://support.seeq.com/latest/cloud/seeq-scripting-in-ignition.md)

  It is possible to interact with Seeq's API via Python scripts in Ignition.
* [Condition Monitor Webhooks](https://support.seeq.com/latest/cloud/condition-monitor-webhooks.md)

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Navigating Data Lab

## Overview

The Data Lab interface has a header designed to give you the same look and feel as Workbench and Organizer. It has home navigation, Project path, editable Name, and the hamburger menu. The header also has a Notebook Mode toggle button. While the default view for a project is Advanced Mode which is the JupyterLab interface, switching to Notebook Mode will bring you into the classic Jupyter Notebook environment with some custom Seeq additions.
> JupyterLab is the latest web-based interactive development environment for notebooks, code, and data. Its flexible interface allows users to configure and arrange workflows in data science, scientific computing, computational journalism, and machine learning. A modular design invites extensions to expand and enrich functionality.
>
>
> Reference: <https://jupyter.org/>

## Advanced Mode Navigation

The Advanced Mode looks a bit different from the classic Notebook view. Here is a brief description of what some things are and what they do. More information about the JupyterLab Interface can be found on their site --- [The JupyterLab Interface](https://jupyterlab.readthedocs.io/en/stable/user/interface.html#).  
![Seeq Advanced Mode.PNG](https://support.seeq.com/__attachments/a_f67d0d1034768f3084af5b84cb6f87657a0039eb34e46174704f45f8ab8a4dc1/Seeq%20Advanced%20Mode.PNG?cb=f6fbfa5999de03cb763af5bfd61926e9)
Seeq Data Lab Advanced Mode

1. **Home Page Navigation Button**: Navigate back to the Seeq Homepage

2. **Project Information**: Change the Project Name from the Header.

3. **Advanced Mode**: Toggle between Classic Notebook and Advanced Mode.

4. **Quit:** The most efficient way to exit a project. This will shutdown the project, free up the resources it's using, and exit the tab.

5. **Quick Launchers:** Launch a new Notebook or Terminal

6. **Tabs**: New Notebooks, Files and Terminals will launch as new tabs within Jupyter Lab --- no need to have multiple browser tabs open

7. **File Browser**: This is where all your files will be accessible

8. **Seeq Reference**: Quick links to some Seeq Specific Resources --- Also located in the menu

9. **Sidebar** : Switch between File Browser, Running Terminals and Kernels, Git Integration, Commands List, Table of Contents, Property Inspector, and [Debugger](https://support.seeq.com/latest/cloud/advanced-mode-for-data-lab.md#Debugger%255BinlineExtension%255D). Items in the sidebar can be dragged between the left and right side of the screen.

10. **AI Assistant** : Use Seeq's AI Assistant such as the [Data Lab Agent](https://support.seeq.com/latest/cloud/ai-assistant-in-seeq-data-lab.md) to leverage LLMs to perform tasks such as generate code, help debug, review and assist with your Python code directly in the cells of your notebook.

11. **Disk Usage and Memory Statistics**: Displays the current and peak memory used during this project instance as well as this project's and total Data Lab's disk usage.

### Seeq Data Lab Information

When in Advanced Mode the Seeq Data Lab version information is no longer located in the footer. It is now located in the Help \>\> About Seeq Data Lab.  
![chrome_9LuwdyHjEb.gif](https://support.seeq.com/__attachments/a_1b1347d2acb77e71bfe5a00eb6dd0ad9ec1b89eb2e80a8c7aaa1f6cf8a7cf2ca/chrome_9LuwdyHjEb.gif?cb=f4896ac6f1c45d0dd06f6c7ad18d4409)
Show Seeq Data Lab information

## Persisting Settings

All settings and configurations --- such as Dark mode or font sizes --- are set for each user and applies to all of the User's projects. This means that your Project settings will only be used for you and will not change anyone else's settings. The settings are located in the Menu bar.  

![image-20220812-212656.png](https://support.seeq.com/__attachments/a_84fa5b46e884a5949e6e69e93085040ae80f20f0e2a4e39fff2788e95c7e7321/image-20220812-212656.png?cb=091c9bdf2711fcc5775c139ce28e6e63)

## Features:

### AI Assistant

Seeq's AI Assistant is incorporated into Data Lab as well! Click the sparkle icon in the header to open the assistant. Choose the Data Lab Agent to answer questions specific to Data Lab such as tips and troubleshooting, the Seeq SPy and SDK modules or general Python questions.  
![image-20250228-161934.png](https://support.seeq.com/__attachments/a_03903dada9ea0969f1615e3bf37b0386c6cfe48ebf6237d2988fc3e0807b3805/image-20250228-161934.png?cb=4b1f24a6aa7e3ba28c9c83c3153f00ef)  

#### Notebook Mode as Default

If you prefer the classic Notebook Mode as the default view, you can make it your default by navigating to Settings \>\> Notebook Mode as default.  
![image-20250228-160958.png](https://support.seeq.com/__attachments/a_2b4f8ed882a2809a9daeb4c9e7a06c266faace65bdc9b3ea70198d915baddff5/image-20250228-160958.png?cb=59a9478c459bffff5eff461f119fc18b)  

#### Debugger

JupyterLab offers you the capability to debug your code right from a Data Lab project. To activate Debugging Mode click the "bug" icon in the top right corner of the notebook. You will then be able to add breakpoints to the notebook by clicking on the line number. The debug information will be located in the sidebar.  
![image-20220812-212835.png](https://support.seeq.com/__attachments/a_15a49e179cd0de02333bd86faff3eebd09784e30ac09b8c63b49d97b3fd5e168/image-20220812-212835.png?cb=67b948c09668d081a32e638c2f3ba73b)  
![JupyterLab_Debug.gif](https://support.seeq.com/__attachments/a_0022f1885f0151c0c2ad8afacb5f74d4b930df74bdf3611d4b4cc0e08c91155c/JupyterLab_Debug.gif)  

#### Git Integration and Version Control

Many users want to use Git and version control their work. JupyterLab offers a built in Git Integration. To start, press the Git Integration button on the sidebar. From here you can choose to `Initialize a Repository` or `Clone a Repository`. See [Integrating Git](https://support.seeq.com/latest/cloud/git-integration-with-seeq-data-lab.md) for instructions on creating and working with a remote Git repository.  
![image-20250228-162311.png](https://support.seeq.com/__attachments/a_2c04922faac4a05d854c64159d969a0c0ae00c6d2412e9a2a79150e87ae8ed31/image-20250228-162311.png?cb=2d48d02ed0d7dea148e5f11fb889ad5a)

## Video Overview

[JupyterLab.mp4](https://support.seeq.com/__attachments/a_8d20f7868a53f150a9a7caa4befbf5e747e26f4307a91432855435e763cdc721/JupyterLab.mp4.md)

## Known Issues

See [Seeq Data Lab - Tips and Tricks](https://support.seeq.com/latest/cloud/seeq-data-lab-tips-and-tricks-r58-edition.md)

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Agent Q

Agent Q is enabled with a license for Seeq Intelligence. Contact your account team for more information.

Agent Q is an agentic AI Analyst that can reason, analyze data and initiate investigations in Seeq. After performing an analysis, it summarizes results with rich visuals and can generate reports detailing operations or deviations. It leverages relationships and information created by subject matter experts through their routine use of Seeq, improving efficiency for teams monitoring industrial operations.

## Working with Agent Q in Vantage

In Seeq Vantage, users interact with Agent Q in the AI Assistant chat, asking questions about recent trends in anomalies or looking across a fleet to summarize events. Vantage is often used for monitoring at large scale, and Agent Q can help quickly make sense of recent activity and identify where you want to focus your attention.

You can specify visualizations you'd like to see when working with Agent Q. It can summarize data with a variety of charts.  
Example beginner prompts might include:

*What happened this weekend?*

*What 3 sites have the most anomalies this month?*

*How do events this quarter compare with events last quarter? Show me differences between quarters in a column chart.*

*When did this happen last and what is different this time?*  
![24c937c3-c992-474e-83d0-a90c2cfa8560.png](https://support.seeq.com/__attachments/a_2b63b45301bd8e84e5ee221623fef2efa9fab0d4559f829a26226b4514496a18/24c937c3-c992-474e-83d0-a90c2cfa8560.png?cb=ffc164afce49b850f7137bf1a693df29)

When Agent Q responds, it provides snippets of code that it writes to perform its analysis and the results. You can access these by clicking on the blue icons throughout the chat. This is a good place to start to better understand the approach taken and validate results.

### Enriching Agent Q with relevant information

When you engage with Agent Q from a Vantage Room, it has access to all the events, labels, comments, context, and information in that Room.

There is a Journal that can be used to better explain what the Room is used for and any important aspects that could help Agent Q perform analytics consistently. This is used as additional information for each interaction with Agent Q in this Room and can simplify each prompt.

There is a button in the Journal toolbar to insert a template to get you started.  
![image-20251022-233001.png](https://support.seeq.com/__attachments/a_29836c0f6de821f638d68dfcc49ea491dbbcce7d9dd5684edea9791f14cde00a/image-20251022-233001.png?cb=69c2ed26948d6397976e582fa15d5066)

Think of this space as a place for you to provide low-barrier prompt engineering to Agent Q when engaging with this Vantage Room. Use headers and bullets to organize the information in the Journal for efficient use. If users will often ask a particular type of question, you can have a section that clarifies how to handle those types of questions. If company acronyms are your thing, define them in the Journal so that Agent Q can make sense of them when provided in questions.

#### Examples

If you want to routinely compare anomalies across shifts, you can define what those shifts are in the journal with more information as per below.
> The "Downtime" condition represents outages in each processing line. There is a day shift from 6 AM EST to 6 PM EST and a night shift from 6 PM EST to 6 AM EST. When counting downtimes related to shifts, always uses these shift definitions and report events that start within a shift, not events that end in shifts.

Some use cases require a combination of context from various columns in Vantage if some properties are set through Seeq Formula and others added with Labels or Reason Codes.
> For any questions about different types of events, ALWAYS combine both reason and Labels columns into a single column and use this for subsequent filtering. Automation populates the reason column while individual people populate the Labels column. Both are needed to fully summarize events.

#### Global Context

An administrator can provide Global Context for Agent Q by adding relevant markdown through the `Features/GenAI/GlobalContext` [configuration setting](https://support.seeq.com/latest/cloud/configuring-seeq.md). This can be helpful to provide context for internal terms, jargon, or acronyms that may be used across your organization. This could include mapping site references to datasources if that is not obviously apparent through names of datasources or hierarchies.

### Understanding Analysis Approach and Results

Whenever Agent Q is used, there is a button at the end of the latest response to **View all files in this task**.  
![image-20260128-181738.png](https://support.seeq.com/__attachments/a_8eb415ca28f6f23a50c6f7dfec3d2cf931a58242d34d99c1fc35dc2504512c95/image-20260128-181738.png?cb=b3f8a87e85557885dd4a30ce30450793)

This opens the Chat Results pop up that will show any code Agent Q wrote, intermediate tables of data it organized, and visualizations or reports it writes. Click on each row to see the details, or filter by a type of chat result at the top of the pop up. This can be helpful to ensure the data used matches your expectations and to understand how Agent Q produced its results.  
![image-20260128-181759.png](https://support.seeq.com/__attachments/a_a8134cc5278972c98f732decc0af5e5ebaa317ea55e05f0cd7b01399a08e9311/image-20260128-181759.png?cb=dc79e41ad37408717ec99360745b7312)

Individual parts of the chat results are also accessible if you expand the planning and executing steps at the top of each chat with Agent Q. These become available as soon as Agent Q creates them in case you want to understand the direction before the final result is available.  
![image-20260128-182047.png](https://support.seeq.com/__attachments/a_dc51cdd6b82141b177e1d7e970b4415a186bb35766a847005ca60ba991ddabc5/image-20260128-182047.png?cb=4058c39cc677f8e9648f53874e004ad6)

### Routine or prescribed instructions for Agent Q

Agent Q can reason on its own when given a set of data, but many Seeq users are subject matter experts and may want to provide their own guidance on how an analysis should be performed. If there is a particular way you would like Agent Q to routinely analyze data and report findings, utilize [Agent Builder](https://support.seeq.com/latest/cloud/seeq-agent-builder.md) to create Custom Agents that will follow a specific pre-defined workflow for consistency.

If there is information that you'd like to ensure Agent Q always gets exposed to regardless or user location, administrators can customize the `Features/GenAI/GlobalContext` configuration option to provide additional context in the form of Markdown text.

### Working with Agent Q in Workbench

If you have access to Agent Q, it can also reason and analyze data in Seeq Workbench. Agent Q is utilizing the SPy library and will write and execute Python code to perform its analysis. It will query the data directly and use the tools it has available to do analysis per your instruction. You can ask it about correlation or to create some other visualizations that are not currently available in Workbench, but it does not yet work with Workbench Tools or Formula. Continue to use the Actions Agent to create items in Workbench.

### System Awareness and Understanding

#### Impact Reports

Agent Q is aware of [Impact Reports](https://support.seeq.com/latest/cloud/impact-reports.md) that have been documented within a single Seeq instance. If your organization is using Impact Reports to track the value users are driving through their analytics and monitoring efforts, all users can benefit from this information.

Agent Q can answer the following types of questions:

*Who has filed impact reports this month?*

*How many impact reports are there about reduced energy consumption?*  
![image-20260206-202416.png](https://support.seeq.com/__attachments/a_27541a69c4b0e01774bf793514621e2207e9356f49339bf265005bae4d9a8cdc/image-20260206-202416.png?cb=81c7dcf34f1e5cef7d7eb231cb863d04)

#### Seeq Usage

Agent Q is also aware of the information available in the Usage page. Whenever a user asks a question about Usage, Agent Q uses the permissions associated with that user to inquire about usage. **Analytics administrators** can see Usage from multiple users, they'll be able to get accurate answers to the questions below.

*Who has opened this workbook this year?*

*Which Organizer Topic has the most viewers this month?*

**Non-admin users** can only see their own usage, so the above questions could only be answered about how *they*have used a workbook or other application in Seeq. They will get better answers to questions like:

*How many days did I open this workbook this month?*  
![image-20260206-202647.png](https://support.seeq.com/__attachments/a_83e40493fc91f5e37c0fa91da72d4f932f7098cfcd24a6e3a770683e7e665085/image-20260206-202647.png?cb=441eacd907a2adc7210000b781a1f1f9)

### Frequently Asked Questions

#### Who benefits from Agent Q?

Operations analysts, process engineers, remote monitoring personnel, managers or directors, and anyone else seeking to understand short or long term trends about events in a Vantage Room.

System administrators can benefit from Agent Q's understanding of [usage](https://support.seeq.com/latest/cloud/agent-q.md#Seeq-Usage).

#### Who has access to Agent Q?

When Agent Q is enabled with a Seeq Intelligence license, all users will be able to use Agent Q. There is not currently a way to limit access to select users.

#### How do I tell who is using Agent Q?

An administrator can use the [Usage Page](https://support.seeq.com/latest/cloud/understanding-usage-data.md) to understand overall AI usage patterns of the user base. This does not reveal the text of prompts or where Agent Q is used, but by selecting Prompts from the radio buttons on the right, limiting the Type to AI Assistant (Agent Q), and aggregating by users, you can see how much engagement the user base has with Agent Q.

#### What information is passed through to LLMs when I am working with Agent Q?

Agent Q has access to any information in a Vantage Room, from events, comments, labels, conditions, columns, and Journal. Additional context provided to Agent Q includes your user information like language preferences, memories, timezone, and current time. If you have created any [Code Tools](https://support.seeq.com/latest/cloud/using-code-tools-with-agent-q.md), those are also provided as context so Agent Q can determine whether or not they should be used.

It is possible that anything within the workspace (including dataframes of data) may get passed to the LLM. In practice, Agent Q uses previews / descriptions of dataframes and routinely passes column names, types of data in the column, and the first couple rows to the LLM. It is possible for it to write code that could reveal any part of the dataframe to the LLM.

Agent Q can also request additional information like active time ranges, displayed items, selected rows, calculation hierarchies, and recently accessed items. It can perform searches throughout Seeq on the user's behalf to find other items or information

#### Can I customize the suggested prompts that show when Agent Q is opened?

Yes, administrators can modify the `Features/GenAI/AgentQCustomPrompts` configuration option and supply a list of prompts that will be shown to all users when Agent Q is first opened:  
![2026-03-11 at 20.55.34Z.png](https://support.seeq.com/__attachments/a_4800d544fb17328b56a3456bbdda40e415763aacba3bb16e4e450dd877cb347e/2026-03-11%20at%2020.55.34Z.png?cb=94b8e953a3796a7e6781ea0e367a94af)

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# AI Assistant - Tips, & Troubleshooting

Accelerate your work using Seeq's AI Assistants, including prompt guidance, pro tips/best practices, and troubleshooting.

## Prompting Guidance

We do our best to make Seeq's AI as robust as possible to different ways of phrasing your question. That said, there are some best practices.  
![image-20250220-191317.png](https://support.seeq.com/__attachments/a_c8924efa1827419d197a08bbf0d259bef2e907775838065e33282662dbc7b95b/image-20250220-191317.png?cb=0c92486140896cae8c87f7f514231b5a)

* **Be concise, clear, and direct.**

* **Iterate.**Following up or rephrasing, as you would in a real conversation, can help refine both your \& the AI's understanding of the analytics and approach.

* **Check AI's work.**Click Edit to check the underlying Formula; look up unfamiliar formulas in the Formula documentation or ask the Formula Agent.

* **Include units**to help the assistant understand the desired math.

* **Specify item name(s)** for new items, or for existing items if you have many similarly-named signals.

* **Break complex analytics into steps**especially if you need access to the 'intermediate' items produced.

* **New topic? Not progressing? Start new chat.**

Then, check out the icons below the AI's answer: see the resources the Agent used to generate its answer with the ![info](https://support.seeq.com/__attachments/a_6259e700ce7e00f59fd0a0e1846dbdf7984aa2f1419daf4b24e6869d3469ca68/atlassian-info?cb=feab5cd71111204d6b52545f3027dd0c) button, give feedback with the thumbs up/down buttons, or retry with the redo button.  
![image-20250220-191930.png](https://support.seeq.com/__attachments/a_e052f48fdd716bdcae2161eb6c4960cc06fe3b83fb54c132ad709df783547a91/image-20250220-191930.png?cb=9bd8170e36cf0daf381d5cfdb76a37e6)

## Chat Agents

These Agents reply in the chat window and are meant to be conversational, each subject matters per their domain.  

|  **Agent**   |                                                                                                                                       **Sample Tasks \& Prompts**                                                                                                                                       |                                                                                                        **Sources of Knowledge**                                                                                                        |
|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **General**  | **Outline**analytics approach. `How can I calculate monthly dollars lost because of wind turbine curtailments?` **Learn more** about Seeq or data analytics. `How do I view my events together, ignoring time between capsules?` `What types of data cleansing can I do?` `Does Seeq have X Connector?` | ✅ Seeq Knowledge Base ✅ Q\&A and Tips and Tricks: [http://seeq.org](http://seeq.org/) ✅ Seeq Official Youtube Videos: <https://www.youtube.com/@SeeqCorporation> ✅ Seeq Formula Documentation ✅ Seeq Python Module (SPy) Documentation |
| **Formula**  | **Learn** about functions. `What parameters does the removeOutliers() function take and what are they for?` **Solve** analytics challenges. `Create a condition that finds the first shut down event in each week.`                                                                                     | ✅ Seeq Formula Documentation ✅ Q\&A and Tips and Tricks: [http://seeq.org](http://seeq.org/)                                                                                                                                           |
| **Data Lab** | **Learn** about Seeq's Python Library, SPy. `How do I pull all the data on my worksheet into a python notebook?` **Build** add ons (applications) and python analytics. `Create an add on using ipyvuetify to ___`                                                                                      | ✅ Seeq Python Module (SPy) Documentation                                                                                                                                                                                               |

## Action Agent

The Action Agent is able to take action in Workbench and Organizer, each with "skills" - specific things that it has been taught to do. Each skill has different caveats and best practices.

**Actions Agent Workbench and Organizer actions do NOT see your actual timeseries data. Instead, they use the metadata of your items (Names, Descriptions, Units, etc) to allow them to reference items and understand what is in your display/page.**

Depending on your server version, the actions that can be taken may differ from what is shown here. Always ask the Action Agent "**What can you do for me?**" for an up-to-date comprehensive list of actions it can take for you.

### Workbench Actions

Below shows the list of available actions the Action Agent can take on your behalf in Workbench.

Every time this agent takes an action, it enters the action in your Journal, with Before and After Journal links.  

|         **Workbench Action**         |                                                                                                                                                                                                                                                                                                                                                                                                                   **Description**                                                                                                                                                                                                                                                                                                                                                                                                                   |                                                                                                                                                                 **Example**                                                                                                                                                                  |
|--------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ****Load Items to Worksheet****      | Insert and load data items like Signals, Conditions, and Scalars that aren't already present in your Worksheet. Accepts regex. You can specify an asset, datasource, etc. to narrow down your search. **In later versions, you can also search for items specifying their properties, including capsule properties.** **Property Search Notes:** * When capsule properties are specified, the Agent will default to performing a local (to your Workbench) search. If you are wanting to search globally, simply include those details in your prompt. **Best Practices:** * Use "quotes" to denote names * Use placeholders like "(any characters)" to reflect characteristics of your search to find commonly named items. * Be clear on the information you provide; e.g., `the Asset named "..."`, `signals with descriptions containing "..."` | * "Add the signal named "Temperature(any characters)-U4" from the "Example" datasource to my worksheet." * "Load signals to my screen that have 'Unit 1' as their 'Process Area' property and 'PR123' in their name." * "Add conditions with 'daily' in their name that have a capsule property called 'Average Temperature'."               |
| **Remove Items from Worksheet**      | Remove items from your worksheet. **Best Practices:** * Include the names of items that should be removed, or use "all".                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | * "Remove the smoothed signals from my worksheet." * "Remove the items from Asset A."                                                                                                                                                                                                                                                        |
| ****Create New Calculations****      | Create new items for analytics tasks, such as smoothing, condition creation, or any other calculations. **Best Practices:** * Be clear on the output type; e.g., `Create a condition for ...` * The AI does NOT see your actual DATA, so include any information for conditionals. E.g., instead of `create a condition for when compressor stage is 2`, try `create a condition for when compressor stage equals "STAGE 2"`                                                                                                                                                                                                                                                                                                                                                                                                                        | * "Calculate the moving average of the pressure signal." * "Create a condition to detect when each signal is above 90. Add a property of the signal average for each, with the property name of "Average during High"."                                                                                                                      |
| ****Update Existing Calculations**** | Modify existing calculated items, including updating their calculation methodologies. **Best Practices:** * Be clear on the intention to modify or update: `Update the calculation "Calculation Name" to instead ...` * Same best practices apply as with creating NEW calculations.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | * "Update the smoothing window for the smoothed signal to 1h." * "Modify my daily averages to be weekly averages."                                                                                                                                                                                                                           |
| ****Rename Existing Items****        | Update the names of existing items in your Worksheet. **Note:** * **Stored signals cannot be renamed. New jump tags will be created in this case.** **Best Practices:** * Use quotes to indicate the new name(s).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | * "Rename the 'Old Signal' to 'New Signal'." * "Rename all my items to be prefixed by their Asset name."                                                                                                                                                                                                                                     |
| ****Change Display Properties****    | Modify display properties such as lane assignment, color, line style, and more. Include the property name that should be changed. **Available Properties to Modify:** * Lanes * Color * Line Style * Line Width * Sample Display * Axis Align * Auto Axis On/Off * Axis Scale * Axis Group * Axis Type * Select or Unselect * Number or String Formatting                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | * "Change the color of the temperature signal to blue." * "Make sure all my signals show no decimals." * "Organize my display to group all items of the same Asset in the their own Lanes."                                                                                                                                                  |
| ****Toggle Worksheet Features****    | Toggle features like certainty, dimming, and grid lines in your worksheet.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | * "Turn on grid lines in my worksheet." * "Make my items show as certain."                                                                                                                                                                                                                                                                   |
| **Configure Trend Labels**           | * Add signal labels to the lane or axis: * Name * Description * Asset * Line Style * Unit of Measure * Custom * Add Condition property labels to the trend                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | * "Add the signal name to the axis" * "Add the phase property to my condition labels"                                                                                                                                                                                                                                                        |
| **Adjust Capsule Coloring**          | Color by a capsule property in trend view while in calendar or chain view (capsule and compare view not yet supported)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | * "Color my condition by the Phase property'                                                                                                                                                                                                                                                                                                 |
| ****Change Worksheet View****        | Change the view of your worksheet to the below list. * Trend * Table * XY Plot * Treemap In trend view you can switch between: * Calendar view * Chain view * Capsule view **Note:** * **The Action Agent cannot yet further modify XY Plot or Treemap views. This action will ONLY change to the view.**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | * "Switch my view to an XY Plot."                                                                                                                                                                                                                                                                                                            |
| **Configure Condition Table**        | Configure a condition table: * Add and modify property columns * Add and modify signal statistic columns * Configure column grouping * Configure the table headers                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | * "Show me a table of my batches with columns for Product and Yield" * "Group by the Product column and show me the average yield per product" * "Change the table header to show the capsule starts in the format 01-Jan-2025"                                                                                                              |
| **Change Display Range**             | Change the investigate and display date ranges.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | * "Show me the first week of January"                                                                                                                                                                                                                                                                                                        |
| ****Create Journal Entries****       | Add documentation or links in the Journal. **NOTE: This action is able to traverse entire calculation hierarchies. With that, if wanting to document an analysis, be sure at a minimum your highest level calculations are in the Details Pane when you call this action.** This action can insert links to: * Your current workstep * Time ranges * Items * Newly created worksteps/views (Trend Only) Otherwise, this action can also simply document information without including any links. **Best Practices:** * Be detailed with exactly how you'd like the AI to format information.                                                                                                                                                                                                                                                        | * "Add a summary of my analysis to the journal, including links to each step within the analysis. At the bottom, include a table with all items that were a part of the analysis. Include their direct links in addition to the table." * "Add a summary of the importance of Cooling Tower compressor monitoring to the top of my Journal." |
| ****Send to Organizer****            | Send worksheets to an organizer, or create a new one for your reports. This action can send multiple worksheets or just your current worksheet. **Notes:** * **This action can only insert into Organizer DOCUMENTS; not yet dashboards.** * **The previous 20 "last opened" Organizer Topics (and their sheets) are provided to the model to allow it to find any referenced Organizer/Sheet.** **Best Practices:** * Include whether you want to create a new report or add to an existing one. * If adding to an existing report, be descriptive with including the name of the Organizer and sheet. * Be specific about which sheet(s) should be sent to the Organizer.                                                                                                                                                                         | * "Insert this sheet into my last opened report." * "Create a new report using all the sheets in this workbook." * "Add this sheet along with the sheet named "X" to the Compressor Report in the Overview sheet."                                                                                                                           |

### Organizer Actions

Below is the list of actions the Action Agent can take on your behalf in Organizer. Note that only **Documents** are supported. **Dashboards**will be supported in the future.  

|                              **Action**                              |                                                                                                                                   **Description**                                                                                                                                   |                                                                                       **Example**                                                                                       |
|----------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ****Modify HTML of Organizer Sheet****                               | Modify the HTML of your Organizer sheet to create templates, adjust titles, move content, and enhance the layout. **Best Practices:** * Be specific with what exactly you want modified within your sheet.                                                                          | * "Place my content in a 3x3 grid and add a background color of light grey."                                                                                                            |
| ****Insert Content from Workbench****                                | Inserts content from worksheets in Workbench Analyses into your current Organizer. **Note:** * **The previous 20 "last opened" Workbench Analyses (and their sheets) are provided to the model to allow it to find any referenced worksheets.**                                     | * "Insert all the content from my Q1 analysis workbench."                                                                                                                               |
| ****Duplicate a Single Sheet**** **Duplicate a Sheet across Assets** | Duplicate your current Organizer sheet, creating an exact copy. Duplicate your sheet for multiple assets, creating a separate sheet for each. **Note:** * **Content inside your Organizer must already be referencing at least one Item that is a child of the Asset of interest.** | * "Make a copy of my current sheet." * "Duplicate this sheet for all my plant assets."                                                                                                  |
| ****Create Asset Selectors****                                       | Create new asset selectors, which allow you to swap between sibling assets under the same asset path. **Note:** * **Content inside your Organizer must already be referencing at least one Item that is a child of the Asset of interest.**                                         | * "Create an asset selector for my production line assets."                                                                                                                             |
| ****Create Date Ranges****                                           | Create a new static date range. Condition and auto-updating date ranges are not supported yet.                                                                                                                                                                                      | * "Create a date range for the last quarter." * "Create a date range for the month of March 2023"                                                                                       |
| ****Link Date Ranges or Selectors to Content****                     | Link existing date ranges or asset selectors to specified content. **Best Practices:** * Use the worksheet names of content to reference them. * Use the items that exist within content to reference them.                                                                         | * "Attach the Q1 date range to my batch related content." * "Add the Area A asset selector to the content containing Relative Humidity." * "Link my monthly date range to all content." |
| ****Create Date Range or Asset Selector Labels****                   | Insert labels for date ranges or asset selectors at the top or bottom of your current sheet.                                                                                                                                                                                        | * "Add a label for the date range at the top of my sheet."                                                                                                                              |
| ****Update Content to Current View****                               | Update content to reflect the current or active workstep.                                                                                                                                                                                                                           | * "Update my content to show the current view."                                                                                                                                         |
| ****Schedule Updates****                                             | Add or update the schedule for when your Organizer sheet updates. **Note:** * **The schedule still needs to be enabled after the Agent creates it.**                                                                                                                                | * "Set my Organizer sheet to update every Monday at 8 AM."                                                                                                                              |

## Troubleshooting

* **Start a new chat periodically**to clear the AI's accumulation of references, metadata, etc.

* **Undo Action**

  * **Click "Before" link in the AI's Journal entry**at the bottom of the Journal to step back before the issue.

  * **Start new chat**using "+" button in AI window.

* **Check agent choice**e.g. Data Lab Agent is best for Data Lab/python.

* **"Invalid" answer or does not answer**an "in-scope" (related to industrial analytics) question.

  * Click the ![info](https://support.seeq.com/__attachments/a_6259e700ce7e00f59fd0a0e1846dbdf7984aa2f1419daf4b24e6869d3469ca68/atlassian-info?cb=feab5cd71111204d6b52545f3027dd0c) button in the answer. At the left-hand side, if the Category says "n/a", the question was interpreted as invalid (couldn't find relevant, allowed documentation). **Try rephrasing the prompt**.

* **Check** **items in the Details pane**. Actions Agent will only do calculations on items in this Worksheet.

  * For the Journal action, the Actions Agent *does* have the ability to see referenced variables that are not in the Details pane.

[AI Cheat Sheet 12 May 2025.pdf](https://support.seeq.com/__attachments/a_7dd6c0a2714e8708c88c82abd97426a4bd89c5226c224a5f7a19ef8e0a8369ea/AI%2520Cheat%2520Sheet%252012%2520May%25202025.pdf.md?cb=a825f8c8d05ff77271820eeb7ffbb747)

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# AI Assistant Data Privacy

## Data Privacy

The Seeq AI Assistant uses enterprise-grade Large Language Models (LLMs) provided by third-party LLM providers. These LLMs are pre-trained on broad datasets and are not trained on Seeq customer private data.

Customer and user data is not used to train LLMs. Seeq does not train LLMs, and our privacy policy, LLM provider configurations, and software controls are designed to prevent customer or user data from being used for model training.

Seeq supports multiple LLM providers and allows customers to opt into a "[bring your own LLM provider](https://support.seeq.com/latest/cloud/seeq-ai-assistant.md#Bring-your-own-LLM-Provider)" (BYOP) configuration. With BYOP, customers use their own LLM deployments, typically via an API gateway such as Azure AI Foundry, and retain full control of the model configuration and inference platform settings.

**Your prompts (inputs) and AI Assistant responses (outputs):**

* Are NOT available to other customers or users.

* Are NOT used to train or improve models.

* Do NOT cause the models to learn from your usage.

**You own your data**

You own the prompts you submit and outputs generated for you. You retain all rights to the inputs you provide via the AI Assistant. The models used by the AI Assistant are stateless, which means they do not retain memory from one interaction to the next. Separately, the Seeq AI Assistant securely stores conversation history so users can resume prior conversations from their personal history. A user's conversation history is accessible to only that user, unless the user chooses to share a conversation with others. Users can delete their own history, or remove conversations shared with them, at any time using the AI Assistant interface.

**Security and Compliance**

* The AI Assistant is included within Seeq's SOC-2 compliance footprint for Seeq products and services.

* Data is segregated and isolated by customer and stored in customer-specific environments.

* Data is encrypted at rest using AES-256 and in transit using TLS 1.2 or higher.

**Abuse Analysis**

*Note: this section does NOT apply when using a BYOP configuration*

* Inputs submitted to LLM providers may be evaluated by automated abuse-detection tools designed to identify prohibited or harmful use of the platform. These tools generate metadata about potential abuse patterns but do not contain any business data.

* Inputs and outputs may be securely retained for up to 30 days to detect and investigate platform abuse.

**Where is data processed?**

*Note: this section does NOT apply when using a BYOP configuration*

Seeq integrates with multiple LLM providers. Depending on the provider and configuration, inference may be performed on compute resources hosted in different regions globally.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# AI Assistant - Image upload

Bringing visuals into the AI Assistant can help you get richer, faster answers. Any AI Agent can benefit from including optional images in a conversation.

The AI Assistant now understands visual context. Add screenshots, photos, dashboards, or whiteboard sketches alongside your question so the AI Assistant can inspect what you are seeing and tailor its guidance. Images travel with the chat and are provided to underlying LLM providers for response. Their presence in the chat makes it easy to revisit evidence or share outcomes with teammates.

## Examples

In this example, the Actions agent is directed to find signals to add to the trend from a drawing. Highlighted colors paired with instructions in text provides further guidance on what analytics to perform.  
![image (5).png](https://support.seeq.com/__attachments/a_873885c824007899ff6eb641d61754034b8b811fe6b74651f3c644fd6216b0f8/image%20(5).png?cb=d8dbda6a5b8d6e567a34bb2231e7128a)

In the following example, an image provides inspiration for the Data Lab Agent create an Add-on without copious text describing the layout.  
![image-20250919-001047.png](https://support.seeq.com/__attachments/a_dd61491bf91b0cc0738d2e43fb0d6f8445be80f3dbe673dfeeece71edfe91b8c/image-20250919-001047.png?cb=cd8e991bca5ba7817ce87c156e84ac75)

## Best Practices

* Highlight key regions in your screenshot before uploading when possible; annotations make it easier for both the assistant and your teammates to understand the focus.

* Pair the image with a short caption in your prompt (for example, "Attached: compressor trend that spikes at 08:00") so the assistant knows exactly what to look for.

* If you have multiple visuals, order them from most to least important.

## How Image Context Works

* Attach one or more images to any prompt. A thumbnail preview appears above the input while you draft your question so you can confirm the right visuals are included. Only the first image uploaded is used by the AI assistant.

* Image thumbnails remain accessible in the chat histories. Select any thumbnail to open a full-size preview without leaving the conversation.

* **PNG** , **JPEG** or **JPG** , and **WEBP** file types are supported at up to 10 MB per image.

## Ways to Upload Images

1. **Upload button** - Choose the picture icon next to Send and select a file from your device.

2. **Drag and drop** - Drop image files directly onto the prompt area to queue them instantly.

3. **Clipboard paste** - Copy a screenshot or image (Ctrl+C, Command+C, or a snipping tool) and paste it into the prompt (Ctrl+V or Command+V).

4. **Copy with attachments** - Copying a previous chat message that already includes images brings along both the text and the visuals so you can reuse the full context.

After each upload you can remove an image with the x control on its thumbnail. Clearing the prompt or sending the message also resets the draft area.  
![60789891-924f-4306-b2bb-8f2b78ea3cad.png](https://support.seeq.com/__attachments/a_37e9d4cb4db4c0a496ed26447ad985bece079667036013297317cdeb47346af4/60789891-924f-4306-b2bb-8f2b78ea3cad.png?cb=9e3966b091fa1d3618086116fe70c515)

## Managing Attachments During the Conversation

* Draft images stay available until you send the message or remove them. You can keep working on your prompt, switch agents, or paste additional images at any time.

* Once sent, images display under the message body for both you and anyone else viewing the chat. Use the full-screen preview to zoom in on fine details.

* Copying a sent message copies the embedded images as well, letting you paste the full response (including visuals) into email, documents, or other chats.

## Administrative Controls

If your organization does not want to utilize image uploads to the AI Assistant, an administrator can disable *Features/GenAI/ImageUploadsEnabled*from the Configuration Tab on the Administration pane.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# AI Assistant - Data Lab Agent

🎉  
The Seeq AI Assistant is available for SaaS customers on R64 and later. If you don't see it already, file a [support request](https://seeq.atlassian.net/servicedesk/customer/portal/3/group/7/create/26) to have it enabled.

The Seeq AI Assistant Data Lab Agent is a tool that leverages LLMs (Large Language Models) to perform tasks such as generate code, help debug, review and assist with your Python code directly in the cells of your notebook, this functionality can be accessed via the toolbar buttons (see buttons enclosed in red rectangles) or through a chat panel on the right.

The Data Lab Agent can integrate with more of your workflows when Data Lab is not in "Notebook Mode". This is controlled in the upper right corner. The sparkles in the header will open the AI Assistant in either mode.  
![image-20250701-215154.png](https://support.seeq.com/__attachments/a_34190d81b7e4536fec52265053c6146fbe42ae504f3abf4cac1458ab86071469/image-20250701-215154.png?cb=fe2290b9778522970be2bb81f5a9dd93)

## AI Assistant Chat

If you prefer a conversation with an AI Assistant, click on the sparkles icon on the far right to expand the chat side panel. The Data Lab Agent is optimized to assist you while coding in Data Lab, but it knows the other agents and will engage them as appropriate to give you the best guidance when deploying analytics in Seeq through Seeq Data Lab. You can specifically access other agents here if desired.  
![image-20250701-214831.png](https://support.seeq.com/__attachments/a_75e693bacab53ae8133403e26b98f3394ca42f8d67eac4b89fead21e730b7dbc/image-20250701-214831.png?cb=ef5b2eb9c7295ff9b1936d251b0c8fba)

### Chat interface

After optionally clicking on one of the agents the user can type out a question in the dialog box at the bottom of the chat panel and send for a response from the AI Assistant Data Lab Agent. The response is streamed to the user and any code mentioned in the answer is displayed in a code box with a copy button on the right corner of the code box and also an arrow icon that will inject that code box into a new cell below the current active cell in your analysis notebook where it can be run straight away. The assistant has memory of the entire conversation and uses this memory as context for subsequent questions within the conversation.

Working with the AI Assistant through the chat interface, you can have a back-and-forth conversation that is more effective at tackling more complex problems that require a step-by-step approach, as opposed to engaging the AI Assistant through notebook cells. For example the user might ask "what are the top 5 time series smoothing methods", the agent will respond with five leading analytics methods and the user can pick which is most applicable to their application and follow up with a question on how to proceed with method "A" in their notebook on their dataset.  
![image-20250701-215411.png](https://support.seeq.com/__attachments/a_a9241cd3c9fa56d2e0be9856897e5c652a265f5e73c7399c37539e5f45ace864/image-20250701-215411.png?cb=e0495bf6a14099a32a7aaa678c1726f7)

### AI Assistant Data Lab Agent within notebook cells

There are three buttons in the notebook toolbar to utilize the AI Assistant. The AI Assistant will respond to the currently selected code cell when these buttons are used.  
![image-20230919-070158.png](https://support.seeq.com/__attachments/a_1f27a0b35b622a1f6438781b44aa898900824bab82519c45d366f008f57c37d4/image-20230919-070158.png?cb=1efd3c1f9331c17fc9d681c3dac0319d)

These three functions of this AI Assistant empower Data Lab users with an enhanced coding experience. The first button helps create code by providing answers from natural language to turn SMEs' analysis ideas into interpretable code with detailed explanations. The second button helps debug and provide code fixes in one simple click. This could include helping the user navigate fresh new python packages for advanced analytics or assisting when existing code breaks from changing data source structure or supporting code refactors. The last button can help with learning and improvement, the AI Assistant reviews the code and provides detailed explanations.

Not only can using the AI Assistant Data Lab Agent help with the analysis at hand for the user, but over time users can learn from the interactions and become more effective Data Lab user and data scientist.

#### Ask questions within your notebook \</\>✨

The first button is to "Ask the Seeq AI Code Assistant to answer the question in the active cell" and is displayed as a "\</\>✨". The intention for this function is so that users can quickly ask a question of the assistant to complete or provide some code in the cells below to assist with their analysis. It can be used as a starting point when the user knows what analysis they wish to perform but doesn't know exactly how to start or the right python code to achieve their idea. In addition it can be used throughout your existing analysis to improve current workflows or assist users get past technical roadblocks.

An example is shown in the figure below, the assistant starts by streaming an explanation or summary of the answer in a markdown cell below your active cell. After this it then provides python code to meet your objective in a second code cell below, after the Seeq AI Assistant has finished responding you can directly run that provided code in your notebook. The Seeq AI assistant has access to all code cells above the active cell and incorporates that knowledge to use current variable names and endeavors to align with your analysis flow.  
![image-20230918-120334.png](https://support.seeq.com/__attachments/a_bdcfe6bc425470cc7ff74c065f931e95e2afa65b43b7d2446aa4f64cbda3a305/image-20230918-120334.png?cb=7fbb62372ae2a86c45424fc1da8a83e2)

#### Debug your notebook analysis 𖢥✨

The second button is to "Ask the Seeq AI Code Assistant to debug the code in active cell" and is displayed as a "𖢥✨". The function here seeks to improve the typical python problem solving, in place of google and stack overflow this function can provide code fixes in one click.

In the figure below we showcase a very simple example to illustrate the workflow, the assistant receives your code in the active cell and its error stack trace. The assistant starts by streaming a detailed explanation of both the error it sees and a solution to the problem in a markdown cell below your active cell. After this explanation it then generates a code cell with the suggested fixed python code which can be directly run in your notebook to validate the code is now working.  
![image-20230918-120541.png](https://support.seeq.com/__attachments/a_67d1a67f261a1a18febeaad60590d3e4119331200262eb197e4b793e986c144b/image-20230918-120541.png?cb=25b916e89b18683980c499eb18d979fd)

#### Review and suggest improvements 👁✨

The third button is to "Ask the Seeq AI Code Assistant to review the code in the active cell" and is displayed as a "👁✨". This function can help the user improve their own code or if they receive a notebook analysis from a colleague and the code comments are limited it can assist the user to get up to speed quickly.

An example is shown in the figure below, the AI Assistant reads your active cell and provides a detailed explanation of your code in a markdown cell below followed by a code cell after that with the suggested improve code.  
![image-20230918-121137.png](https://support.seeq.com/__attachments/a_e9d646722ad189eec922046b5613b8d550ed43af3e7729bc963058d98c7c2a08/image-20230918-121137.png?cb=e82f5e52089e3b31dd7df54bb7fb550d)

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# AI Assistant - Formula Agent

🎉  
The Seeq AI Assistant is available for SaaS customers. If you don't see it already, ask your administrator to file a [support request](https://seeq.atlassian.net/servicedesk/customer/portal/3/group/7/create/26) so it can be enabled.

The AI Assistant Formula Agent leverages Large Language Models (LLMs) to help users in Seeq Workbench accelerate their analysis. This agent understands how to apply Seeq Formula Functions given natural language prompts. It will provide formulas that can be pasted into the Formula tool, and it even knows what variables are available to minimize edits each time you ask for help.

You can also take advantage of the [Actions Agent](https://support.seeq.com/kb/latest/cloud/seeq-ai-assistant#SeeqAIAssistant-Agentsforspecializedresponses) to create new items from natural language.

The Formula Agent is available to answer any questions about Seeq Formula.

See the following examples of how you might use the Formula Agent to get help writing Seeq Formulas.

## Provide formulas in the context of variables provided

In the following example, the user provides a prompt "I want to create 10 hour capsules that ends at the start of my original capsules in my high temperature condition". Instead of providing generic functions you might see in the Formula Documentation, the Assistant writes a formula using the variable referred to by the condition name, without worrying about renaming variables. Copy from the Seeq Formula block to paste into the Formula Tool.  
![image-20250701-214200.png](https://support.seeq.com/__attachments/a_02a36d56a79f00bc62cb45ed4dac795a28f5f7a251018c11fa32a603139312df/image-20250701-214200.png?cb=b97977e692005d18f9dbc68a6e67ae47)

### Inspire with different analysis approaches

In the image below, the user asks "Create an analysis using my signals" and the Assistant recommends one approach that involves identifying some periods of interest and aggregating data over those periods. If you ask the assistant for more specific analyses, it will follow your lead and can help you with a myriad of cleansing techniques, model creation, and much more  
![image-20240702-221230.png](https://support.seeq.com/__attachments/a_abf43453afa9df9aea893d04af3e29ba00cb7b1797f805fd804555cd94765ea4/image-20240702-221230.png?cb=3759ca9e7751c0158d0549688819a68c)

### More easily discover Formula Functions

Almost every new user to Seeq eventually asks "how do I do an IF statement?" The Formula documentation has lots of hits for "if", fewer for "then", and even fewer for "else", but it is circuitous at best to discover the splice() function. The Assistant is equipped with the mindset of a Seeq Analytics Engineer to help you find the right function for your use case more quickly than navigating existing documentation.  
![image-20240702-220935.png](https://support.seeq.com/__attachments/a_2116802be5478ad61998ea5e105a30b04b321cba8e1282f58c1445785bd5b136/image-20240702-220935.png?cb=d8f7f123b5096994e383ce5c589e0b48)

### Explain how your formula works

Did you get a huge block of formula from one of your teammates but you aren't really sure what it is doing? The AI Assistant in Seeq Formula can take a block of code and add comments to each line, explaining what that line of formula is doing. 🎉

![image-20240703-044635.png](https://support.seeq.com/__attachments/a_08976a8d06eced770204055087c2063e1d13fc24dfc63d0eeff999176bd76281/image-20240703-044635.png?cb=53d5a58cbd72944a664401128f49d01f)

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# AI Assistant - Library & Use Cases

The AI Assistant Library allows users in Seeq to interact with AI-powered **Use Case** walkthroughs and starter **Prompts**.

The Library can be opened using the *Library* button next to *New Chat* in the AI Assistant sidebar.  
![2025-11-06 at 17.07.47Z.png](https://support.seeq.com/__attachments/a_b749acc339fce76dd1cfe0602e3d86c20ae31d1b7214287b9e74805ea7a661dc/2025-11-06%20at%2017.07.47Z.png?cb=4cadf8b8ac6bd145bd1ddefef2010255)

## Use Cases

Use cases are currently only available when interacting with the Actions Agent in Workbench

Use Cases are custom instructions that allow the Actions Agent to guide a user through a specific use case or task. Use Cases can be useful to:

* Share standardized analytics approaches across your user base

* Help onboard new users by guiding them through common high-value use cases

* Automate repetitive tasks in workbench and organizer

Clicking the play (▶) button will have the Actions Agent retrieve the Use Case instructions and enumerate the steps of the use case before guiding the user. For each step, the agent may:

* Ask questions and take action based on your responses (e.g. *What signal do you want to model*?)

* Immediately take action if it already has the required information

* Guide you through to take the action yourself

![2025-11-06 at 18.03.40Z.png](https://support.seeq.com/__attachments/a_ab9a4f9241a55835c57af6ee57290a61932d518b126b6e84311509f2437a92a4/2025-11-06%20at%2018.03.40Z.png?cb=e2850060d3f3843bdbe10d47d0a15861)

### Created by Seeq

A collection of Use Cases written by Seeq are included under the *Created By Seeq* section of the Library. These Use Cases allow users to immediately implement known high-value use cases on their own data, while also serving as inspiration for your own custom Use Cases. *Created By Seeq* Use Cases are available to all Seeq users.  
![2025-11-06 at 19.05.48Z.png](https://support.seeq.com/__attachments/a_493e430d8ea30a97a9cd72e3251051c55d9d686520302f9477d108bb18c7e7f8/2025-11-06%20at%2019.05.48Z.png?cb=bfe541e8ca6f984331007c3ad3ba0a64)

This collection will continually grow over time -- so check back often!

### Custom

Use the *New* button to create a new Use Case from scratch. The Actions Agent interacts with Custom Use Cases in the same way as the *Created By Seeq* Use Cases.  
![2025-11-06 at 19.14.50Z.png](https://support.seeq.com/__attachments/a_1f28629b53f28e25d5143c63ee104986c4610818c31da4ff696926f400074a16/2025-11-06%20at%2019.14.50Z.png?cb=72480a10ff80808ef0071c8e0828fb75)

#### Writing Use Cases

For the most repeatable results, we recommend following our Best Practices when writing your Use Case content. Refer to the Use Case in the expander below as an example for how to apply these best practices
Example Use Case Content - Golden Batch Modeling  

## Golden Batch Modeling - Reference Profile

### Reference Profiles

Use the Reference Profile tool to create a profile of the expected behavior of a signal during a given period (such as start-up or production period). Golden profile calculations are often +/- standard deviation, but you can calculate average, min/max, max deviation, etc. as well, making this a flexible technique for boundaries and "centerline" modeling.

#### The general steps for making a Reference/Golden Batch are:

* Identify all profiles

* Identify good profiles

* Calculate boundaries (statistics) during good profiles and apply those boundaries (statistics) to all profiles

* Identify when the signal is outside the boundaries

### Objective

Create a golden batch/reference profile to find when the data goes outside the "typical" boundaries/profile of the given process.

### 1. Get Data

This technique works on data that have a repeating or profile that should remain consistent in amplitude and , such as temperature in chemical batch reactions and distillation columns, pH in paper manufacturing, CO2 in fermentation batch reactions (food \& bev), gas flow rate in Chemical Vapor Deposition (semiconductors), or Biomass growth (OD600) and dissolved oxygen in bioreactors.

### 2. Set Time Range

Set the display range to a period of "good" operation, when you had many batches/profile repetitions ("runs") that ran as they should.

### 3. Cleanse Data (if needed)

To build a linear forecast, Seeq will make an Ordinary Least Squares linear fit of the data (see `regressionModelOLS()` in the Formula documentation) and apply that equation going forward from "now" (it will update as "now" changes). To make a good fit, the data should not contain outliers, bad data, downtime, or other data points that could skew or bias the fitted line. So, consider cleansing the data first.

There are three main categories of data cleansing:

* **Removing Outliers and Bad Data**

* **Smoothing/Filtering**

* **Adjusting Signals** (re-calibrating, shifting)

Get more info in the Skill Explorer if needed to identify what kind of cleansing you need, along with recommended Formulas and techniques, then try Actions Agent (or manual tools) to complete it.

### 4. Identify Runs

As shown in the picture at the top of this Journal, the first step is to identify the Runs (individual profiles). Common approaches include:

* Use **Value Search Tool** on a status signal of some kind. (e.g. "Production" status, numeric status that indicates a run, etc.). Keep in mind that Value Search on text (string) data is case sensitive.

* **Ask AI!** Describe how you would determine the start and end of a Run period, and ask it "How would you make a Condition that (....)". Start with the General or Formula Agents, or try Actions!

* Use one or more of the common ways to identify a Condition shown in the Skill Explorer; you can flexibly also combine or adjust Conditions if you can, for instance, easily identify the start and end of production, but have trouble making a condition for the duration.

* As a last resort, try the **Profile Search Tool**; Profile Search works better on more complex profiles.

### 5. Identify "Good" Runs

Identify "good" Runs, which will be used to calculate the golden/reference profile. (suggestion: name it "Good" or "Training" Runs)

Common approaches include:

* **Visual determination**: Open the Manual Selection Tool and click on the "good" Run capsules at the top of the Display Pane to add them to the Manual Condition.

* **Try Capsule View** (see toolbar at top of trend), which overlays all the capsules, to compare the profiles. This can help visually identify when signals deviate from the norm, or which ones might be more "normal" or consistent.

* **Use a run quality indicator** , such as lab data, density, etc. to identify good runs. In Formula, try `touches()` or another condition combination function to combine the Runs and Good Quality conditions. Try AI Formula or Actions Agents!

Note: you do not have to make a "Good" condition over which to train the boundaries; you can simply train during the "training window" defined in the tool.

**How many runs do you need to train over?**

It can vary; get as many as you can during operations that mimic what current operations "should" be.

* Broadly, training the golden profile with runs that are more "dissimilar from each other" will make the +/- 3 Std Dev boundaries wider or less "strict," as the std deviation will increase.

* Training with more similar/tightly controlled runs will result in narrower boundaries, and, when you apply those boundaries to data, you may see more deviations (excursions outside the boundaries).

**Iteration is key** in training boundaries; you may make the "Good Runs" condition, train the boundaries, find deviations, and then go back and tune the "Good Runs" condition to be more or less strict as needed based on the deviations.

### 6. Calculate +3 Std Dev Boundary

The +3 Standard Deviation is often used as an upper golden profile. We will use this statistic here, but you can also use other statistics (see "Reference statistic" chooser in the Reference Profile tool).

Use the **Model \& Predict \> Reference Profile Tool** to calculate the +3 Standard Deviation of your profile data during the Good Runs condition.

**Reference Profile inputs:**

* **Name**: +3 Std Dev - (profile data name)

* **Input Signal**: your profile data

* **Input Condition**: Good Runs

* **Training Window**: choose a training window that contains all the capsules of the training condition that you want to include in the calculation. In general, the current Display Range should be used as the training window, since the user previously set it to show the desired selection of Good Runs.

* **Gridding**: as appropriate for your data; longer gridding times will make a smoother profile. If not specified, default to 5 minutes.

* **Statistic**: Standard Deviation

* **Multiplier**: 3

* **Apply to Condition**: Runs (this will apply the +3 Std Dev to ALL Runs capsules, even those outside the current time range).

Put this **+3 Std Dev - (profile data name)** signal on the same lane and axis as the original signal.

### 7. Calculate -3 Std Dev Boundary

Duplicate the +3 Standard Deviation and calculate the -3 (instead of +3) Standard Deviations of the original profile data during Good Runs.

1. In the Details Pane, by **+3 Std Dev - (profile data name)** created above, click the three-dot icon, then the Item Properties icon.

2. Use the **Duplicate** button at the bottom of the panel.

3. Change the Name to **-3 Std Dev - (profile data name)**

4. Change the Multiplier to -3 instead of 3.

Put the **-3 Std Dev - (profile data name)** signal on the same lane and axis as the original and +3 Standard Deviation signals.

Select **Chain view** to see just Production Runs and boundaries with no intervening data, then **Capsule view** to overlay capsules.

### 8. Find When Profile Goes Outside the Boundaries

* **Ask Actions Agent** : Find when (profile data signal) is outside the (+ and - 3 StdDev boundaries).

  Insert the actual names of these signals.

* Use the **Identify \> Value Search tool** and the "not between" operator.

Note: you do NOT have to visualize boundaries in any particular way in order to find when the signal goes outside the boundaries (using Value Search); as long as you have the signal and the boundaries (which can be calculated using Reference Profile, Formula, or brought in from your historian), you can use Value Search alone.

But folks often like to use the visualization techniques below to better monitor their batches/runs.

### 9. (Optional) Add Shaded Boundaries

Visualize the standard deviation profiles as shaded boundaries. This must be done in the Scorecard Metric Tool; there is no Formula shortcut. As the actions agent you are not able to create Scorecard Metrics on behalf of the user; help them do this themselves with the following inputs:

1. **Open Scorecard Metric**: From the tools panel, open a new Scorecard Metric. This tool will help you visualize the boundaries as shaded areas.

2. **Configure the Scorecard Metric**:

   * **Name**: Give your scorecard metric a name, such as "Shaded Boundaries."

   * **Type**: Choose "Simple" for the type.

   * **Item to Measure**: Select your original profile data signal.

   * **Statistic to Measure**: Choose "None" since you are focusing on visualizing boundaries.

   * **Thresholds**: Add the +3 and -3 standard deviation signals as thresholds. You can do this by clicking "Add Threshold," selecting a threshold color, and then using the "Switch to item selector" button to choose the standard deviation signals.

Return to **Calendar** or **Chain View** (if not there already) to see the shaded boundaries on the trend.

### 10. (Optional) Get Notified

Add an email notification for the **Outside the Boundaries** condition (step 8).

Note: Notifications are only available for SaaS customers.

* In the Details Pane, click the 3-dot icon by the desired condition.

* Then click **Add Notifications**.

Notes:

* Seeq will check the condition for a new capsule every 15 minutes (Admins can change this check interval). When a new capsule is detected, an email will be sent out.

* You can view the last seven days of your notification history. Click on your name at the top right \> Notification History.

* Tip: Look in the Capsule pane for the Start Date (when maintenance is needed).

### 11. (Optional) Document Your Analysis

AI can help you add documentation or links in the Journal.

NOTE: This action is able to traverse entire calculation hierarchies. So, if you want to document an analysis, be sure at a minimum your highest-level calculations are in the Details Pane when you call this action.

**Tell Actions Agent** :

Add a summary of my analysis to the journal, including links to each step within the analysis. At the bottom, include a table with all items that were a part of the analysis. Include their direct links in addition to the table.

#### Overall Structure

Include the following elements in the Use Case content, in this order:

* Title

* Objective or Overview to orient the Agent

* Numbered Steps (mark which are Optional)

##### Structure of Each Step

Include the following information in each step:

* Whether the step should be performed by the Agent, the user, or the Agent after confirmation with the user

* If a specific formula should be used, provide the formula in a code block with input variables clearly commented

* Information to help the User and Agent understand why a step is being taken

* If a step cannot be accomplished by the Actions Agent (refer to [AI Assistant - Tips, \& Troubleshooting \| Action Agent](https://support.seeq.com/latest/cloud/ai-assistant-cheat-sheet.md#Action-Agent)for its current capabilities), provide enough information to allow the Agent to guide the user through the step.

Variable agent behavior on a specific step typically indicates that a step is not specific or clear enough.

#### Sharing Use Cases

Custom Use Cases can be shared with other users and groups the same way as other items in Seeq. Clicking *Manage Access* under the ⋮ menu will open the Access Control menu for the Use Case. Refer to <https://support.seeq.com/kb/latest/cloud/understanding-scoping-and-permissions> for more information on permissions.  
![2025-11-06 at 17.32.48Z.png](https://support.seeq.com/__attachments/a_982400b3feca7f955e1fe80d49f6ea4fe27cf46e76a1875773d491291697cf08/2025-11-06%20at%2017.32.48Z.png?cb=1a2e1df3ce2ee39a19fc2fadd1a57635)

## Prompts

Prompts are intended to provide inspiration for new users of the AI Assistant, showing the variety of prompts that can be asked to each of the AI Assistant Agents. Clicking the play (▶) button will populate a new chat with the prompt autofilled for you to submit.

Some prompts have placeholders (i.e. `Remove values below 0 from the [signal name] signal`). Replace placeholders with appropriate values before submitting the prompt.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# AI Assistant Memories

## Overview

The AI Assistant now features **User Memories** for a more personalized and efficient experience as the AI learns and adapts to your specific needs over time.  
![2026-04-20 at 21.24.49Z-20260420-212507.png](https://support.seeq.com/__attachments/a_5f90babd1e84a0e9590a553181ce7b49985fa32807034fb30991a716a340d519/2026-04-20%20at%2021.24.49Z-20260420-212507.png?cb=e917e12c785bf1102c85431347f93e34)

## Creating Memories

### User-Initiated Memory Creation

You can directly instruct the AI to create or update memories by explicitly asking. This gives you direct control over what information you want the AI to remember. When a memory is created, it will be created in a 'pending' state and must be approved before taking effect.

Here are a few examples of different types of memories:

* Always remember that when I say 'my assets', I am referring to the Area assets under 'Example \>\> Cooling Tower 2'

* Remember that I prefer concise explanations

* Update my memory about my current project to include the new timeline

* Always remember that when I say 'Clean up my display', it means to turn any conditions to Blue and any signals to Black

* When I do aggregations, I always use a 1-hour window by default. Use this unless I explicitly tell you otherwise.

* Always remember that when you provide me an answer to a question, it needs to be accompanied with at least three sources that you read=

## Memory States and Approval

### Pending Memories

* Memories start in a "pending" state awaiting your approval

* Pending memories are not shared with the AI until you approve them

* Limited to 20 pending memories (or 800 total tokens)

### Active Memories

* Approved memories become part of your persistent AI context

* Limited to 20 approved memories (or 800 total tokens)

* They're automatically included in future conversations to provide personalized assistance

* Can be edited, updated, or deleted at any time

## Managing Your Memories

### In-Chat Management

* New or updated memories appear in the chat immediately after the AI creates them or when you request them

* You can approve, discard, or view memories directly in the conversation

* Each memory can be expanded for full content and managed without leaving the chat

### AI Preferences Interface

Access the comprehensive memory management interface by:

1. **From the AI Assistant**: Click the gear/settings icon (⚙️) in the AI Assistant toolbar

2. **From User Preferences**: Go to your user preferences and select the "AI Assistant" tab

The AI Preferences interface provides:

#### Feature Control

* **"Enable AI to generate memories"** checkbox controls the entire feature

* When disabled: AI cannot view existing memories or create new ones

* When enabled: Approved memories are available to AI and new memories can be created

#### Memory Management

* **Pending Memories**: View, approve, or discard memories awaiting approval

* **Saved Memories**: Edit, delete, or review all approved memories

* **Memory Updates**: Compare original vs. updated content before approving changes

## Benefits

* **Continuity**: AI remembers context across multiple conversations and sessions

* **Personalization**: Responses become more tailored to your specific needs and preferences

* **Efficiency**: Reduces need to repeatedly explain your context, preferences, or background

* **Learning**: AI understanding of your work patterns and domain expertise improves over time

* **Control**: You decide what gets remembered and can modify or remove memories at any time

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Allowing Seeq to be Embedded in Frames

## Overview

Seeq is designed to leverage the full web browser experience, but some use cases want to embed visualizations into dashboards or other web pages. This is typically done by using frames or iframes. However, embedding websites is often seen as a security risk due to click jacking. Seeq provides configuration options the administrator can use to control whether third-party web applications are able to communicate with the Seeq server and render Seeq in an iframe.

These options are listed from least to most permissive. Here is an explanation of the settings involved in embedding Seeq in frames:

* The **Network/Http/AllowedOrigins** setting controls which remote origins (specified as URL(s) e.g. https://application.company.com) are allowed to communicate with the Seeq server from a web browser. The 'origin' header of all incoming HTTP requests is examined, and, if present, will be matched against this configuration option. If more than one origin URL is to be specified, use a comma to delimit them. All origins can be allowed by setting this option to '\*' (without the quotes).

* The **Network/Http/ContentSecurityPolicyFrameOptions** and **Network/Http/ContentSecurityPolicyFrameDomain** settings work together to control whether Seeq can be embedded in an iframe.

## No embedding

Disallow embedding Seeq in frames:

* Set **Network/Http/ContentSecurityPolicyFrameOptions** to DENY

## Allow from Same Server (Default)

If the server hosting your dashboard or other frame is on the same server as Seeq, you can use SAMEORIGIN:

* Set **Network/Http/ContentSecurityPolicyFrameOptions** to SAMEORIGIN

## Allow from another domain

For embedding Seeq between hosts, you must provide the allowed domain. Wildcards are not allowed, and protocols must match (eg http vs https):

* Set **Network/Http/ContentSecurityPolicyFrameOptions** to ALLOW-FROM

* Set **Network/Http/ContentSecurityPolicyFrameDomain** to [http://example.com](http://example.com/) (multiple comma-separated domains are allowed, except in Internet Explorer 11 which only uses the first domain)

## Allow from anywhere

This is the most permissive option. Allow embedding from anywhere by setting the options to ANY:

* Set **Network/Http/ContentSecurityPolicyFrameOptions** to ANY (Internet Explorer 11 allows only the first domain specified in the ContentSecurityPolicyFrameDomain setting)

### Important notes

* The Seeq server must be secure (i.e. https)

* You'll need to restart Seeq for the changes to take effect for it to work.

* Display of Seeq in a frame is not supported in Safari.

* The [Content-Security-Policy header and frame-ancestors directive](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) is used to enforce the configured behavior settings.

## See also:

[MDN X-Frame-Options documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options)

[Combating ClickJacking With X-Frame-Options](https://blogs.msdn.microsoft.com/ieinternals/2010/03/30/combating-clickjacking-with-x-frame-options/)

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Amazon Athena

JVM Agent

## Item Type Support

Signals SCALARS CONDITION

## Overview

The SQL Connector enables Seeq to access data from Amazon Athena.

## Prerequisites

### AWS Region

You will need the region in which your Athena service is running. This can be found in the AWS CLI or the Console.

#### Authentication

You can authenticate with username and password or with AWS session token credentials.

The IAM permissions required are as follows:

    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Sid": "VisualEditor0",
    			"Effect": "Allow",
    			"Action": [
    				"athena:CreatePreparedStatement",
    				"athena:StartQueryExecution",
    				"athena:GetQueryResultsStream",
    				"glue:GetTables",
    				"glue:GetPartitions",
    				"athena:UpdatePreparedStatement",
    				"athena:GetQueryResults",
    				"glue:BatchGetPartition",
    				"athena:DeletePreparedStatement",
    				"glue:GetDatabases",
    				"athena:GetPreparedStatement",
    				"glue:GetTable",
    				"glue:GetDatabase",
    				"glue:GetPartition",
    				"athena:GetQueryExecution",
    				"athena:ListPreparedStatements"
    			],
    			"Resource": "<put your resource scope here>"
    		},
    		{
    			"Sid": "VisualEditor1",
    			"Effect": "Allow",
    			"Action": [
    				"s3:PutObject",
    				"s3:GetObject",
    				"s3:ListBucketMultipartUploads",
    				"s3:AbortMultipartUpload",
    				"s3:CreateBucket",
    				"s3:ListBucket",
    				"s3:GetBucketLocation",
    				"s3:ListMultipartUploadParts"
    			],
    			"Resource": [
    				"arn:aws:s3:::<your bucket name>/*",
    				"arn:aws:s3:::<your bucket name>"
    			]
    		}
    	]
    }

If you use username and password the Key ID for an IAM user will be the username and the Key Secret will be the password.

If you use session token credentials, the Seeq Remote Agent must be configured with an AWS `credentials` file stored in the home directory of the Seeq Windows Service account user. The `credentials` file should be placed in the `/.aws` subfolder in the home directory. For example, if the Seeq Windows service account is `Seeq-User`, then the credentials file should be placed in `C:\Users\Seeq-User\.aws`. The `credentials` file has no file extension.

Configure the `credentials` file profile details.

    [seeqprofile]
    aws_access_key_id=ASIAXXXXXXXXX
    aws_secret_access_key=XXXXXXXX
    aws_session_token=XXXXXXXXXXXXXXXXXX

The Seeq Athena connection is configured to use session token authentication through the addition of two new parameters in the `JdbcProperties` field. The new parameters will instruct the Seeq Athena JDBC connection to use the session token `AwsCredentialsProviderClass` of `com.simba.athena.amazonaws.auth.profile.ProfileCredentialsProvider` and direct the connector to the named profile configured in the `credentials` file. When using session token authentication, the `Username` and `Password` fields are ignored, but set them to `null` for clarity.

    "Username" : null,
    "Password" : null,
    "JdbcProperties":
    {
        "AwsCredentialsProviderClass": "com.simba.athena.amazonaws.auth.profile.ProfileCredentialsProvider",
        "AwsCredentialsProviderArguments": "seeqprofile"
    }

#### S3 Output Location

Athena writes the query results to an S3 bucket, this can be identified in the AWS console.

## Configuration

This is an example configuration template that is displayed in the *Additional Configuration* box that appears when you click *Configure* for an existing datasource (or if a new datasource is being created, in the *Create new datasource connection* modal that appears after clicking *Add Datasource*) on the Datasources administration page.
JSON

    {
        "Name" : "Athena",
        "Id" : "dc728d73-8830-4446-ba09-0c6603dd2e47",
        "Enabled" : true,
        "Type" : "ATHENA",
        "Location" : null,
        "Hostname" : null,
        "Port" : null,
        "DatabaseName" : null,
        "Username" : "TESTACCESSKEY",
        "Password" : "123432/2sdf224t545dk",
        "UseWindowsAuth" : false,
        "AwsRegion" : "us-east-1",
        "S3OutputLocation" : "s3://path-to-bucket/queryResults/",
        "InitialSql" : null,
        "TimeZone" : "America/Los_Angeles",
        "PrintRows" : false,
        "UseResultsetStreaming" : 1,
        "RowsToFetchPerBlock" : 500000,
        "JdbcConnectionStringOverride": null
      }

### Standard SQL Additional Configuration

|        **Property Name**        | **Default Value** |                                 **Data Type**                                  |                                                                                                                                                                                                                                             **Description**                                                                                                                                                                                                                                              |
|---------------------------------|-------------------|--------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `QueryDefinitions`              | null              | Array\[QueryDefinition\]                                                       | A list of queries that Seeq will use to generate signals, conditions and scalars. See [SQL Query Definition Excerpt](https://support.seeq.com/latest/cloud/sql-query-definition-excerpt.md) for details.                                                                                                                                                                                                                                                                                                                         |
| `Hostname`                      | null              | String                                                                         | The hostname of your datasource. If your hostname is of the form `"abc\def"`, you will have to escape the backslash like so: `"abc\\def"`.                                                                                                                                                                                                                                                                                                                                                               |
| `QueryDefinitionExpansionLimit` | 1,000,000         | Integer                                                                        | The maximum number of signals that can be indexed from a single query definition. This value is here to protect against incorrect query definitions producing many millions of invalid signals.                                                                                                                                                                                                                                                                                                          |
| `Port`                          | 0                 | Integer                                                                        | The port for the JDBC Connection.                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `Database Name`                 | null              | String                                                                         | Optional: Can be defined here or as part of a fully qualified table name in the QueryDefinition.                                                                                                                                                                                                                                                                                                                                                                                                         |
| `Username`                      | ""                | String                                                                         | The user name                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `Password`                      | null              | String/[SecretFile](https://support.seeq.com/latest/cloud/storing-datasource-configuration-secrets.md) | The user password.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `JdbcConnectionStringOverride`  | null              | String                                                                         | Optional: Can be specified if you have a known, functioning JDBC connection string. If specified, `Hostname`, `Port` and `Database Name` need not be specified.                                                                                                                                                                                                                                                                                                                                          |
| `InitialSql`                    | null              | String                                                                         | Optional: A SQL command that would be run one upon establishing a connection.                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `TimeZone`                      | null              | String                                                                         | Optional: The time zone to use for timestamp or datetime columns. For example, to set this to US Pacific Time, you would use `America/Los_Angeles`.                                                                                                                                                                                                                                                                                                                                                      |
| `PrintRows`                     | false             | Boolean                                                                        | The rows from the SQL query will be printed to the jvm-link log. This is for debugging purposes only, and should be set to `false` in normal operation.                                                                                                                                                                                                                                                                                                                                                  |
| `UseWindowsAuth`                | false             | Boolean                                                                        | Note: This is not available for all Database Types. If you are using a database type that supports Windows Authenication, you will need to ensure that the remote agent is [running as the correct user](https://support.seeq.com/latest/cloud/installing-and-upgrading-a-seeq-remote-agent.md#Running-the-Seeq-Remote-Agent-as-a-Specific-User).                                                                                                                                                                                |
| `JdbcProperties`                | null              | Map\<String, String\>                                                          | A map of key value pairs that are configured as connection properties                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `MinimumIdleConnections`        | null              | Integer - {0,1}                                                                | Specifies the minimum number of idle connections to maintain in the connection pool. If not explicitly specified, it defaults to a database-specific value, typically 1. For Databricks, it defaults to 0 to prevent the cluster from being kept running but it can be changed to 1 if needed.                                                                                                                                                                                                           |
| `MaximumPoolSize`               | null              | Integer                                                                        | Specifies the maximum number of connections in the connection pool (both idle and in-use). If not specified, it defaults to 11.                                                                                                                                                                                                                                                                                                                                                                          |
| `ConnectionTimeoutMs`           | null              | Integer                                                                        | Specifies the connection timeout in milliseconds. This is the maximum time to wait for a connection from the pool. If not specified, it defaults to 30000 (30s).                                                                                                                                                                                                                                                                                                                                         |
| `IdleTimeoutMs`                 | null              | Integer                                                                        | Specifies the idle timeout in milliseconds. Connections idle for longer than this are removed from the pool. If not specified, it defaults to 600000 (10 minutes).                                                                                                                                                                                                                                                                                                                                       |
| `EnablePoolSharing`             | null              | Boolean                                                                        | Enables connection pool sharing across multiple datasource connections. When true, connections to the same database with identical connection parameters will share a single connection pool, reducing total database connections. Defaults to false (each connection maintains its own dedicated pool). Not supported for Generic Database configurations.                                                                                                                                              |
| `PropagateToPool`               | false             | Boolean                                                                        | When EnablePoolSharing is true, connections to the same database must have matching pool configuration parameters (password, timeouts, pool sizes, etc.). If a connection has different values, it will fail to connect and remain disconnected. Set this to true on one connection to propagate its configuration parameters to all other connections targeting the same database. This flag automatically resets to false after propagation occurs during connector initialization. Defaults to false. |

#### Time Zone

Some SQL date and/or time column types have no zone information. The TimeZone field is available to specify the time zone that Seeq should use for data coming from columns types that have no time zone information of their own. UTC offsets (+01:00, -10:30, etc.) and IANA regions (America/Los_Angeles) are accepted. If no time zone is specified, Seeq defaults to the local region of the Seeq server. If your data was stored in UTC time, set this field to "UTC" or "+00:00". If your data was entered using a "wall clock", set this to the IANA time region of the "wall clock". Note that offsets are constant throughout the year whereas a region may observe daylight savings time. If you used a wall clock in a location that observes daylight savings time, a region is a better choice than an offset for this field. A list of IANA regions (tz database time zones) can be found [here](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).

##### Extended Athena Additional Configuration

|    **Property Name**    | **Default Value** |      **Data Type**      |                                                                                                                                     **Description**                                                                                                                                     |
|-------------------------|-------------------|-------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `AWSRegion`             | null              | String                  | The AWS region of your service. This is in the form of `us-west-1`.                                                                                                                                                                                                                     |
| `S3OutputLocation`      | null              | String                  | The S3 location where the query results are stored.                                                                                                                                                                                                                                     |
| `UseResultsetStreaming` | 0                 | Integer (either 0 or 1) | If set to 1, the streaming API is used. The streaming API requires an outbound connection on port 444 in addition to the 443 port.                                                                                                                                                      |
| `RowsToFetchPerBlock`   | 1000              | Integer                 | This is the number of rows to fetch. When using` "UseResultsetStreaming" : 0` the JDBC driver internally limits this value to 1000. When using `"UseResultsetStreaming" : 1` this value is uncapped, but should be set so that memory issues do not become a problem on smaller agents. |

## Known Issues

There are no known issues for the SQL Connector. Please report any issues you find to our [support portal](https://seeq.atlassian.net/servicedesk/customer/portal/3).

## Troubleshooting

A couple of errors that you may encounter are:

*String-valued samples are prohibited in numeric-valued signal*

If the y-axis value of the signal is a string, then the Value Unit Of Measure property is required and must be set to "string". See Example 2.

Since the Value Unit Of Measure is different for string and numeric signals, it may be easiest to write one query definition for the numeric signals and write another for the string signals. Alternatively, the Value Unit Of Measure property could be set according to an SQL IF statement similar to the technique used in Example 13.

*Samples must be ordered by their keys*

If this is occurring when trending near the daylight savings transition, this is an indication that the TimeZone is not configured properly. For example, if TimeZone is set to "America/Los_Angeles", this means that the timestamp data in the SQL table was recorded using "America/Los_Angeles" time (Pacific) which observes daylight savings. During the spring daylight savings transition, time skips from 01:59:59.9 to 03:00:00.0 which means that the 02:00 hour doesn't exist and therefore there should be no data in the SQL table during that 02:00 hour. Any data in the 02:00 hour is interpreted as being in the 03:00 hour. If there is also data in the 03:00 hour, the samples will be out of order.  

|-----------------------------------------------|-----------------------------------|
| Original data:                                | 01:15, 01:45, 02:15, 02:45, 03:15 |
| After accounting for non-existent 02:00 hour: | 01:15, 01:45, 03:15, 03:45, 03:15 |

If data exists in the 02:00 hour, it must mean it was either recorded in error or was recorded in a time zone that doesn't observe daylight savings such as UTC or a constant offset from UTC.

For more information, see the TimeZone field in the Configuration section above.

*Warning when Indexing with "TestQueriesDuringSync" enabled:*

`<Query Definition SQL> will fail to retrieve samples. Please correct the Query Definition. Error: net.sf.jsqlparser.JSQLParserException: Couldn't parse SQL statement <Query Definition SQL>`

*Error when retrieving data for SQL Connector Signals and Conditions:*

`Error: net.sf.jsqlparser.JSQLParserException: Couldn't parse SQL statement <Query Definition SQL>`

The warning and error above may have a common cause. These can occur when the SQL statements in a "QueryDefiniton" do not properly wrap identifiers that share a value with [JSql Parser Restricted Keywords](https://jsqlparser.github.io/JSqlParser/keywords.html) in double quotation marks. Refer to the Connector Rules \> General section of [Creating a Query Definition for the SQL Connector](https://support.seeq.com/latest/cloud/creating-a-query-definition-for-the-sql-connector.md) for details about this restriction and how to accommodate it in your queries.

If you are running into issues with connecting to or access data from SQL Connector, view our guide for [troubleshooting datasource issues](https://support.seeq.com/latest/cloud/troubleshooting-a-datasource-connection.md).

## Performance considerations

* The performance of this connection is highly dependent on the partitioning scheme used within the S3 bucket

* You will want to ensure your partitioning scheme matches your query to limit the amount of data scanned per query.

View our guide on [optimizing datasource performance](https://support.seeq.com/latest/cloud/optimizing-a-datasource-connection.md) for general guidance.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Amazon RDS

JVM Agent

## Item Type Support

Signals SCALARS CONDITION

## Overview

The SQL Connector enables Seeq to access data from Amazon RDS Instances.

## Prerequisites

You must gather some information to configure a connection to your Amazon RDS Instance.

### Connecting to Amazon RDS Instances

When connecting to RDS Instances, you will most likely have to include a new certificate into the Java Keystore.

You will need to get the certificate from here: <https://s3.amazonaws.com/rds-downloads>. Download the pem file specific to your region/deployment. It has been observed that by default `rds-ca-2019-root.pem` works for all regions (documented here:<https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-download-ssl-certificate-for-managed-database>)

To add the certificate to cacerts you will use the following command in a command prompt **with administrator access** on the Seeq Remote Agent Machine.

    keytool -import -trustcacerts -file "c:\rds-ca-2019-root.pem" -alias mydomain -keystore "C:\Program Files\Seeq Server\jdk\files\lib\security\cacerts

## Configuration

The SQL connector supports connecting to the following RDS Instance types:

* Amazon Aurora with MySQL Compatibility - [MySQL](https://support.seeq.com/latest/cloud/mysql.md)

* Amazon Aurora with PostgreSQL Compatibility - [Postgres](https://support.seeq.com/latest/cloud/postgres.md)

* [MySQL](https://support.seeq.com/latest/cloud/mysql.md)

* [Postgres](https://support.seeq.com/latest/cloud/postgres.md)

* [Oracle](https://support.seeq.com/latest/cloud/oracle.md)

* [Microsoft SQL Server](https://support.seeq.com/latest/cloud/microsoft-sql-server.md)

## Known Issues

There are no known issues for the SQL Connector. Please report any issues you find to our [support portal](https://seeq.atlassian.net/servicedesk/customer/portal/3).

## Troubleshooting

A couple of errors that you may encounter are:

*String-valued samples are prohibited in numeric-valued signal*

If the y-axis value of the signal is a string, then the Value Unit Of Measure property is required and must be set to "string". See Example 2.

Since the Value Unit Of Measure is different for string and numeric signals, it may be easiest to write one query definition for the numeric signals and write another for the string signals. Alternatively, the Value Unit Of Measure property could be set according to an SQL IF statement similar to the technique used in Example 13.

*Samples must be ordered by their keys*

If this is occurring when trending near the daylight savings transition, this is an indication that the TimeZone is not configured properly. For example, if TimeZone is set to "America/Los_Angeles", this means that the timestamp data in the SQL table was recorded using "America/Los_Angeles" time (Pacific) which observes daylight savings. During the spring daylight savings transition, time skips from 01:59:59.9 to 03:00:00.0 which means that the 02:00 hour doesn't exist and therefore there should be no data in the SQL table during that 02:00 hour. Any data in the 02:00 hour is interpreted as being in the 03:00 hour. If there is also data in the 03:00 hour, the samples will be out of order.  

|-----------------------------------------------|-----------------------------------|
| Original data:                                | 01:15, 01:45, 02:15, 02:45, 03:15 |
| After accounting for non-existent 02:00 hour: | 01:15, 01:45, 03:15, 03:45, 03:15 |

If data exists in the 02:00 hour, it must mean it was either recorded in error or was recorded in a time zone that doesn't observe daylight savings such as UTC or a constant offset from UTC.

For more information, see the TimeZone field in the Configuration section above.

*Warning when Indexing with "TestQueriesDuringSync" enabled:*

`<Query Definition SQL> will fail to retrieve samples. Please correct the Query Definition. Error: net.sf.jsqlparser.JSQLParserException: Couldn't parse SQL statement <Query Definition SQL>`

*Error when retrieving data for SQL Connector Signals and Conditions:*

`Error: net.sf.jsqlparser.JSQLParserException: Couldn't parse SQL statement <Query Definition SQL>`

The warning and error above may have a common cause. These can occur when the SQL statements in a "QueryDefiniton" do not properly wrap identifiers that share a value with [JSql Parser Restricted Keywords](https://jsqlparser.github.io/JSqlParser/keywords.html) in double quotation marks. Refer to the Connector Rules \> General section of [Creating a Query Definition for the SQL Connector](https://support.seeq.com/latest/cloud/creating-a-query-definition-for-the-sql-connector.md) for details about this restriction and how to accommodate it in your queries.

If you are running into issues with connecting to or access data from SQL Connector, view our guide for [troubleshooting datasource issues](https://support.seeq.com/latest/cloud/troubleshooting-a-datasource-connection.md).

## Performance considerations

* Ensure you have indexes on columns that are used for filtering in a WHERE clause

* Ensure you are using timestamp types for your time columns vs having your timestamps as strings or the results of concatenations.

View our guide on [optimizing datasource performance](https://support.seeq.com/latest/cloud/optimizing-a-datasource-connection.md) for general guidance.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Amazon Redshift

JVM Agent

## Item Type Support

Signals SCALARS CONDITION

## Overview

The SQL Connector enables Seeq to access data from Redshift.

## Prerequisites

You must gather some information to configure a connection to your Redshift server.  
Version 100 + of the SQL v2 connector has the JDBC driver bundled. If you are on an older version you will need to follow the "Driver Installation" instructions below.
Driver Installation  

### Driver Installation

* Download the Amazon Redshift JDBC 4.2-compatible driver version 1.2.15.1025 from <https://s3.amazonaws.com/redshift-downloads/drivers/jdbc/1.2.15.1025/RedshiftJDBC42-1.2.15.1025.jar>. If that driver version no longer exists, download the newest JDBC 4.2-compatible driver from <https://docs.aws.amazon.com/redshift/latest/mgmt/configure-jdbc-connection.html> .

<!-- -->

* If the Seeq Remote Agent is running, stop the service.

* Copy the JDBC driver into the **plugins\\lib**folder within the Seeq Remote Agent data folder.

* Start the Seeq Service

If you forget to install the JDBC driver, the connection will fail and you will see errors in the **jvm-link** logs related to loading the jar file.

#### Hostname and Port

The hostname and port define how to connect to your Redshift server. The default port for Redshift is 5439, which can be different in your environment.

#### Authentication

The SQL Connection for Amazon Redshift supports user name and password authentication or [IAM authentication](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-iam-credentials-configure-jdbc-odbc.html). Determine the appropriate authentication mechanism for your service.

## Configuration

This is an example configuration template that is displayed in the *Additional Configuration* box that appears when you click *Configure* for an existing datasource (or if a new datasource is being created, in the *Create new datasource connection* modal that appears after clicking *Add Datasource*) on the Datasources administration page.

    {
        "Name" : "Amazon Redshift",
        "Type" : "REDSHIFT",
        "Location" : null,
        "Hostname" : "localhost",
        "Port" : 5439,
        "DatabaseName" : "dev",
        "Id" : "04eb30af-91dd-4d62-b503-64e955e4385f",
        "Username" : "master",
        "Password" : "SecretPa33word",
        "Enabled" : true,
        "UseWindowsAuth" : false,
        "InitialSql" : null,
        "TimeZone" : null,
        "PrintRows" : false,
        "UseRedshiftIamAuth" : false,
        "JdbcConnectionStringOverride": null
      }

### Standard SQL Additional Configuration

|        **Property Name**        | **Default Value** |                                 **Data Type**                                  |                                                                                                                                                                                                                                             **Description**                                                                                                                                                                                                                                              |
|---------------------------------|-------------------|--------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `QueryDefinitions`              | null              | Array\[QueryDefinition\]                                                       | A list of queries that Seeq will use to generate signals, conditions and scalars. See [SQL Query Definition Excerpt](https://support.seeq.com/latest/cloud/sql-query-definition-excerpt.md) for details.                                                                                                                                                                                                                                                                                                                         |
| `Hostname`                      | null              | String                                                                         | The hostname of your datasource. If your hostname is of the form `"abc\def"`, you will have to escape the backslash like so: `"abc\\def"`.                                                                                                                                                                                                                                                                                                                                                               |
| `QueryDefinitionExpansionLimit` | 1,000,000         | Integer                                                                        | The maximum number of signals that can be indexed from a single query definition. This value is here to protect against incorrect query definitions producing many millions of invalid signals.                                                                                                                                                                                                                                                                                                          |
| `Port`                          | 0                 | Integer                                                                        | The port for the JDBC Connection.                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `Database Name`                 | null              | String                                                                         | Optional: Can be defined here or as part of a fully qualified table name in the QueryDefinition.                                                                                                                                                                                                                                                                                                                                                                                                         |
| `Username`                      | ""                | String                                                                         | The user name                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `Password`                      | null              | String/[SecretFile](https://support.seeq.com/latest/cloud/storing-datasource-configuration-secrets.md) | The user password.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `JdbcConnectionStringOverride`  | null              | String                                                                         | Optional: Can be specified if you have a known, functioning JDBC connection string. If specified, `Hostname`, `Port` and `Database Name` need not be specified.                                                                                                                                                                                                                                                                                                                                          |
| `InitialSql`                    | null              | String                                                                         | Optional: A SQL command that would be run one upon establishing a connection.                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `TimeZone`                      | null              | String                                                                         | Optional: The time zone to use for timestamp or datetime columns. For example, to set this to US Pacific Time, you would use `America/Los_Angeles`.                                                                                                                                                                                                                                                                                                                                                      |
| `PrintRows`                     | false             | Boolean                                                                        | The rows from the SQL query will be printed to the jvm-link log. This is for debugging purposes only, and should be set to `false` in normal operation.                                                                                                                                                                                                                                                                                                                                                  |
| `UseWindowsAuth`                | false             | Boolean                                                                        | Note: This is not available for all Database Types. If you are using a database type that supports Windows Authenication, you will need to ensure that the remote agent is [running as the correct user](https://support.seeq.com/latest/cloud/installing-and-upgrading-a-seeq-remote-agent.md#Running-the-Seeq-Remote-Agent-as-a-Specific-User).                                                                                                                                                                                |
| `JdbcProperties`                | null              | Map\<String, String\>                                                          | A map of key value pairs that are configured as connection properties                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `MinimumIdleConnections`        | null              | Integer - {0,1}                                                                | Specifies the minimum number of idle connections to maintain in the connection pool. If not explicitly specified, it defaults to a database-specific value, typically 1. For Databricks, it defaults to 0 to prevent the cluster from being kept running but it can be changed to 1 if needed.                                                                                                                                                                                                           |
| `MaximumPoolSize`               | null              | Integer                                                                        | Specifies the maximum number of connections in the connection pool (both idle and in-use). If not specified, it defaults to 11.                                                                                                                                                                                                                                                                                                                                                                          |
| `ConnectionTimeoutMs`           | null              | Integer                                                                        | Specifies the connection timeout in milliseconds. This is the maximum time to wait for a connection from the pool. If not specified, it defaults to 30000 (30s).                                                                                                                                                                                                                                                                                                                                         |
| `IdleTimeoutMs`                 | null              | Integer                                                                        | Specifies the idle timeout in milliseconds. Connections idle for longer than this are removed from the pool. If not specified, it defaults to 600000 (10 minutes).                                                                                                                                                                                                                                                                                                                                       |
| `EnablePoolSharing`             | null              | Boolean                                                                        | Enables connection pool sharing across multiple datasource connections. When true, connections to the same database with identical connection parameters will share a single connection pool, reducing total database connections. Defaults to false (each connection maintains its own dedicated pool). Not supported for Generic Database configurations.                                                                                                                                              |
| `PropagateToPool`               | false             | Boolean                                                                        | When EnablePoolSharing is true, connections to the same database must have matching pool configuration parameters (password, timeouts, pool sizes, etc.). If a connection has different values, it will fail to connect and remain disconnected. Set this to true on one connection to propagate its configuration parameters to all other connections targeting the same database. This flag automatically resets to false after propagation occurs during connector initialization. Defaults to false. |

#### Time Zone

Some SQL date and/or time column types have no zone information. The TimeZone field is available to specify the time zone that Seeq should use for data coming from columns types that have no time zone information of their own. UTC offsets (+01:00, -10:30, etc.) and IANA regions (America/Los_Angeles) are accepted. If no time zone is specified, Seeq defaults to the local region of the Seeq server. If your data was stored in UTC time, set this field to "UTC" or "+00:00". If your data was entered using a "wall clock", set this to the IANA time region of the "wall clock". Note that offsets are constant throughout the year whereas a region may observe daylight savings time. If you used a wall clock in a location that observes daylight savings time, a region is a better choice than an offset for this field. A list of IANA regions (tz database time zones) can be found [here](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).

##### Extended Redshift Additional Configuration

|  **Property Name**   | **Default Value** | **Data Type** |                                                                              **Description**                                                                              |
|----------------------|-------------------|---------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `UseRedshiftIamAuth` | false             | Boolean       | If true, allows for IAM credentials to be used (<https://docs.aws.amazon.com/redshift/latest/mgmt/generating-iam-credentials-configure-jdbc-odbc.html> ) to authenticate. |

## Known Issues

There are no known issues for the SQL Connector. Please report any issues you find to our [support portal](https://seeq.atlassian.net/servicedesk/customer/portal/3).

## Troubleshooting

A couple of errors that you may encounter are:

*String-valued samples are prohibited in numeric-valued signal*

If the y-axis value of the signal is a string, then the Value Unit Of Measure property is required and must be set to "string". See Example 2.

Since the Value Unit Of Measure is different for string and numeric signals, it may be easiest to write one query definition for the numeric signals and write another for the string signals. Alternatively, the Value Unit Of Measure property could be set according to an SQL IF statement similar to the technique used in Example 13.

*Samples must be ordered by their keys*

If this is occurring when trending near the daylight savings transition, this is an indication that the TimeZone is not configured properly. For example, if TimeZone is set to "America/Los_Angeles", this means that the timestamp data in the SQL table was recorded using "America/Los_Angeles" time (Pacific) which observes daylight savings. During the spring daylight savings transition, time skips from 01:59:59.9 to 03:00:00.0 which means that the 02:00 hour doesn't exist and therefore there should be no data in the SQL table during that 02:00 hour. Any data in the 02:00 hour is interpreted as being in the 03:00 hour. If there is also data in the 03:00 hour, the samples will be out of order.  

|-----------------------------------------------|-----------------------------------|
| Original data:                                | 01:15, 01:45, 02:15, 02:45, 03:15 |
| After accounting for non-existent 02:00 hour: | 01:15, 01:45, 03:15, 03:45, 03:15 |

If data exists in the 02:00 hour, it must mean it was either recorded in error or was recorded in a time zone that doesn't observe daylight savings such as UTC or a constant offset from UTC.

For more information, see the TimeZone field in the Configuration section above.

*Warning when Indexing with "TestQueriesDuringSync" enabled:*

`<Query Definition SQL> will fail to retrieve samples. Please correct the Query Definition. Error: net.sf.jsqlparser.JSQLParserException: Couldn't parse SQL statement <Query Definition SQL>`

*Error when retrieving data for SQL Connector Signals and Conditions:*

`Error: net.sf.jsqlparser.JSQLParserException: Couldn't parse SQL statement <Query Definition SQL>`

The warning and error above may have a common cause. These can occur when the SQL statements in a "QueryDefiniton" do not properly wrap identifiers that share a value with [JSql Parser Restricted Keywords](https://jsqlparser.github.io/JSqlParser/keywords.html) in double quotation marks. Refer to the Connector Rules \> General section of [Creating a Query Definition for the SQL Connector](https://support.seeq.com/latest/cloud/creating-a-query-definition-for-the-sql-connector.md) for details about this restriction and how to accommodate it in your queries.

If you are running into issues with connecting to or access data from SQL Connector, view our guide for [troubleshooting datasource issues](https://support.seeq.com/latest/cloud/troubleshooting-a-datasource-connection.md).

## Performance considerations

* Ensure you have indexes on columns that are used for filtering in a WHERE clause

* Ensure you are using timestamp types for your time columns vs having your timestamps as strings or the results of concatenations.

View our guide on [optimizing datasource performance](https://support.seeq.com/latest/cloud/optimizing-a-datasource-connection.md) for general guidance.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Amazon Timestream for InfluxDB

JVM Agent

## Item Type Support

Signals Assets

## Overview

The InfluxDB V2 connector enables Seeq to access data from a Timestream for InfluxDB instance, translating measurements/tags/series into assets and signals in Seeq.

## Prerequisites

If you have not yet created a data model, we recommend you read the [Schema Recommendations](https://support.seeq.com/latest/cloud/understanding-the-influxdb-connector.md#Schema-Recommendations) section of [Understanding the InfluxDB Connector](https://support.seeq.com/latest/cloud/understanding-the-influxdb-connector.md).

1. Create a Timestream for InfluxDB database.

2. Ensure you add port 8086 to your security group as an incoming rule to allow connectivity to your database instance (<https://docs.aws.amazon.com/timestream/latest/developerguide/timestream-for-influx-getting-started-creating-db-instance.html>)

3. Create an account for Seeq to access Timestream and record the credentials

## Configuration

This is an example configuration template that is displayed in the *Additional Configuration* box that appears when you click *Configure* for an existing datasource (or if a new datasource is being created, in the *Create new datasource connection* modal that appears after clicking *Add Datasource* ) on the Datasources administration page.

### InfluxDB V2

    {
        "Url" : "http://localhost:8086",
        "Username" : "admin",
        "Password" : "admin",
        "Token" : null,
        "ConnectTimeoutInSeconds" : 30,
        "ReadTimeoutInSeconds" : 120,
        "CallTimeoutInSeconds" : 150,
        "Organizations" : [ ],
        "Simulation" : false,
        "IndexingSchemaQueryStart" : null,
        "IndexingSchemaQueryStop" : null,
        "IndexingSchemaDiscoverOnly" : false
    }

#### InfluxDB V2 Additional Configuration

|      **Property Name**       | **Default Value**  |     **Data Type**     |                                                                                                                                                                                                                              **Description**                                                                                                                                                                                                                               |
|------------------------------|--------------------|-----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `Url`                        | `localhost`        | String                | The URL of the InfluxDB v2 server you wish to connect to. If you are using InfluxDB Cloud, this is the root of the URL you will see in your browser address bar when using the web-based admin console (e.g.: `https://us-east-1-1.aws.cloud2.influxdata.com/`).                                                                                                                                                                                                           |
| `Username`                   | `admin`            | String                | NOT RECOMMENDED: This is the username of a user that has access to InfluxDB. It is strongly recommended that you commission an API Token and use that instead, as described here: <https://docs.influxdata.com/influxdb/cloud/security/tokens/create-token/>. You will place the token string in the `Token` field and ignore this field.                                                                                                                                  |
| `Password`                   | `admin`            | String/SecretFile     | NOT RECOMMENDED: The password of a user that has access to the database. It is recommended to [leverage a Secrets File](https://support.seeq.com/latest/cloud/storing-datasource-configuration-secrets.md) to store this information. It is strongly recommended that you commission an API Token and use that instead, as described here: <https://docs.influxdata.com/influxdb/cloud/security/tokens/create-token/>. You will place the token string in the `Token` field and ignore this field. |
| `Token`                      | null               | String/SecretFile     | The API Token used to access InfluxDB. Follow the instructions at <https://docs.influxdata.com/influxdb/cloud/security/tokens/create-token/> to generate your token. It is recommended to [leverage a Secrets File](https://support.seeq.com/latest/cloud/storing-datasource-configuration-secrets.md) to store this information. You can also authenticate via username / password, but it is not recommended.                                                                                    |
| `ConnectTimeoutInSeconds`    | 30                 | Integer               | The connect timeout is applied when connecting a TCP socket to the target host.                                                                                                                                                                                                                                                                                                                                                                                            |
| `ReadTimeoutInSeconds`       | 120                | Integer               | The read timeout is applied to both the TCP socket and for individual read IO operations including on Source of the Response.                                                                                                                                                                                                                                                                                                                                              |
| `CallTimeoutInSeconds`       | 150                | Integer               | The call timeout spans the entire call: resolving DNS, connecting, writing the request body, server processing, and reading the response body. If the call requires redirects or retries they must all be completed within one timeout period.                                                                                                                                                                                                                             |
| `Organizations`              | Empty List         | List of Organizations | Seeq will automatically fill in this property on the first connection. Afterward, you may modify the organization definition as specified in [Rearranging the Asset Tree](https://support.seeq.com/latest/cloud/influxdb.md#Rearranging-the-Asset-Tree).                                                                                                                                                                                                                                           |
| `Simulation`                 | `false`            | Boolean               | If you have a blank InfluxDB server and you're just experimenting, you can load simulated data into InfluxDB by changing this field to `true`, leave false otherwise.                                                                                                                                                                                                                                                                                                      |
| `IndexingSchemaQueryStart`   | null (30 days ago) | String                | InfluxDB v2 requires that a time period is included when querying for the set of measurements / tag keys / field keys that are present in a bucket. When this field is set to null, a default of 30 days ago is used. If you find that "old" measurements/tags/fields are not being indexed, considering setting this field to `"2016-01-01T00:00:00Z"` or whatever date makes sense for you.                                                                              |
| `IndexingSchemaQueryStop`    | null (now)         | String                | InfluxDB v2 requires that a time period is included when querying for the set of measurements / tag keys / field keys that are present in a bucket. When this field is set to null, a default of "now" is used.                                                                                                                                                                                                                                                            |
| `IndexingSchemaDiscoverOnly` | `false`            | Boolean               | If set to `true`, the indexing operation will not create an asset tree and associated signals in Seeq, it will just scan the InfluxDB server for Organizations, Buckets, Measurements and Tag Keys and add them to the configuration. You can then modify the configuration as you please and set this option back to `false` to re-enable full indexing.                                                                                                                  |

## Troubleshooting

### Simulation Issues

If you would like to run the simulator against your Timestream for InfluxDB database instance you will need the operator token. This can be retrieved by following the steps here: <https://docs.aws.amazon.com/timestream/latest/developerguide/timestream-for-influx-getting-started-operator-token.html>.

If you are running into other issues with connecting to or access data from InfluxDB, view our guide for [troubleshooting datasource issues](https://support.seeq.com/latest/cloud/troubleshooting-a-datasource-connection.md).

## Performance considerations

The InfluxDB connector does not have any special performance considerations. View our guide on [optimizing datasource performance](https://support.seeq.com/latest/cloud/optimizing-a-datasource-connection.md) for general guidance.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Amazon Timestream for LiveAnalytics

JVM Agent

## Item Type Support

Signals SCALARS CONDITION

## Overview

The AWS Timestream for Live Analytics connector enables Seeq to access data from [AWS Timestream for Live Analytics](https://aws.amazon.com/timestream/) via the [TimeStream Query API](https://docs.aws.amazon.com/timestream/latest/developerguide/API_Operations_Amazon_Timestream_Query.html).

## Prerequisites

You will need to create [Access Keys](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)for an IAM user that has read access to the Timestream tables of interest.

## Configuration

This is an example configuration template that is displayed in the *Additional Configuration* box that appears when you click *Configure* for an existing datasource (or if a new datasource is being created, in the *Create new datasource connection* modal that appears after clicking *Add Datasource*) on the Datasources administration page.
JSON

    {
        "RootAssetName": null,
        "GenerateTableAsset": true,
        "Tables": [
            {
                "Id": "4af550dc-1c83-4a0f-b2de-5e8a06345705",
                "Name": null,
                "NameQuery": null,
                "GroupBy": null,
                "GroupByLimit": 0,
                "DataColumns": null,
                "DataColumnQuery": null,
                "Database": null
            }
        ],
        "AccessKeyId": null,
        "SecretAccessKey": null,
        "Region": "us-east-1"
    }

### Google BigQuery Additional Configuration

|  **Property Name**   |     **Default Value**     |                                            **Data Type**                                            |                                                                                   **Description**                                                                                   |
|----------------------|---------------------------|-----------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `RootAssetName`      | null                      | String                                                                                              | This will be the name for the root asset of the Asset Tree that is created after indexing your table. If it is set to null it will be set to the name of the Datasource Connection. |
| `GenerateTableAsset` | true                      | Boolean                                                                                             | **unused**                                                                                                                                                                          |
| `Tables`             | An empty Table Definition | A List of TimeStreamTables                                                                          | The collection of table configurations which provide the necessary information to create signals in Seeq.                                                                           |
| `AccessKeyId`        | null                      | String                                                                                              | The IAM Access Key ID for the account that has read access to Timestream.                                                                                                           |
| `SecretAccessKey`    | null                      | String/[SecretFile](https://support.seeq.com/kb/R56/cloud/storing-datasource-configuration-secrets) | The IAM Access Key Secret for the account that has read access to Timestream.                                                                                                       |
| `Region`             | us-east-1                 | String                                                                                              | The AWS region that your Timestream database is hosted in.                                                                                                                          |

#### TimeStreamTable Configuration

| **Property Name** | **Default Value** |   **Data Type**   |                                                                                                                                                                                                                                                                                                                **Description**                                                                                                                                                                                                                                                                                                                 |
|-------------------|-------------------|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `Id`              | `<Enter ID>`      | String            | This is the unique ID for the table configuration itself. Note that changing the `Id`field will cause the relevant signals to be indexed under a different dataId in Seeq. You can use a GUID generator like <https://guidgenerator.com/> to create a new one for each definition.                                                                                                                                                                                                                                                                                                                                                             |
| `Name`            | null              | String            | This is the name of the Timestream table. At least `Name` or `NameQuery` must be defined within each SignalTableDefinition. It is possible to provide `Name`and `NameQuery` parameters at the same time. Duplicate table names are ignored.                                                                                                                                                                                                                                                                                                                                                                                                    |
| `NameQuery`       | null              | String            | This is a query that defines how to obtain a list of tables with identical schemas. This property can hold a query like `SHOW TABLES FROM connectordb LIKE 'dataset%'` which will pull all tables from the database called `connectordb` that start wtih `dataset`. At least `Name` or `NameQuery` must be defined within each SignalTableDefinition. It is possible to provide `Name`and `NameQuery` parameters at the same time. Duplicate table names are ignored.                                                                                                                                                                          |
| `GroupBy`         | Empty list        | A list of Strings | This is a list of columns that can be used to group signals into an asset hierarchy based on distinct column value combinations. The column name order is important - it is used to generate the asset hierarchy. Example: `"GroupBy" : [ "country", "region_name", "province_name" ]` parameter definition produces the following hierarchy: \<country\>\\\<region_name\>\\\<province_name\>. When `GroupBy` is provided - the associated signal collection is linked to the asset defined by the `GroupBy` leaf element. When `GroupBy` parameter is not provided, the signal collection is linked to the asset representing BigQuery table. |
| `GroupByLimit`    | 0                 | Integer           | A limit on the number of results (asset paths) that can be returned from the `GroupBy`. A `GroupByLimit` of 0 indicates no limit.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| `DataColumns`     | \[\]              | A list of Strings | The list of columns that contain data that should be synced to Seeq as signal values . Each listed column name creates a unique Seeq signal. By default, signal name is equal to data column name. For example: `"DataColumns" : [ "average_temperature_celsius" ].` At least `DataColumns` or `DataColumnQuery` parameter must be defined within each table configuration. It is possible to provide `DataColumns`and `DataColumnQuery` parameters at the same time. Duplicate column names are ignored.                                                                                                                                      |
| `DataColumnQuery` | null              | String            | User provided query which allows to obtain the list of columns within the same table which data fields used as Seeq signal's values. `DataColumnQuery` can contain the placeholders `%projectid%`, `%dataset%` and `%tablename%`, which will be replaced with actual values when querying the source system. For example: `"DataColumnQuery" : "SHOW MEASURES FROM %database%.%tablename% LIKE 'data%'"` At least `DataColumns` or `DataColumnQuery` parameter must be defined within each table configuration. It is possible to provide `DataColumns`and `DataColumnQuery` parameters at the same time. Duplicate column names are ignored.  |

## Known Issues

Please report any other issues you find to our [support portal](https://seeq.atlassian.net/servicedesk/customer/portal/3).

## Troubleshooting

If you are running into other issues with connecting to or access data from AWS Timestream, view our guide for [troubleshooting datasource issues](https://support.seeq.com/latest/cloud/troubleshooting-a-datasource-connection.md).

## Performance considerations

The AWS Timestream connector does not have any special performance considerations. View our guide on [optimizing datasource performance](https://support.seeq.com/latest/cloud/optimizing-a-datasource-connection.md) for general guidance.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Analyze Data

![image-20260122-204343.png](https://support.seeq.com/__attachments/a_81bd332753f453d382eca69e41c54e4226724f31271519c8e5e9ee4f35ce72eb/image-20260122-204343.png?cb=4ecf94f9f5be8cfb075ca40b99afee8b)

Use **Analyze Data** to load data (time-series and event data) and perform analysis as part of a workflow.

## When to use

* You want computed results (KPIs, comparisons, anomaly summaries) before responding.

* You want to prepare intermediate results that a report-writing node can use.

## Configuration

* **Instruction**: Describe the analysis question clearly, including:

  * What to measure

  * Time range(s) or comparison periods

  * Desired outputs (numbers, tables, bullet findings)

## Context behavior

This node supports Seeq context and typically uses the selected workbook/worksheet scope to find relevant items and context.

See: [Seeq contexts](../../build/seeq-contexts.md).

## Output

The output is usually a concise summary of results. Downstream nodes can use it as input for reporting or decision-making.

## Example instructions

* "Compare average throughput in March vs April and summarize the key drivers."

* "Identify the top 5 downtime events this week and compute total downtime hours."

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Applications

## Applications Overview

An Application in Seeq represents an integration identity used for secure programmatic access to Seeq APIs and SPy. When an application is created, Seeq automatically provisions a service principal associated to that application. This service principal acts as a unique identity, independent of any user, and is intended solely for automated or scripted interactions with Seeq.

### Applications vs Access Keys

Applications are the preferred mechanism for programmatic access to Seeq over [Access Keys](https://support.seeq.com/latest/cloud/working-with-access-keys.md). Access keys are tied to a specific user and inherit the identity and permissions of that user. In contrast, Applications delegate identity and access control to Seeq, decoupling API access from any individual user.

### Authentication model

Once an application is created, one or more API keys can be generated under that application. These API keys are used to authenticate to Seeq using the identity of the application's service principal. Unlike access keys, the identity of the user who created the application has no bearing on the authentication context. Thus, all API activity is attributed to the service principal

### Authorization model

Applications can be granted access to Seeq content (e.g. folders, Workbench workbooks, Organizer Topics, datasources, etc.) through the same permission model used for users and groups. See [Setting Permissions (Access Control)](https://support.seeq.com/latest/cloud/setting-permissions-access-control.md) and [Managing Datasource Permissions](https://support.seeq.com/latest/cloud/managing-datasource-permissions.md)

## Managing Applications

Applications can be managed on the "Applications" tab of the Administration page. This tab is only accessible to system Administrators or users with the User and Group Administration capability.  
![image-20260112-230832.png](https://support.seeq.com/__attachments/a_07eeb3afcf288b63989b313f17c1a6e2f7da2088e3ab3da2e60ebb67304651c3/image-20260112-230832.png?cb=a4ffbc55817c280280643752dd6d0d51)
Applications Tab

From this tab, you can add, remove, view or modify Applications. The table of Applications will display the following fields:  

| **Column Name**  |                                                                                                                          **Description**                                                                                                                          |
|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Application Name | The user provided name for the Application.                                                                                                                                                                                                                       |
| Description      | Not visible by default. This is a user provided description of the Application                                                                                                                                                                                    |
| Contact          | A Seeq User who is assigned as of the point of contact for an Application. The user's permissions do not affect the Application in any way and being assigned the owner of an Application does not grant any additional permissions for accessing or managing it. |
| Last Used        | The last time an API Key associated with the Application was used.                                                                                                                                                                                                |
| Edit Icon        | Clickable icon to display the Edit Application window. This will provide additional details of the Application as well.                                                                                                                                           |

### Add an Application

To add a new Application, click the + Add Application button in the top-right corner of the tab. This will display the Add Application window.  
![image-20260112-232833.png](https://support.seeq.com/__attachments/a_53b80d3ee883ed83ea5c3c86d8553bc4731fb19369215202034251cbadb51ec5/image-20260112-232833.png?cb=0e0313f99f48ebd3ab4830d96767b2eb)
Add Application

The Application Name field is required. This name must be unique among all Applications. A warning will be displayed and you will be prevented from creating a new application with a duplicate name.

The Contact field is optional. If left blank, you will be assigned as the contact for the created Application.

The Description field is optional. It can be used to record any additional useful information related to an Application.

### Remove an Application

To remove an Application, select it (and any additional Applications you wish to delete) by clicking its checkbox in the left most column then clicking the Remove Selected Application(s) button in the top-left corner of the Applications tab. A confirmation window will appear.  
![image-20260112-233505.png](https://support.seeq.com/__attachments/a_f29d03408ec9e25114fed3e645c5edfc106fd69ff995b405a3e4b88e309329ea/image-20260112-233505.png?cb=0f20a57a2fa1b774332cf0492a3ffb37)
Remove Application Confirmation

As noted in the confirmation prompt, removing an Application will also disable all API Keys associated with it.

### Modify an Application

To modify an application, click the Edit icon in its right most column in the table. The Edit Application window will be displayed.  
![image-20260112-235928.png](https://support.seeq.com/__attachments/a_3cf4ba31f3cf56baeb5731758244b01ae4a44a5a37cc6c9b8376c0900103e424/image-20260112-235928.png?cb=2c284ffa20df1e1d475c89bb33e9a02a)
Edit Application

In this window, you can modify the Name, Contact and Description that were set when the Application was created. Additionally, you can create and remove API Keys that will be associated with this application. A table will display the following details for each API Key:  

| **Column Name** |                                           **Description**                                           |
|-----------------|-----------------------------------------------------------------------------------------------------|
| Description     | A description of the API Key and its purpose                                                        |
| Expires         | The date on which the API Key will expire. API keys will expire at 00:00 UTC on the date displayed. |
| API Key         | The API Key with a copy to clipboard button for ease of use.                                        |
| Delete Icon     | Clicking this will delete the API Key.                                                              |

#### Adding an API Key

To add an API Key, click the + Add API Key button. This will display the Add API Key window.  
![image-20260113-002823.png](https://support.seeq.com/__attachments/a_4518a7ac4de9bc152176496193663c59bc09f88f743aa20b18a782cbd66adac8/image-20260113-002823.png?cb=ff7ef03ba4d9ca121e12197afc40ee37)
Add API Key

The Description and Expires fields are required. The Description should be a useful description for identifying the purpose or use of a specific API Key. Expires is a drop-down menu you can use to specify how long an API key will remain valid. Default duration options are 3 months, 6 months and 1 year. You may also choose to select a custom expiration date at which point a calendar will appear for selecting the date.

#### Removing an API Key

To remove an API Key, click the red Delete icon in the right most column of the API Keys table.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Applying Column Rules

## Overview

Creating new columns in a Scaling Table gives you more information to operate with, allowing you to perform more complex logic or create multivariate Formulas to get your desired output. New Columns (outputs) are built based on information from other columns (inputs) or can be simply Constants. There are many different Column Rules that require different inputs and produce different outputs, particularly different types, including Item, Text, Dates, Numbers, and Booleans. Most of the rules select an Item Type by default, but a few like Constant require the user to specify that parameter.

Fallback rules can also be applied to a column in the Column Rule Editor. The first Column Rule specified will be tried first. If that does not apply to all of your items, you can add as many rules as necessary to fill out all of the rows for that column. This is like an if-then structure. If Rule #1 can be applied it will, if not try Rule #2 and so on. These fallback rules can be created within each Configure Column modal.  
![image-20241211-221512.png](https://support.seeq.com/__attachments/a_1c4da823cee106641fa7b90dedb2bbf255a223be72d61319421e695ef0409a79/image-20241211-221512.png?cb=9acb446305cf19ca8077bc5e8ec48d7a)

You can use as many Fallback rules as you need to satisfy your use case, and can reorder them in the column editing modal:  
![image-20260202-220458.png](https://support.seeq.com/__attachments/a_efbdf941357c72e43d65e0d31aacb961d2a281b6463ab9ee9d898711eef4d1ca/image-20260202-220458.png?cb=9a17f844b296d9a55fc6ad64408149b4)

When certain rows of the Scaling Table are particularly unique, and they require a specialized item or formula rather than an additional fallback rule, manual overrides can be used instead. To manually override, double click on the cell. For Item columns, a search modal can be used to find a replacement, or a new formula can be written to create an item for that cell.  
![Screenshot 2026-06-26 at 1.13.41 PM.png](https://support.seeq.com/__attachments/a_471bfac048f252bf3889a4461f4805276e17162ad8ce10ca88d00d77a33bfa1b/Screenshot%202026-06-26%20at%201.13.41%E2%80%AFPM.png?cb=2e76af17c300458630edea7222f96b2a)

For Text and Numeric columns, double clicking on the cell creates a text editor. New values can be typed in, or copied from external sources or within the table and pasted into the table to apply the

value(s) as overrides.​ Selecting multiple cells and starting to type will apply the entered value across all selected cells, and drag and fill functionality is supported to apply one value to multiple cells.​Manual overrides can be deleted by clicking the green x on a single cell. To delete manually entered overrides from multiple cells at once, the delete key or right-clicking selected cells and choosing delete overrides will remove the override.  
![image-20260626-200745.png](https://support.seeq.com/__attachments/a_7412b57f61e3535c459e743a4042aec70efaa1512ec72711d5ebb2336c664a15/image-20260626-200745.png?cb=1f5deca1230f5d6890d416229f833ba5)

Continue reading for details on the different rule types and examples on how and when to use them.

### Calculate or Define Values

The "Calculate or Define Values" group of rules is used for creating new items, 1 per row in your table. Commonly, these are new Formulas, but can also be Scalars (trendable constant values) as well as Constants, which can be of any type, like Text or Number.

#### Formula Creator

Create a new column of calculated items at scale by using the Formula Creator rule. The same operators and syntax are available as can be found in Seeq Workbench.  
**Helpful Tip**

Try using the AI Assistant's Formula Agent to help write your formulas. Start with something simple like: "Calculate the monthly average of a signal." and go from there! If the AI Assistant doesn't yield the correct formula, access the Formula Documentation through the Workbench Tool for more information.  
![image-20251003-173338.png](https://support.seeq.com/__attachments/a_642d86431726bb1ecd7369f9b4b59a9b4cb8164e92c8a768e567e28605eb766b/image-20251003-173338.png?cb=9ed5bff784b9246c0a01b7f2413514da)

**Name:**name of all of the items (signals, conditions, or scalars) created by this rule

**Variables:**just as in Formula in Seeq workbench, reference the variable for the Item you'd like to reference. You can use the Create Variable List Parameter to add more options  
![image-20251003-173357.png](https://support.seeq.com/__attachments/a_a77bad1bd34faae20c08cd2490344ff255be908b331f215d31e877260e6a0853/image-20251003-173357.png?cb=c0b3a34b519290f16696bfc380031ae1)

**Formula:**write the formula using the same syntax as Formula in Seeq Workbench. All of the same operators are available

##### Constant

The Constant rule allows you to create a constant value for all of the rows of your Scaling Table. This rule requires you to specify the Column type. This rule allows allows for Conditional Logic. You can do a text lookup on another Text column, and the Constant will only apply to the rows that have an exact match. With the use of Fallback Rules, you can populate the column with different constants depending on the contents of other columns in that row.  
![image-20260730-152950.png](https://support.seeq.com/__attachments/a_f702809560a29c5263fbdb83a81e9c83a75fe55b0014b5afccda32b61a16429e/image-20260730-152950.png?cb=ec217034d7b68d3be1d9d9f45198d408)

**Constant:**input the value of that you would like to use as a constant

NOTE: Unlike many other rules, the Column Type has many options so you may need to change the default of Text to Number if that is more fitting for the constant value you are entering.

**Column input (optional):**The column you'd like to search to perform the conditional logic

**Operator (optional):** The match type to perform for the lookup value when referencing the column input

**Lookup Value (optional):**The value you are doing a direct search for of your Column input.

##### Scalar Creator

Create a new column of scalars by using the Scalar Creator rule. This is used to convert a Text Column into Scalar type so that the values/strings can be used in Formulas.  
![image-20251003-173510.png](https://support.seeq.com/__attachments/a_b1850dfbe55d6c26fce78c63b02c852f05a63638262423d4735af357877194d8/image-20251003-173510.png?cb=5a602fc0b11909f52e81d1cdc6091698)

**Name:**name of the items (scalars) created by this rule

**Column Input:**pick from the available Text Columns that you would like to make a scalar

**Description (optional):**Provide a description as an Item Property on the newly created scalars

**Show/Hide Potential Columns (under +Advanced):**a shortcut to create Text Columns from your existing Item columns. These new Text columns can then be made into scalars  
![image-20241206-230830.png](https://support.seeq.com/__attachments/a_9aff058bb2afed803e70c4b9c3ccaa882fe2689ebebbb15c0920c7e0b0afec8d/image-20241206-230830.png?cb=76ff7e50877d4f73468a0dd9a1a9c561)

#### Find Data

The "Find Data" group of column rules help to find information, like other Items or properties, based on other columns already in your table. These are most useful when navigating items up and down an asset hierarchy or extracting properties, like Name or Description, from existing items to be used in subsequent rules.

##### Item Search

The Item Search rule searches for an item based on provided properties. One or many properties can be used to search for an item. If an item is found with the specified property arguments, the rule will return its ID. If multiple or no items are found with the specified property arguments, the rule will return null.  
![image-20251003-153922.png](https://support.seeq.com/__attachments/a_f1b82ab042a6de01ee5b3b732e51982336908cd18869666be19766361efc14d2/image-20251003-153922.png?cb=90b8c3f8605501f7b41dbbe8dab24617)

**Property:** The item property on which to search.

**Operator:**The operator value to use when searching.

**Column:** The Text column to use as the input value. You can use the ++Show potential columns++ to create more Text columns through a shortcut.

**Item Types (optional):** Narrow the search by only searching for one specific type. Leaving this blank will search across many types.

**Scoped item search:**Will only search for items that are scoped to the current workbook. This is a good way to narrow the search results to ensure that the rule only finds one item.

##### Find Related

In an existing hierarchy, the Find Related rule allows you to pull in additional information from a specified column. This could be items related to your Source Level or a property on the items in that column.  
![image-20251002-225055.png](https://support.seeq.com/__attachments/a_66d7b424c5fb64ce409bd0cec89a3b97b1073aa5a88d43de854a27a70123a326/image-20251002-225055.png?cb=c54d42757d840e7a65a953a0a1964c99)

**Source Level:**Specify the column of items

**Descendant** (optional)**:** Optionally choose an item below the specified Source Level in your current Asset Tree. A pick list is provided. This is an alternate to the Descendant Shortcut.

**Add a property:**Extract a property of the Source Level Items like Name, Item Type, Path or a custom property.  
![image-20251003-152450.png](https://support.seeq.com/__attachments/a_8957bfd0f2fc7f339db2c20af17921ac1f5ea35f49b62bf0896092aa570bad8a/image-20251003-152450.png?cb=aed40cbe38ade557b1d35d58f5c38abc)

##### Find Descendant

In an existing hierarchy, the Descendant rule will return items below items below the specified search item in the structure. A descendant is defined as coming after the item of interest in a Path. As example, Temperature is a descendant, down one level, from Area A in the following path: Example \>\> Cooling Tower 1 \>\> Area A \>\> Temperature. This rule has more flexibility for your Descedant search instead of just an exact match.  
![image-20251002-225337.png](https://support.seeq.com/__attachments/a_be9145f1c427ea226417d673d2ea609b8c53b25aa8729865589ad4c391550fdc/image-20251002-225337.png?cb=9cb5ed1f02e313201d7c801c4d3251cf)

**Column Input:**pick from the available Item columns you'd like to retrieve the descendants from.

**Property:**filter the search by any property on the items by clicking the dropdown or typing in the name of a Custom Property

**Operator:** the type of search you'd like to perform. Options are provided like contains, exact Match, regular expression (<https://regex101.com/> ) searches, etc.

**Value:**The property value that you are searching for

**Item Type (optional):** used to refine the search by specifying that the descendant item needs to be of a specific type.

##### Find Property

The Item Property rule will retrieve a property from an item. This could be one of the default Seeq Item Properties like Name, or custom properties created by the user or from a datasource. This is an alternate to the Create Property Column shortcut.

![image-20251003-153619.png](https://support.seeq.com/__attachments/a_1e325343f7fa548c6d6bf23663084f9f2e43ef296969dbf7e2b58d4a4ec510fa/image-20251003-153619.png?cb=8970bed025617746d4aa146abddbcd46)  
**Column type:**this input is required for this rule selection

**Column input:**pick from the available Item columns you'd like to retrieve the path

**Property:**specify the property you'd like to return as an output. Name, Description, Datasource ID, and Datasource Name are available through the dropdown. You can also click and start typing any other property that exists on your items.

##### Path

The Path rule will return the path to the specified item in its hierarchy. This is similar to the Path options in Workbench (in Labels \& the Details Pane).  
![image-20251003-171553.png](https://support.seeq.com/__attachments/a_7cd8862b6fd40790519d452b30a51d663f60a2c501349e1b16da0c16212a43e0/image-20251003-171553.png?cb=48e88ee794a5b33d3811bcb199b8b671)

**Column Input:**pick from the available Item columns you'd like to retrieve the path

**Full path:**If checked, this will return the full path. If not, you can specify the level you'd like to return (direct ancestor, 2 levels above, etc.)

**Level:**specify how which level of the hierarchy that you'd like to show in your column

**Separator (optional)** : specify the character that you'd like to use as the separator between levels. For example `>>` in `Example >> Cooling Tower 1 >> Area`

##### Context Condition

If there has been context (labels, reason codes, etc.) added in Vantage, this rule can extract that information from a column of conditions.  
![image-20251002-224743.png](https://support.seeq.com/__attachments/a_788dc2a9ef123b07373c079f321c9343dc563d07164db60ad896b8bbb1b86096/image-20251002-224743.png?cb=e1ab809c934442674f8bd2bf8a9f36e5)  
**Column input:**Specify the column of conditions from which you'd like to get the Vantage context.

#### Find or Change Text

The "Find or Change Text" section of rules is useful for manipulating text columns, generally used in an effort to rename created items to more descriptive or unique names, as well as assigning properties. It's also useful for creating a unique column that can then be subsequently used for the Data Pane navigation feature.

##### Concatenate

Concatenates two or more text columns in order.  
![image-20251003-174217.png](https://support.seeq.com/__attachments/a_123e720e5e0fcc7bf8a3ad9fbcdc1ff28bedf0773c79e3656886c93dd1c1f201/image-20251003-174217.png?cb=734ac1c1ba759f5efe666ca3f3cca066)

**Column inputs:**pick from the available Text Columns that you would like to merge. The order you select them will be the order they will be concatenated.

**Separator (optional):**provide characters to separate the text being concatenated (spaces, hyphens, etc)

**Prefix (optional):**provide characters to be added at the beginning of the new Text column entries

**Suffix (optional):**provide characters to be added at the end of the new Text column entries

##### Text Extractor

Extract a value from the selected Text column that matches a provided regular expression.  
![image-20251003-174341.png](https://support.seeq.com/__attachments/a_c123dae01ca35da27f8c30b191f03eec35e714b859133ad11c16fc3beae77078/image-20251003-174341.png?cb=07d4a70862dc5dcd760f612839a7e819)

**Column Input:** The Text column that the resulting value will be extracted from

**Regular Expression:** Text input taking a regular expression (<https://regex101.com/>) to identify what text to extract. Inputting standard text will look for an exact match (case sensitive) in the Column Input to extract.

##### Text Replacement

Replaces any text matching a regular expression with the text value of a selected replacement  
![image-20251003-174439.png](https://support.seeq.com/__attachments/a_b7e7300f91e88811c3d09e2c7316d0711a2a572b13ad03d2c3dab1be829d0b04/image-20251003-174439.png?cb=5e1dc1566fc04a66b51adaeb3ca7aee4)

**Text Column to Modify**: The Text column that contains the value where the replacement will occur

**Regular Expression:** Text input taking a regular expression(<https://regex101.com/> ) to identify what text to replace. Inputing standard text will look for an exact match (case sensitive) in the Text Column to Modify for replacement.

**Column To Use as Replacement (Optional):** Column that contains the replacement value.

**Replacement Text (Optional):** The replacement value to use for all rows  
Either **Column To Use as Replacement** or **Replacement Text**must have a value

**Remove Non-Matching Text:**

**Selected**: if there is no match found in the Text Column to Modify, then no result will be returned

**Not selected:** if there is no match found in the Text Column to Modify, then the original value of the Text Column to modify will be returned

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# AspenTech APRM

.NET Agent

## Item Type Support

CONDITIONs Assets

## Overview

The APRM Connector allows Seeq access data from AspenTech's Production Record Manager (APRM), an event and batch process datasource. APRM's DataSources and Areas are indexed as Seeq assets in an asset tree and APRM Batches and Sub-Batches are indexed as conditions.

## Prerequisites

You must have the REST API configured for APRM access.

## Configuration

This is an example configuration template that is displayed in the *Additional Configuration* box that appears when you click *Configure* for an existing datasource (or if a new datasource is being created, in the *Create new datasource connection* modal that appears after clicking *Add Datasource*) on the Datasources administration page.
JSON

    {
          "HostName": "<Your APRM server address>",
          "Port": null,
          "Username": "<Your APRM Username>",
          "Password": "<Your APRM Password>",
          "ConditionMaxDuration": "2h",
          "ServerProtocol": "https",
          "VerboseLogging": false,
          "BatchCharacteristicsQueryBatchSize": 100000,
          "BatchCharacteristicsQueryExpandDuration": "1 sec"
    } 

### APRM Additional Configuration Field Information

|             **Property Name**             |         **Default Value**         | **Data Type** |                                                                                                                                                                                                                                                                                                                                                            **Description**                                                                                                                                                                                                                                                                                                                                                             |
|-------------------------------------------|-----------------------------------|---------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `HostName`                                | A help text that must be replaced | String        | The hostname for the server hosting your APRM instance. It may be an IP address or something like `sub-domain.domain.tld`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `Port`                                    | `null`                            | Integer       | The port on which your APRM instance is configured to communicate on. For `http` connections, the default is `80` for `https` connections, the default is `443`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `Username`                                | A help text that must be replaced | String        | The username to access the APRM instance.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| `Password`                                | A help text that must be replaced | String        | The password to access the APRM instance.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| `ConditionMaxDuration`                    | `2h`                              | String        | The largest duration that a capsule in this condition series can be.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `ServerProtocol`                          | `https`                           | String        | The protocol to be used to communicate with the APRM server. In addition to the default, `http` is also supported.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `VerboseLogging`                          | `false`                           | Boolean       | A flag that determines whether additional logging should be made. This flag should be set to `true` if you encounter any issues as it could allow for valuable troubleshooting information to be logged.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `BatchCharacteristicsQueryBatchSize`      | `100,000`                         | Integer       | This field determines how many rows the APRM connector requests from your APRM instance for each call. You can lower the value if you observe memory or processor pressures on your APRM instances. Increasing this value (if your APRM instance has the headroom for it) should lower indexing and data retrieval times.                                                                                                                                                                                                                                                                                                                                                                                                              |
| `BatchCharacteristicsQueryExpandDuration` | `1 sec`                           | String        | The duration to expand the end of a query by to ensure that all relevant batches are retrieved.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `CapsuleIdProperty`                       | `null`                            | String        | The name of a capsule property that uniquely identifies each capsule (e.g., Alarm Id, Batch Id, Unique Id, etc.). If specified, this value must exactly match the name of an existing capsule property that contains a stable identifier of the capsule. This allows Seeq to recognize capsules as the same logical event even if their start/end times or other properties change over time. **Why Use Persistent Capsule IDs?** By default, any change to a capsule---such as its start time, end time, or properties---will cause it to be treated as a distinct capsule, even if it represents the same logical event, such as an alarm or batch. This behavior can disrupt user workflows that rely on stable capsule references. |

## Known Issues

Some APRM instances have limited time-resolution support, meaning that a batch or sub-batch with a `START TIME` of `2020-01-01T12:00:00.500Z` may be retrieved for the following query `START TIME >= 2020-01-01T12:00:00.600Z`. If you observe such on your APRM instance, you can adjust the `BatchCharacteristicsQueryExpandDuration` configuration parameter to address the issue.

Please report any other issues you encounter to our [support portal](https://seeq.atlassian.net/servicedesk/customer/portal/3).

## Troubleshooting

If you are having trouble connecting to or accessing data from APRM, view our guide for [++troubleshooting datasource issues++](https://support.seeq.com/latest/cloud/troubleshooting-a-datasource-connection.md).

## Performance Considerations

View our guide on [optimizing datasource performance](https://support.seeq.com/latest/cloud/optimizing-a-datasource-connection.md) for general guidance.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# AspenTech IP.21

.NET Agent

## Item Type Support

Signals

## Overview

The IP.21 connector enables Seeq to access data from [AspenTech](https://www.aspentech.com/en/products/dataworks/aspen-infoplus21)IP.21 via AspenTech's SQLplus query language.

## Prerequisites

The Windows installation where the connector resides must have its regional format set to English (US).

## Configuration

This is an example configuration template that is displayed in the *Additional Configuration* box that appears when you click *Configure* for an existing datasource (or if a new datasource is being created, in the *Create new datasource connection* modal that appears after clicking *Add Datasource*) on the Datasources administration page.

    {
        "HostName": "localhost",
        "Port": 10014,
        "Username": null,
        "Password": null,
        "HistorianQualityFilter": null,
    }

### IP.21 Additional Configuration

|    **Property Name**     | **Default Value** |                                 **Data Type**                                  |                                                                                                                                                                                                                                                      **Description**                                                                                                                                                                                                                                                      |
|--------------------------|-------------------|--------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `Hostname`               | `localhost`       | String                                                                         | This is the name or IP address of the IP.21 server you are connecting to.                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `Port`                   | 10014             | String                                                                         | This is the port of the IP.21 server. This only needs to be changed if you know that your IP.21 server is running on a different port.                                                                                                                                                                                                                                                                                                                                                                                    |
| `UserName`               | null              | String                                                                         | NOT RECOMMENDED: This is the user name of a user that has access to the database. Username/password authentication is only supported when the QueryMethod is `ado`. It is recommended to use Windows Authentication / ActiveDirectory to authenticate instead by [configuring a particular account for the Windows Service](https://support.seeq.com/R58/on-premise/secure-configuration-options-ssl-tls.md).                                                                                                                                     |
| `Password`               | null              | String/[SecretFile](https://support.seeq.com/latest/cloud/storing-datasource-configuration-secrets.md) | NOT RECOMMENDED: This is the password of a user that has access to the database. Username/password authentication is only supported when the QueryMethod is `ado`. It is recommended to [leverage a Secrets File](https://support.seeq.com/latest/cloud/storing-datasource-configuration-secrets.md) to store this information. It is recommended to use Windows Authentication / ActiveDirectory to authenticate instead by [configuring a particular account for the Windows Service](https://support.seeq.com/R58/on-premise/secure-configuration-options-ssl-tls.md). |
| `HistorianQualityFilter` | null              | String                                                                         | This is the list of quality values that should be interpreted as invalid (such that they do not appear as good data in Seeq, and cause a break in interpolation). Multiple invalid quality values can be specified by separating them by the pipe character (`|`). For example, setting this value to `Bad|Offline` will mark the samples with a quality of *Bad* or *Offline* as invalid. (This matches the **IP_TREND_QLEVEL** field in IP21).                                                                          |
| `ExcludeBadSamples`      | false             | Boolean                                                                        | If the connector should ignore `Bad` samples rather than treating them as invalid.                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `RESTServerHostName`     | null              | String                                                                         | This is the host name or IP Address of the REST server. Only configure this parameter if the REST Server is on a different host from the IP21 Server.                                                                                                                                                                                                                                                                                                                                                                     |
| `RESTServerPort`         | null              | Integer                                                                        | This is the port on which the REST server is running. This should be specified if the REST server is running on a non-standard HTTP port i.e. 80, 8080 or 443.                                                                                                                                                                                                                                                                                                                                                            |
| `RESTServerProtocol`     | null              | String                                                                         | This indicates what protocol the REST server requests are made with. If null, the default is `https`                                                                                                                                                                                                                                                                                                                                                                                                                      |

## Advanced Configuration

These configuration options are not accessible through the **Administration UI** and can only be changed by manually editing `data\configuration\link\AspenTech IP21 Connector.json` on the remote agent host.  

|                                                                                     **Property Name**                                                                                      | **Default Value** | **Data Type** |                                                                                                                                                                                                                                                                        **Description**                                                                                                                                                                                                                                                                        |
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------|---------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `QueryMethod` Refer to the [Performance considerations](https://support.seeq.com/latest/cloud/aspentech-ip21.md#Performance-considerations) section for an overview of the performance aspects of these method(s). | `ado`             | String        | Specify one of the following value: * `ado`: ADO.NET-based querying (default). Minimal dependencies but sensitive to network latency. * `sqlplusx`: Uses the `sqlplusx.exe` command line utility to make query. **NOTE:**This utility is available natively if the remote agent is installed directly on the IP21 server. Else the SQLPlus client must be installed on the machine that is running the connector. <!-- --> * `rest`: (if applicable) Uses REST API for querying, suitable for newer setups or installations. (Requires **IP.21 REST** server) |
| `QueryTimeoutInSeconds`                                                                                                                                                                    | `900`             | Integer       | The maximum duration a query can execute before being terminated. This helps prevent long-running queries from overloading the system.                                                                                                                                                                                                                                                                                                                                                                                                                        |

## Known Issues

There are no known issues for the IP.21 connector. Please report any issues you find to our [support portal](https://seeq.atlassian.net/servicedesk/customer/portal/3).

## Troubleshooting

### "Memory Full" Exceptions

"Memory Full" exception may occur either during indexing or during data requests, and the solution may differ depending on which operation triggers the exception.

#### For any "Memory Full" exception

Check the values of the `SETCIMSQLMAX` and `SETCIMSQLMEM` settings on each IP.21 *server* for any connections that are exhibiting this exception. A setting of 200,000,000 for both of these parameters has been observed to allow queries to succeed that had previously failed when the parameters were set to 25,000,000. You should contact AspenTech support for assistance setting these parameters for each IP21 server exhibiting the issue if you are not familiar with the settings.

##### "Memory Full" Exceptions During Indexing

During indexing, an adaptive algorithm adjusts the MAX_ROWS for SELECT queries to IP21 to try to maintain a 10-second response time for each request. On occasion, this causes the batch size to be too large for IP21 to process. In such a case, the `MaxIndexingPageSize` may be changed from `null` (meaning no hard limit) to a positive integer, so that the `MAX_ROWS` for the indexing queries will never exceed `MaxIndexingPageSize` . If not encountering "Memory Full" exceptions *during indexing* , this parameter should be left `null`.

###### "Memory Full" Exceptions Resulting From Data Requests

On occasion, very large queries can exceed the per-query memory allocation that the IP.21 server can support. In this case, you will see a `Memory Full Exception` error being raised both in the **log/net-link/net-link.log** file and in Seeq Workbench for a particular signal:  
![image-20220128-194114.png](https://support.seeq.com/__attachments/a_3ea86247626b5d30db10a1e0cfab90bff15f314540bf1a8d091e05cfd64e06b3/image-20220128-194114.png?cb=a1281c5524bbc06474be5213c2c8b12e)

It is possible to limit the `MAX_ROWS` for data requests by specifying the `Max Results per Request` parameter. Please note that this parameter does not have any effect for the `ado` QueryMethod. See *Performance Considerations* below for an explanation of why it is preferred to avoid use of the `ado` query method when possible. Note that setting `Max Results Per Request` too low can cause excessive queries to the connector, so the highest value that avoids "Memory Full" exceptions should be preferred. A value in the `200000` to `500000` range is a good first choice, since the default set by the Seeq server configuration is \~1M.

##### Troubleshooting Other Issues

It is very helpful to have the AspenTech IP21 SQLplus utility installed on the machine that is hosting the Seeq agent making the connection to IP21 (in most cases, that's the Remote Agent machine). This allows you to test the connection from the machine to the IP21 server and troubleshoot any queries that appear to be slow. You can see what queries the Seeq IP21 connector is using by viewing the logs for the NET Agent that is hosting the connection (see [Getting Support](https://support.seeq.com/latest/cloud/getting-support.md) for instructions on accessing the logs).

You can emulate the exact method that Seeq is using by invoking the `sqlplusx` utility on the Windows Command Prompt. Here's an example -- you'll need to replace the hostname and query appropriately:

    "C:\Program Files (x86)\AspenTech\InfoPlus.21\db21\code\sqlplusx.exe" /h=myip21server "SELECT PE_DESCRIPTION FROM IP_TagsBranch"

Note that you may need to launch the Windows Command Prompt as a particular Windows user account that has access to IP21.

If the `sqlplusx` utility is having trouble executing queries, then the Seeq IP21 Connector will likely also have similar problems.  
After installing the AspenTech SQLplus utility, make sure to reboot the machine to ensure installation finishes successfully.

If you are running into other issues with connecting to or access data from IP.21, view our guide for [troubleshooting datasource issues](https://support.seeq.com/latest/cloud/troubleshooting-a-datasource-connection.md).

## Performance considerations

By default, the IP.21 Connector uses the AspenTech Web Page ADO.NET interface library to retrieve data. The ADO.NET library's data transfer performance is significantly affected by network latency between the Seeq Server and IP.21 server(s). Any latency over 1ms may result in unacceptable data retrieval performance. A "ping" test from the Seeq Server to an IP.21 server will report the latency in milliseconds.

**If you experience poor data retrieval performance, it is recommended that you take the following steps:**

* Install **AspenTech SQLplus** wherever the Seeq IP.21 Connector is running (either on the Seeq Server itself or Remote Agents).

* In the **AspenTech IP.21 Connector.json** configuration file, change the **QueryMethod** parameter like so:

      "QueryMethod": "sqlplusx"

When using the **sqlplusx** QueryMethod, you must use Windows Authentication (ActiveDirectory) as the authentication method. (**Username** and **Password** in the configuration file will be ignored.) In other words, you must configure the Windows Service account that is running Seeq with appropriate credentials that allow access to your IP.21 server.

Make sure TCP is allowed on port 10014 from the Remote Agent to the IP.21 server since this is the port and protocol SQLplus will use (It can be changed when you launch Aspen SQLplus, but it's recommended to use the default port 10014).

**Performance Issues with SQLPlus**

If performance troubles persist after switching to querying with SQLPlus, it can be helpful to determine if the performance problem lies with Seeq or the IP.21 installation. On the machine that has the IP.21 connector enabled, find Seeq's data directory and open the **log/net-link/net-link.log** file. Search for IP.21 and note any SQLplus queries that look to be particularly slow (e.g. returning only a few rows in several seconds). You can then copy the query statement that was slow into the clipboard, open the SQLplus client on the same machine, and execute it. If the query is still slow then the problem lies with IP.21 and can be investigated directly.

View our guide on [optimizing datasource performance](https://support.seeq.com/latest/cloud/optimizing-a-datasource-connection.md) for general guidance.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Asset Framework Data Reference Plugin

The Asset Framework Data Reference Plugin has been deprecated and will no longer be available in Seeq versions released on or after July 2025.

To export Seeq data to the PI historian, refer to [Exporting Signals and Conditions to PI](https://support.seeq.com/latest/cloud/exporting-signals-and-conditions-to-osisoft-pi.md).

## Introduction

The Seeq AF Data Reference plugin is a licensed component and its use must be enabled by the Seeq Server license file. Contact your Seeq customer success manager to ensure that your license file allows its use.

When accessing Seeq data and calculations from AF, the Data Reference queries Seeq to get the values. (Data is ++not++ copied into the PI archive. If you wish to do that, take a look at [Export Signals and Conditions to Historian](https://support.seeq.com/latest/cloud/exporting-signals-and-conditions-to-osisoft-pi.md).) Attributes must be configured within PI System Explorer with the details of the signals to be accessed in Seeq. Whenever AF requires data from that attribute, the Data Reference makes the appropriate calls to Seeq to return the data. Attributes generated this way can be displayed in any visualization software that supports AF, such as PI Vision or ProcessBook. Signals and calculated signals are converted to PI-compatible time series. Seeq Conditions are exported as a time series of zeros and ones, where zero represents the absence of a condition and one represents its presence.

### Security Considerations

For Seeq SaaS:

Due to security requirements, there is ***no way*** to use TLS 1.0 or 1.1 with Seeq SaaS. Therefore any PI Vision servers or other AF clients using the data reference must ensure TLS 1.2 or higher is used. This can be achieved by editing the registry and restarting the application. For PI Vision, this means navigating to the site in IIS and restarting the site via Restart or Stop, then Start, in the right-click context menu. Details of setting registry keys to control security protocols can be found in Microsoft article: <https://docs.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings> . It is important that TLS 1.0 and TLS 1.1 be explicitly disabled for the client role. After performing the registry edits, the keys for TLS 1.0, 1.1, and 1.2 should appear as shown below. Note that the Enabled DWORD should have its value set to 1 for TLS 1.2 and 0 for TLS 1.0 and 1.1.  
For non-SaaS:

the configuration parameter `Network/Http/DeprecatedTLS/Enabled` must be overridden to `true` to enable the Data Reference to connect to Seeq from PI Vision. This will allow connections via TLS 1.0 and 1.1, which the nginx proxy does not allow by default. The setting must be changed via the Seeq Command Prompt on the Seeq Server host using the command

`seeq config set Network/Http/DeprecatedTLS/Enabled true`

Additionally, the Seeq Server must be restarted after this configuration change is made.

If you can only see data from Attributes using the Data Reference when logged into the PI Vision host, or if non-AF-Admin users cannot see the data in PI Vision at all, you may need to add a setting in IIS Manager on the PI Vision host. To add the setting in IIS Manager, navigate to the PI Vision site, then open Application Settings, right click in the table, and choose `Add...` as shown below. The setting name should be `CustomDataReferenceSecurity`, and its value should be set to `System`.  
![image-20210210-155005.png](https://support.seeq.com/__attachments/a_c805858abc5c86efcefd6e18e89758e9d6b4422b98277c9888eb533fe3575259/image-20210210-155005.png?cb=988d5b737f58e9f8187392cafb9f38e0)

## Setting up the Data Reference

The Seeq AF Data Reference is written as an AF plugin, using the OSIsoft AF extensibility interfaces.

There are three ways of installing and managing the Seeq AF Data Reference plugin.  
You must perform these instructions for each AF Server that you wish to use the Seeq AF Data Reference plugin with.

### Installing via the Seeq AF Connector

The preferred method of installation and management is to allow the OSIsoft AF Connector to handle installation and upgrade.  
The Windows account that is used for the Seeq Server Windows Service **must have read/write permissions on the top-level "Server" object**within the OSIsoft AF Server in order to install and manage plugins.  
If running more than one Seeq server (for example, when a development/production pair is in use), please note that the data reference will be registered upon indexing for any AF server for which the `RegisterSeeqDataReference` configuration parameter is set to true. This could lead to the data reference's version changing to a version that is incompatible with the server for which it is configured.

1. As a Seeq Admin, navigate to the Datasources tab on the Administration page.

2. Locate the AF connector to which you would like to add the AF data reference.\\

3. Set the `RegisterSeeqDataReference` to `true`

The AF Connector will attempt to register the Seeq AF Data Reference with that AF Server when you save the JSON file. This method will also ensure that any new version of the Seeq AF Data Reference is installed when Seeq is upgraded.

#### Troubleshooting

The AF Connector will log the installation/upgrade activity for the Seeq AF Data Reference to the `net-link.log` file where the AF Connector is running. (See [the Viewing Logs section in Datasource troubleshooting](https://support.seeq.com/latest/cloud/troubleshooting-a-datasource-connection.md) for more information on accessing logs.) If there is an error, the following text will appear in the logs:

    Exception encountered registering/unregistering Seeq Data Reference

### Installing from the Seeq Command Prompt

If it is not acceptable to run Seeq with the appropriate permissions to register the plugin, the Seeq AF Data Reference can be installed from the Seeq Command Prompt. This should be performed on the machine where the AF Connector runs. This is a one-off installation and will need to be repeated when Seeq Server is upgraded.

You must be logged into the machine as a user with the appropriate permissions, and run the Seeq Command Prompt from the start menu.  
You can also right click the Seeq Command Prompt and choose "Run As" to launch the command prompt as the appropriate user.

Execute the following command to perform the installation:

    seeq afdr install

You can uninstall the plugin if necessary with this command:

    seeq afdr uninstall

The above commands will install the Seeq AF Data Reference on the default AF Server. A non-default AF Server may be specified by adding the `--pi-system` flag (abbreviated to `-p`):
reStructuredText

    seeq afdr install -p myAFserver

### Manual installation

Should the above methods not be suitable, a manual installation is provided as a fallback. This uses the OSIsoft-supplied `regplugin64` utility.

1. Copy the files from `C:\Program Files\Seeq Server\net-link\image\x64\af-data-reference` into a folder on the AF Server.

2. Start a Windows command prompt in that folder with an account that has permission to register a plugin.

3. Locate the `RegPlugIn64.exe` executable. (It will normally be found in `C:\Program Files\PIPC\AF`.)

4. Execute the command:

       "C:\Program Files\PIPC\AF\RegPlugIn64.exe" /f Seeq.Link.DataReference.AF.dll /owner:Seeq.Link.DataReference.AF.dll Seeq.SDK.dll RestSharp.dll Newtonsoft.Json.dll

If you are installing a new version please remove the old version with the following command before installing the new plugins (step 4).

    "C:\Program Files\PIPC\AF\RegPlugIn64.exe" /u /f Seeq.Link.DataReference.AF.dll Seeq.SDK.dll RestSharp.dll Newtonsoft.Json.dll

### After installation

AF applications load plugins on start-up, so they need to be restarted after the installation of the Seeq Data-reference, or after a newer version is installed. Pi-vision and AF Analytics run as services. These services need to be restarted.

For **PI Vision**, you must restart the associated Internet Information Server (IIS) service.

For **AF Analytics** ,restart the AF Analysis Service:  
![image-20231011-145615.png](https://support.seeq.com/__attachments/a_e227a2b623e40b1579883950f414b60f2c879d4e9086df666ca0a81a2d0d6cb2/image-20231011-145615.png?cb=4229611e96fa136652821847964472ef)

If plugin verification is enabled on the AF Server at the `RequireSignedTrustedProvider` level then `afdiag /TrustedProviderAdd:"Seeq Corporation"` (case sensitive) will need to be executed on the AF server or `Failed to load 'Seeq' PlugIn: Attempting to load an assembly with an invalid signature.` will be seen when attempting to load data via the plugin.

## Configuring the Data Reference

Once the Seeq AF Data Reference has been installed, AF Attributes can be configured using PI System Explorer to access Signals, Calculations, and Conditions from Seeq. The AF Data Reference will appear in the list of available Data References, as shown below:  
![image-20231011-145642.png](https://support.seeq.com/__attachments/a_c7f1023314998ef399a590fa95d13e9793244c7bc95c8e5c8a65cc126efcdf87/image-20231011-145642.png?cb=cf9e2101d15c0aa8f091e9548ce85302)

Once the type of Data Reference is chosen it may be configured. Before any access to Seeq data is possible the Data Reference must have the name, port number, and login details of the Seeq Server configured. This is a one-time activity. The configuration data is stored in the AF Configuration Database and is shared by all Seeq-based AF Attributes on the System. This initial configuration of the Seeq Server details must be carried out by a user with the permissions to write to the AF Configuration Database.

The main configuration dialog box is shown below. It is displayed when a user clicks the "Settings..." button after the "Seeq" Data Reference has been selected in PI System Explorer.

The Seeq Server settings can be configured from "Configure server" on the "Configure" menu as shown below  
![image-20231011-145704.png](https://support.seeq.com/__attachments/a_315869c4b260e9317f50e669a4d15e769c97d57aa874f93470e987e222bd4f0a/image-20231011-145704.png?cb=c7ee47594e4f4bfbec4e802e80154c0f)

The server setting form is shown below:

![image-20231011-145719.png](https://support.seeq.com/__attachments/a_f519a82732a2d3b6b7bdfa4e4cd47790d918fef8138ccff432f566c832435f67/image-20231011-145719.png?cb=7db3ae3cca1e7942370fe1194e329d17)

The protocol used to access Seeq (HTTP or HTTPS), the Server Name and the port number should be configured first. Once this is done clicking "Test Server Connection" will attempt to access the server. If it is successful, it will mark the test button with a green tick and enable the rest of the configuration. A failure to connect is marked with a red cross.

The authorization method can then be selected with the "User Directory" dropdown and an appropriate user name and password entered.

Clicking the "Test Seeq Login" will confirm whether this is valid. Again, the results of the test are shown with a tick or a cross.

Once valid details have been entered clicking "Save" will store these details to the AF Configuration Database. These details will then be used by all Seeq AF Attributes configured on the AF server.  
All users that will use Seeq Data Reference need to have Read and Read Data permissions to ONLY the Seeq element in the AF Configuration database.

## Selecting Seeq Signals and Conditions

Once the connection details have been configured, the Seeq data for the attribute can be selected from the "Seeq Series Search" dialog. The search dialog box works in the same manner as the Seeq data search in the Seeq application. By default, all series and conditions containing the search string are listed. Wildcards and regular expressions are also supported.

The name and type of each Seeq signal/condition, which is accessible to the configured user are listed. As it is possible that the same name may occur multiple times in different Analyses, the name of the analysis and the owning users are also listed, to help disambiguate the names.  
![image-20231011-145751.png](https://support.seeq.com/__attachments/a_b4694f7be77e5d36127f50f2ad92d9104be8011cd2a9b9fd88e92eb2559070d2/image-20231011-145751.png?cb=ca5a63b3c5ba2aec1e704fc7497acffa)

The "search for" checkboxes can be used to configure the type of data searched for.

Pressing OK will configure the attribute to display data from the selected entry.

### Advanced Settings

Clicking the advanced setting tab, allows the user to configure several other options.

Changes made on this menu only affect the attribute being configured.

![image-20231011-145829.png](https://support.seeq.com/__attachments/a_849ae725e68ced118afb13b690ee952367eea86180b852e6baf206ae8194d37d/image-20231011-145829.png?cb=1d9d71b05fee4902536170e6c6bcc0c6)

#### PI Trend Format

Setting this option will make trended data appear as it would in PI Tools, with the latest sample extrapolated to "now". As shown below.  
![image-20231011-145846.png](https://support.seeq.com/__attachments/a_eb9781f7b0ef735e815a0e3820c6065080409f9330f916bcb562b76293415624/image-20231011-145846.png?cb=e19052f0f36b51d6588cf176208a0c0b)

The normal Seeq style of trending makes no assumptions about the value of the tag after the latest sample. So, the trend finishes at the last sample.

![image-20231011-145901.png](https://support.seeq.com/__attachments/a_f5f5d2c7f5f251a8b2877f2db0a96a8c3dd6a659aa15194ea8d1f4b4df83241c/image-20231011-145901.png?cb=fb2c03853daad4b486e1ca51578e2b8b)

Unfortunately, this makes Pi tools display a current value of "No Data"

Pi format trending may be set as the default for all attributes, on the configure/option menu.

![image-20231011-145912.png](https://support.seeq.com/__attachments/a_0b70361512bd817949a9ddb619dbe9a88ab8021418ae225d2da48b5e270a25cb/image-20231011-145912.png?cb=3658da040a73e28716c0a016dca86bdc)

Additionally, it can be set or cleared for each attribute independently using the advanced setting tab.

#### Remove changeable data

Seeq is not a Historian, and in some cases it will re-calculate values when the requests are made. An example of this is a Daily average. It will be calculated for the current day from the start of the day until the current time. The result is that the value can change throughout the day.

This can cause problems for AF analytics, which assumes that data values, at a given timestamp, do not change. AF analytic attempts to maintain a cache of data, by constantly asking for new values. These values can then be used in calculations minutes or hours later - but which time they may have changed.

This flag removes any values which may change from the data stream sent AF analytics.

#### Minimum time between current value requests to Seeq

As mentioned above, AF analytics will constantly ask for new data. This setting limits how often this can happen. Seeq needs to perform calculations to find if new data is available and although these calculations general only take only a few milli-second these times can add up when many request are being made.

By limiting the frequency of the calculations, the load on both Seeq and AF analytics is greatly reduced, at the cost of increasing the time before a change in Seeq is reflected in the corresponding AF attribute.

The default is 10 seconds.

#### Asset Swapping

The Seeq AF Reference supports allows the Seeq "asset swapping" feature and can be used to implement "element relative" displays in PI tools.

This is achieved in two ways:

##### Asset swapping when adding an Attribute

When Asset swapping in used in a Seeq workbook, the Seeq Data-Reference has no way of keeping track of which assets are currently in use. In fact, it is common for users to duplicate worksheets and swap them to monitor difference assets in the same workbook. This leads to many different uses of the asset formula in the same workbook.

The Seeq Data-Reference searches by formula name and will always fine the original "un-swapped" version of the formula. To allow the Data-Reference user to take advantage of asset swapping, the user is given the opportunity to perform "asset-swapping" when the attribute is defined in Pi System Explorer.

If an asset-based formula is detected an extra dialog box is displayed.  
![image-20231011-145932.png](https://support.seeq.com/__attachments/a_c97065d97bbde1042c8c273b89404b5cd2f136387efc4cc18f9237caeb76fd30/image-20231011-145932.png?cb=6ffa63d71ec76fa632ca32a6f99f9b93)

This displays the asset which the formula uses and allows it to be "swapped" by typing in a replacement asset path. The "Replace Selected Asset" button is enabled when a valid Seeq path has been entered. Once this button is pressed, the asset swap is performed. Should the swap fail the user is informed and allowed to enter an alternative path. To cancel out completely without configuring the attribute press the "X" in the upper right-hand corner.

##### Asset swapping using Attribute templates

**This method assumes that the Seeq AF connector is in use so that each level in the AF hierarchy will correspond to a level in the Seeq asset hierarchy.**

If a template attribute is being added, the data reference will check if the data in Seeq is dependent on any asset-relative inputs. If it is, a second dialog form will appear.

![image-20231011-145943.png](https://support.seeq.com/__attachments/a_8b2f8a06c2a69510b8ba736b87f185ea15ce05cb0810acfddfb0cdaff8794ced/image-20231011-145943.png?cb=5d66d1b2cb321099b48b3e350f412b68)

This form lists the asset dependences of the Seeq item and allows the user to select one asset to be replaced with the Seeq asset which corresponds to the position of the attribute in the AF hierarchy.

The default assumes that the asset to be used corresponds to the position of the element where the template is instantiated. The data reference understands AF style Substitution parameters (%Element% etc.). The "advanced" button makes the textbox writable, which will then allow the asset path to be typed manually (including Substitution parameters as needed). This allows relative asset paths to be used

When the element is instantiated the substitution, strings are resolved in the context of the element being created and The asset-swapping is then performed the first time the attribute is used to fetch data.

## Data Pipe

The AF Data Reference now incorporates a "data pipe". This is a mechanism which ensures that all changes in the signal occurring between calls to the data reference are returned to the caller.

This prevents data loss if the signal changes more frequently than the data reference is called. Applications such as AF Analytics will call the data- reference frequently to examine the "event-pipe" and this causes an API call to Seeq. In the case of AF analytics this can be multiple times per second.

In order to prevent excessive load on the Seeq, server it is possible to limit the frequency of API calls from the data reference.

This is done by using the "Minimum time between current value requests to Seeq" option described above

## Using the Seeq Data-Reference with OSIsoft tools

Once the attribute is configured it can be used in any tool which supports AF. Notes on individual applications are given below.

### PI Vision

Attributes configured using the Seeq Data-Reference can be used in the same manner as other AF attributes.

See Asset Swapping above, for detail on element relative displays

See PI Trend Format above for details on controlling the formatting of trends

Attributes which are not based on PI tags tend to be slow to update in PI Vision (around one update per minute). This can be overcome by writing the data to a Pi tag, using AF analytics as detailed below.

### Datalink (PI Excel Add-In)

Data can be return from Seeq to excel as "interpolated" or "compressed"

The Seeq data reference supports the optional "RecordedValues" data method to allow greater control of values returned at the boundaries of the time-range. This allows the PI "inside", "outside" and "interpolated" interpolation methods in DataLink to be supported.

## Known Issues

* Seeq conditions are exported as a time series of zeros and ones, where zero represents the absence of a condition and one represents it presence. If the Condition has over-lapping capsules they are merged.

* The Seeq Data-Reference has not been tested with PI Web Parts.

* If an AF structure containing Seeq Data References is imported into Seeq using the AF connector, it will be somewhat inefficient: Seeq asks AF for the data, and AF calls straight back into Seeq, and Seeq may need to call back into PI for the raw data for the calculation. It will work, but it is less efficient than just using the Seeq calculation directly in Seeq.

### Version Compatibility when multiple Seeq servers are in use

If multiple Seeq servers exist in the network (e.g., a dev/prod setup), and both have RegisterAFDataReference set to true in their OSIsoft AF Connector configurations, there can be a version mismatch of the data reference in AF clients. In most cases, this can be resolved by the following process:

1. Re-register the reference by triggering an index with RegisterAFDataReference set to true for the desired Seeq server.

2. Stop all AF clients on the machine where the data reference is failing to load (just close PI System Explorer if this is where the issue is).

3. Delete the folders for any Seeq server versions in the `C:\ProgramData\OSIsoft\AF\PlugIns` folder, e.g., `53.3.0`, `54.0.0`. These folders will have a subfolder named `4.0` that will contain a file named `Seeq.Link.DataReference.AF.dll` as well as a few others.

4. Restart any AF clients. If the issue is in PI System Explorer, you should just need to reopen it.

5. Navigate to the Attribute that uses the data reference. When you do so, a folder named with the version number of the Seeq server should appear in the `C:\ProgramData\OSIsoft\AF\PlugIns` folder again. At this point, the issue should be resolved; if not, contact Seeq support

#### PI Vision Server using old version of Data Reference

PI Vision's application pool loads the Seeq AF Data Reference into memory to serve requests, which can keep old versions of the files needed by the Data Reference from being deleted. To solve this, one can use the steps in [Version Compatibility when multiple Seeq servers are in use](https://support.seeq.com/latest/cloud/asset-framework-data-reference-plugin.md#Version-Compatibility-when-multiple-Seeq-servers-are-in-use) . For step 2, just stop the `PIVisionServiceAppPool` in the Internet Information Services (IIS) Manager on the host for the PI Vision site:  
![image-20210927-174928.png](https://support.seeq.com/__attachments/a_230819cd4b83c77f471f8ae35b362ce9950c08d69a2d27f71ea5e8a9e3de4a4a/image-20210927-174928.png?cb=05393773f35a530a99cfa0e5019351e9)

It should then be possible to manually delete old versions of the data reference files in `C:\ProgramData\OSIsoft\AF\PlugIns` before restarting the `PIVisionServiceAppPool` . Note that the Data Reference files will not reappear in the `PlugIns` folder until an Attribute using the Data Reference is loaded from a PI Vision display, unless another client (e.g., PI System Explorer) is used from the PI Vision host first.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Asset Groups

## Overview

Asset Groups give users the ability to create fit for purpose groups which can be used just like Asset Trees in other areas of the product (such as Treemap, Tables, and Asset Swapping). Users can start from an existing Asset Tree or start from scratch and build up the Asset Group by searching for signals or other items.

### **Asset Trees vs. Asset Groups**

Use Asset functionality in Seeq through **Asset Trees** and **Asset Groups** . **Asset Trees** can be multi-level, are created and altered outside of Workbench (such as in Seeq Data Lab), and can be scoped locally (only accessible from a given Workbench) or globally (accessible in any Workbench by anyone with appropriate access on the server). Create an Asset Tree using Python in Seeq Data Lab or via access to restricted IT systems. Conversely, **Asset Groups** are single-level, created and edited directly in Workbench in the Data Tab, and are only scoped to the active Workbench. There is no need to know Python or have access to restricted IT systems to build or alter an Asset Group. Asset Trees and Asset Groups have functionally identical capabilities relating to the types of analysis that can be performed on them in Workbench (e.g., you can 'swap' an analysis between Assets, regardless of whether the Asset was built as a Tree or a Group).

## Getting Started

To create an Asset Group, start in the Data tab and click the "Create" button to the right of the Asset Groups section. This will put you in Asset Group Editor Mode.  
![image2021-1-27_17-31-45.png](https://support.seeq.com/__attachments/a_497f8470f889d52ccdccadf9e3f5a1212e1757fb3bdf7e885a45531ab5bb9f4a/image2021-1-27_17-31-45.png?cb=c1dc6c7b7c09b809e9c380b7023689ec)  
![image2021-1-27_17-34-27.png](https://support.seeq.com/__attachments/a_9f3371c2d870c38658de24ddc7bb0469e97e27e236a8fdbb1522e8a95110d4b6/image2021-1-27_17-34-27.png?cb=3e4c13640fca8c006203761f754eb70e)

### Adding Items to an Asset Group

There are two ways to add items to your asset group: [start from an existing asset tree](https://support.seeq.com/latest/cloud/asset-groups.md#AssetGroups-StartfromanexistingAssetTree) or [start from scratch and manually build an asset group from signals, conditions, etc.](https://support.seeq.com/latest/cloud/asset-groups.md#AssetGroups-Startfromscratchandmanuallybuildanassetgroupfromsignals,conditions,etc.)

### Start from an existing Asset Tree

Once you are in Asset Group Editor Mode, when you navigate an asset tree in the Data tab you will see different buttons to the right of each item in an asset tree.

Click the ![Screenshot 2026-01-30 at 3.06.03 PM.png](https://support.seeq.com/__attachments/a_e44f79608a1dcb42ec4e748d20e7898451f85920d4631e2efc45c4ca27bfaf13/Screenshot%202026-01-30%20at%203.06.03%E2%80%AFPM.png?cb=c0abd7f720da7cee66128d20d27222b0) icon next to the assets you want to analyze to add them to your asset group with all items underneath added as attributes.  
![image2021-2-9_8-45-35.png](https://support.seeq.com/__attachments/a_8a4e079062a3efe49e1e840ec8e813e5d4833282943646599aec5cd76197f664/image2021-2-9_8-45-35.png?cb=082daec92ba29b8274c38da86b472d75)  
![image2021-2-9_8-47-20.png](https://support.seeq.com/__attachments/a_6120d3d270e136372d863b537da18732c8fd03e2d86180ae4018fa82039061e2/image2021-2-9_8-47-20.png?cb=e2c555cd80357f356979cb99226805e4)

Continue until you have added all the assets you want to analyze.

Give your asset group a name and hit the Save button on the top right.  
![image2021-2-9_8-50-44.png](https://support.seeq.com/__attachments/a_5b8cba236a2a852977eb002dc657fee6debd70d6b1515f7f317e7767c020fd24/image2021-2-9_8-50-44.png?cb=efc29b0e0ca12f41fd90ee7d9337467d)

Your newly created asset group will appear in the Asset Groups section of the Data tab. You can use this Asset Group in other parts of Seeq just like you can use Asset Trees (for example, asset swapping, treemap, and tables across assets).  
![image2021-2-9_8-53-49.png](https://support.seeq.com/__attachments/a_5601b243a874628301654330ba838cbef72f8936a6d501e721a79d73b51891b1/image2021-2-9_8-53-49.png?cb=27ae803bfa318e56c3e65cfa97493c2c)

### Start from scratch and manually build an asset group from signals, conditions, etc.

There are buttons in the tool bar at the top of the screen which allow you to build your own asset by searching for signals and conditions. The Add Asset button will add a row and the Add Attribute button will add a column.  
![image2021-2-9_8-56-21.png](https://support.seeq.com/__attachments/a_67dfc0715015b23a73ec1e7d1171540ba903db0a2e2cae1a2a971d033de80644/image2021-2-9_8-56-21.png?cb=7874c80de2404c896be8bd224f220455)

Name your Assets and Attributes by clicking on the headers. Click the ![Screenshot 2026-01-30 at 3.07.14 PM.png](https://support.seeq.com/__attachments/a_a36b860e967cca66bfd37212325e69448c98c0ebad91d04007125c8a89bd10b2/Screenshot%202026-01-30%20at%203.07.14%E2%80%AFPM.png?cb=cf9cde9b0659cd5f7143aec840575272) icon in the table to launch the item selector where you can search for the item you want to map to an attribute name for a particular asset.  
![image2021-2-9_9-8-36.png](https://support.seeq.com/__attachments/a_01ee7dd5a716822fbb1bd5748791f8c0d82d75c1809c56972f4f364e57ddb69a/image2021-2-9_9-8-36.png?cb=220f85e67beec1df63b9e8d0fcdbe1d4)  
![image2021-2-9_9-5-42.png](https://support.seeq.com/__attachments/a_c65c849c0be83468001aaa682032e56593caf4e4a1834db748a401103a1fb49b/image2021-2-9_9-5-42.png?cb=66adde1c3e10b994f2cf06dec652f4d2)

## Additional Options

### Editing and Deleting an Asset or Attribute

You can edit the name of an asset or attribute by clicking on the name or by clicking the 3 dot menu and clicking Rename Asset or Rename Attribute. You can delete an asset or attribute by clicking the 3 dot menu next to its name and clicking Delete Asset or Delete Attribute.  
![image2021-1-28_23-40-35.png](https://support.seeq.com/__attachments/a_efe988d72dca6d228e6b7829903c7438086512f46a29b8b0a44ed4c4bee2c521/image2021-1-28_23-40-35.png?cb=889a55dc3db8ad0f59fb12a26a1bfce3)

### Adding a Description to your Asset Group

You can add a description to your asset group by clicking the Edit Asset Group icon to the right of the name field.  
![image2021-2-9_9-13-37.png](https://support.seeq.com/__attachments/a_d6d7aa184916edbc72dd442bd4a6f0a6c7b3ac739a3589737ab6537d3becf389/image2021-2-9_9-13-37.png?cb=9876c3af275d491cdc19b3a7b8ba1665)  
![image2021-1-28_23-25-13.png](https://support.seeq.com/__attachments/a_525813ebdd6d8056b376752f193573aca04fdc9d294f30581899eb3645fe718d/image2021-1-28_23-25-13.png?cb=0027bca06cb2e47a53fb85e9fb4abbc7)

## Advanced Options

### Adding Only Certain Items from an Asset Tree

Often asset trees have many more items than you are interested in. You can build an asset group with only the items that you want to analyze. Start by drilling down to the level where the signals or conditions are. Click the ![Screenshot 2026-01-30 at 3.08.32 PM.png](https://support.seeq.com/__attachments/a_4bdca739a936bcc047f4ac611760a50fbcfd1cd5aa3c481e599d87feefcffc32/Screenshot%202026-01-30%20at%203.08.32%E2%80%AFPM.png?cb=f9f05fcfcbedd9087e85125df43ff13d) icon next to each item you want as part of your asset group.  
![image2021-2-10_8-34-31.png](https://support.seeq.com/__attachments/a_7a36e6da412de32392cac3df176986e22e2e3fdee013d13ec9d831597073a80d/image2021-2-10_8-34-31.png?cb=33d085725cecb0e564ed870b480af9cf)  
![image2021-2-10_8-35-26.png](https://support.seeq.com/__attachments/a_dd00c9be701508f6c9c451b3ca8a9f7c4adda7aed9a8fe479d2a8a7fb5e9217d/image2021-2-10_8-35-26.png?cb=8886460fa8ab26bfd06cb143b63c79a3)

Add all the signals you want as part of this asset using this method.  
![image2021-2-10_8-40-12.png](https://support.seeq.com/__attachments/a_7d89b8b926d37336366dfda5ae5d85a34329647932d7cc55d7713ac299e9ea1a/image2021-2-10_8-40-12.png?cb=a2d443132305458ff4250a8bb4111b6f)

Once you have added all desired attributes for one asset, go up to the level with the other assets you want to add. You will notice that another button appears ![Screenshot 2026-01-30 at 3.09.40 PM.png](https://support.seeq.com/__attachments/a_dcccef647d2fa000df4c4695381fe5eadd9220b49449edce71f55c2b0bf69bfb/Screenshot%202026-01-30%20at%203.09.40%E2%80%AFPM.png?cb=8ab178dd4ba7b9d52da1844153d93706) which will allow you to add only the items which you have already selected to be attributes in your new Asset Group rather than all items under the asset.  
![image2021-2-10_8-38-3.png](https://support.seeq.com/__attachments/a_646241bcc43aa093124115ff534181eec80c819c05381ea76ec0027a822540a8/image2021-2-10_8-38-3.png?cb=f7192a492dfc0b8ec7fd6dfbf5c207a8)  
![image2021-2-10_8-38-45.png](https://support.seeq.com/__attachments/a_94848afaf27409f61dce3a42c153e3399180b89197e2a3f2f548b62dbf854913/image2021-2-10_8-38-45.png?cb=f28917ff0124b5c09edd44c59facb742)

### Editing Attribute Mapping

When starting from an existing asset tree there may be times when you would like to replace what the original asset tree had with another item. Clicking on the ![Screenshot 2026-01-30 at 3.10.52 PM.png](https://support.seeq.com/__attachments/a_306bf6576004afce5aac0ae2379f21f660e9c0cc75a7f1a8b80a684505f967dc/Screenshot%202026-01-30%20at%203.10.52%E2%80%AFPM.png?cb=63928027e6d7469ab057095d23041858) icon will bring up the Item Details.  
![image2021-2-10_8-44-56.png](https://support.seeq.com/__attachments/a_8ef7494c226973757f3d04d10b6378ce99b5dcb86c2d962cef99b62d4ae77084/image2021-2-10_8-44-56.png?cb=4cb591edbb431d446bd2d95ae8a142df)

From here you can click the edit icon to change the item mapped to this attribute or remove the mapping so that there is no item for this attribute on this asset.  
![image2021-2-10_8-47-52.png](https://support.seeq.com/__attachments/a_f48bb1451d6fe48c2bb5562c4c72570467fc99ca526e4a07f92cf58c7f9cf8b2/image2021-2-10_8-47-52.png?cb=8da2d077666266160e4967ba3b92e05d)

If you manually change the mapping by clicking the edit icon, clicking the check mark will show you the manually mapped item as well as the original mapping.  
![image2021-2-10_8-49-52.png](https://support.seeq.com/__attachments/a_3a9017821d5e39b96aba33187deb5bc74162fe05930d6d9462dd3fdd7421670b/image2021-2-10_8-49-52.png?cb=e36c89f07df196d3e0f0d862f5cf3bcd)

You can revert to the original mapping by clicking the Revert button.  
![image2021-2-10_8-53-48.png](https://support.seeq.com/__attachments/a_63367d483e79d0760985cc9100442070d8b0fc3c7d58cef1450bf01016abfaf8/image2021-2-10_8-53-48.png?cb=04ce6814677ae133dced5874200e26f1)

### Asset Trees with items under other items rather than assets

If you are starting from an asset tree which has items under items rather than under assets (i.e. a condition which has sub-conditions or a signal which has signals underneath it), you will notice that you have two options:  
![image2021-2-10_8-56-28.png](https://support.seeq.com/__attachments/a_f70dec024dad8375bcf5d97b0fe2d8213c32949c399d7d640ddbbf26001da5d0/image2021-2-10_8-56-28.png?cb=85f26e7c4d547abea3d5ed050b778032)

Clicking the ![Screenshot 2026-01-30 at 3.08.32 PM.png](https://support.seeq.com/__attachments/a_4bdca739a936bcc047f4ac611760a50fbcfd1cd5aa3c481e599d87feefcffc32/Screenshot%202026-01-30%20at%203.08.32%E2%80%AFPM.png?cb=f9f05fcfcbedd9087e85125df43ff13d) icon will add only the item to the asset group:  
![image2021-2-10_8-58-6.png](https://support.seeq.com/__attachments/a_f02f2ac1a8b64b656fae9d8871641c94bc00c505bb232b18376248e8e354ef9c/image2021-2-10_8-58-6.png?cb=473754716a56086681ddc9e0c2e0ea71)

Clicking the ![Screenshot 2026-01-30 at 3.06.03 PM.png](https://support.seeq.com/__attachments/a_e44f79608a1dcb42ec4e748d20e7898451f85920d4631e2efc45c4ca27bfaf13/Screenshot%202026-01-30%20at%203.06.03%E2%80%AFPM.png?cb=c0abd7f720da7cee66128d20d27222b0) icon will add all items under this item to the asset group:  
![image2021-2-10_8-59-3.png](https://support.seeq.com/__attachments/a_6eff8be0414fc66f41e683faef3786259fe06309d9d065ab268e10bf07da11f3/image2021-2-10_8-59-3.png?cb=5a157a6711828e75333a06f221988f83)

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Selecting Assets in Organizer Topics

Asset selection is available as context for data displayed in Organizer Topics. This allows for an entire document or a subset of a document to display data for a specified asset regardless of the asset displayed in the source Workbench Analysis.

![image-20210708-200917.png](https://support.seeq.com/__attachments/a_dbfc9d2e27b2ee08a084546a11f8ee3ab3688501431b47d878488134051f8022/image-20210708-200917.png?cb=a7a21a146dedce253f22c829f325a230)

## Configure Asset Selection

Add a new asset selection using the plus icon in the Properties tab in an Organizer Topic.  
![image-20210708-202200.png](https://support.seeq.com/__attachments/a_549889e024c5323c47d8df22682ab2d9347e642c557a91e121a5befaf6588b02/image-20210708-202200.png?cb=9c9e7345d579fb201d9755bdff821b19)  
Navigate to the desired asset in the pop up and select it by clicking on the circle to populate a check mark. The selected asset will display below with a preview of the path that will display in the selector. Increasing the path levels will show more parent assets in the dropdown that appears in the Properties pane.

Each asset selection configured will be named Asset Selection 1, 2, 3, etc. by default unless the user renames them.  
![image-20211015-202935.png](https://support.seeq.com/__attachments/a_f057449438794cc1c13fe94a6783d9d76fc941e9e8a42221f6aa9306f053f962/image-20211015-202935.png?cb=b7aace2df6969d2ef2580637a70b9ad5)
Condensed Bulk Edit Modal  
![image-20211015-203051.png](https://support.seeq.com/__attachments/a_7b3019e523965bb2f75447ec7f1c66ba13450ecb582064233c84928165334086/image-20211015-203051.png?cb=6da29b85aa40fda72b0cbee1b5f40fd3)
Bulk Edit modal after clicking right arrows

### Associate content with Asset Selection

Assign this asset selection as a new property to as many pieces of content as needed by selecting pieces of content from a table and selecting the "Attach" button. To see more properties, click the double arrows on the right side of the pop-up. The new asset selection will be automatically populated in the date ranges dropdown.

More guidance can be found in [Modifying Seeq Content](https://support.seeq.com/latest/cloud/modifying-seeq-content.md).  
![image-20210708-203249.png](https://support.seeq.com/__attachments/a_a5e148a7cbc3a6fa6f4694916c85ad6aa4fc7005eb82357ed259994d250aea2f/image-20210708-203249.png?cb=52d0d7d0427724fbc86b53f5c6f6ff11)

### Display data from another asset

After an asset selector is configured, assets that are immediately adjacent will become available in a dropdown in the Properties panel. Selecting from this dropdown will update any piece of content associated with that asset selector with items from the newly selected asset. For example, in the image to the left, all four pieces of content would display data from Area B if that was selected from the drop down.

Note that this selector can work as a text filter when many assets are adjacent in a tree, but there is presently an upper limit of 1000. If you have more than 1000 assets in a single level, consider breaking them into two levels and use the edit icon to navigate up and down between different levels.

If the asset selected does not contain an item displayed in the original piece of content, that piece of content will return warnings.

To display assets that are not immediate siblings of the original, edit the asset selection and navigate in the resulting pop up to assets that exist elsewhere in the tree.  
![image-20210709-221237.png](https://support.seeq.com/__attachments/a_9aa108e59d0b9d6c6e5f6d893e2f8b446bda56f8668077c174667997a257a17d/image-20210709-221237.png?cb=44a0c7bc28976f759cfb90ac995c6454)

### Accessed by View Only Users

This asset selection is also available for users with Read Access opening a document with [View Only](https://support.seeq.com/latest/cloud/view-only-experience.md)permission. When the View Only link is shared with someone, that viewer needs Read Access to all of the underlying workbenches used in the Organizer if they wish to see figures from those workbenches after they make changes to dates or assets from the View Only link. When changes are made to dates or assets from the View Only link, a viewer without Read Access to a workbench will see an error instead of a figure from that workbench.  
![image-20211124-172949.png](https://support.seeq.com/__attachments/a_b6ce36448b5ce2c635d063e7d0ed94d338d430e87a6fcc1a34ca53e6cf53b969/image-20211124-172949.png?cb=3b64da7b0a61ebd8a0abbfef0971fb81)

### Condition-Based Date Range

If a [condition-based Date Range](https://support.seeq.com/latest/cloud/adjusting-date-time-ranges.md#Condition-Based-Range) is associated with any content that the asset selection is associated with, then changing the selected asset on an asset selection will allow a single Date Range's condition to follow that asset selection.  

*** ** * ** ***

![image-20220309-220855.png](https://support.seeq.com/__attachments/a_d77033055265d717b10c9afa6d19eac5ae5f7149c22a0bc967f967ff04f7c2ad/image-20220309-220855.png?cb=31c0d8018ecbbf1b950b5cc0a959aed1)  
![image-20220309-230401.png](https://support.seeq.com/__attachments/a_3ae0d77019e07afbc120ae18491d5582772c1abba0aa4c136e2e609ac1a2aeda/image-20220309-230401.png?cb=99f3fb8f1c7db3dcbece312d18f29d1d)

### Troubleshooting

Several scenarios will result in a yellow warning icon in the upper left of the content. This will let the viewer see as much data as possible after asset selection is changed, but warns that not all the data may represent the new selection.

There are at least two warnings to be familiar with:

* Asset selection could not be applied to the following items

  * This warning appears when not all items in the content can be switched to the target asset.

  * In the content, the data that could be switched is, but data that couldn't be switched still displays previous data. This follows asset swap behavior in Workbench where you see a yellow pop up box with 2 of 3 signals swapped.

  * In this case you may want to modify the source worksheet or swap to another asset that may have all relevant data to display.

* Asset selection cannot be applied to any items

  * This error arises when none of the items in the content that are on the source asset can be swapped to the target asset.

  * In the content, the data is not updated because the asset selection did not apply.

  * In this case, asset selection likely is not appropriate for that piece of content and the content can be edited to remove asset selection.

---
version: "Latest"
variant: "Cloud"
language: "en"
---
# Authentication

Seeq offers a variety of mechanisms for authenticating to Seeq. This page describes the reasons to use, or not use, each of the options.  

|                                                                                           Mechanism                                                                                           |              Recommended For               |                                                                                                                                                        Reasons to Use It                                                                                                                                                        |                                                                                                                                               Reasons Not to Use It                                                                                                                                                |
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Seeq Directory                                                                                                                                                                                | Demos, test systems, smaller organizations | * Easiest to set up. Ready to go "out of the box".                                                                                                                                                                                                                                                                              | * Built-in Seeq accounts do not sync with any external system. * Adding and removing users requires manual intervention.                                                                                                                                                                                           |
| [LDAP](https://support.seeq.com/latest/cloud/ldap-active-directory-authentication-connector.md)                                                                                                                       | Larger organizations                       | * Simple username \& password authentication synced with Active Directory or an LDAP server. * Users automatically gain or lose access to Seeq based on group membership. * Users can access Seeq without being connected to the corporate intranet. Does not require Windows.                                                  | * Requires coordination with IT administrators: identifying LDAP server and groups. * Group Allow List configuration is not user-friendly: requires using hard-to-read LDAP search syntax.                                                                                                                         |
| [Windows Authentication](https://support.seeq.com/latest/cloud/windows-authentication.md)                                                                                                                             | Larger organizations                       | * Passwordless single sign-on authentication synced with Active Directory. * Users automatically gain or lose access to Seeq based on group membership.                                                                                                                                                                         | * Requires coordination with IT administrators: creating an AD user for Seeq, creating an SPN. * Requires either Seeq or a remote agent inside the corporate intranet and running Windows.                                                                                                                         |
| [OpenID Connect](https://support.seeq.com/latest/cloud/openid-connect.md)                                                                                                                                             | Larger organizations                       | * Web-style single sign-on authentication synced with an external directory: Azure Active Directory, Okta, many others. * Users automatically gain or lose access to Seeq based on their access to the external directory. * Users can access Seeq without being connected to the corporate intranet. Does not require Windows. | * Requires coordination with IT administrators: configuring the OpenID Connect provider. * Not all external directories support limiting access to specific groups/accounts. Azure Active Directory does, others may not. * Requires that either Seeq or a remote agent has access to the OpenID Connect provider. |
| [Windows Authentication](https://support.seeq.com/latest/cloud/windows-authentication-via-kerberos-in-the-ldap-co.md) [(via the LDAP Connector)](https://support.seeq.com/latest/cloud/windows-authentication-via-kerberos-in-the-ldap-co.md) | -                                          | * Allows Windows Authentication style login for Seeq servers running on Ubuntu.                                                                                                                                                                                                                                                 | * More difficult to set up and maintain than our other authentication mechanisms.                                                                                                                                                                                                                                  |

Users of the [Seeq SDK](https://support.seeq.com/latest/cloud/seeq-apis-and-sdks.md)s will need to use either Seeq Directory or [generate an access key](https://support.seeq.com/latest/cloud/working-with-access-keys.md).

[Next Page](https://support.seeq.com/llms-full.txt/1)
