Configure the AI usage dashboard
Sigma provides an AI usage dashboard to monitor token consumption and interactions with all AI-powered features, including interactions with and usage of Sigma agents and Sigma Assistant.
The Assistant usage dashboard is now deprecated and will be removed after September 15, 2026. Instead, use the AI usage dashboard. If you already configured the Assistant usage dashboard, you can add a configuration for the AI usage dashboard in the same schema. If you have not yet configured the Assistant usage dashboard, you only have the option to configure the AI usage dashboard.
Admins can configure the AI usage dashboard in AI Settings.
Data security
AI and Sigma Assistant usage data are visible in usage dashboards, but only to users assigned the Admin account type. Unlike other usage dashboards, AI usage data is collected only if you configure it, and the data is stored in your data platform in a location that you specify.
Sigma Computing, Inc. does not store this data or have the ability to access it.
Because AI usage data includes names of users and the full text of the questions they ask, Sigma recommends configuring a unique schema to store this data in your data platform and granting view privileges to that schema only to the admins who need access to this data.
Requirements
To set up the AI usage dashboard:
-
You must be assigned the Admin account type.
-
You must have a Sigma connection to a supported data platform and have write access enabled.
You can use the same schema in the same connection for both usage dashboards, or use different connections and schemas.
Do not set up the destination that you use to track AI usage data as a write destination for a connection. Write destinations are not indexed by Sigma, so data stored in them cannot be displayed or visualized in Sigma.
Considerations for OAuth connections
If you connect to your data platform using OAuth, all users must be granted write access privileges in your data platform. Users without write access privileges (for example, BigQuery Data Editor role in BigQuery) can continue to use AI-powered features, but their usage is not logged to the AI usage table.
To limit which users must be granted write access privileges in your data platform, choose one of the following options:
-
(Recommended) Create a dedicated connection to your data platform to use only for usage tracking and grant all users Can write only access to the connection. For instructions, see the following:
- Set up a connection to Snowflake with write access using key pair authentication and a specific role.
- Set up a connection to Databricks with write access using basic authentication and a service principal.
- Set up a connection to BigQuery with write access using basic authentication.
-
Use the existing OAuth connection and set up a dedicated write destination to use only for the AI usage dashboard and grant the relevant privileges only to that destination.
For example, create a
SIGMAcatalog in Databricks, then create anAI_USAGEschema. Only grantMODIFYandCREATE TABLEprivileges on that schema to users who have permission to use AI-powered features in Sigma.
Configure the AI usage dashboard
After setting up a connection with write access, configure the AI usage dashboard:
-
Go to Administration > AI Settings:
- In the Sigma header, click your user avatar to open the user menu.
- Select Administration to open the Administration portal.
- In the side panel, select AI Settings.
-
In the Organization AI usage configuration section, for Connection, select a connection that has write access turned on.
-
Based on the type of connection that you add, complete the additional fields to specify the destination you created, matching the capitalization of the objects in your data platform:
- For a BigQuery connection, specify a ProjectID and Dataset.
- For a Databricks connection, specify a Catalog and Schema.
- For a Snowflake connection, specify a Database and Schema.
-
Click Save.
If you see an error "Cannot manage views on given scope with the following error: SQL access control error: Insufficient privileges to operate on schema 'your_schema_name'", the schema or dataset that you entered does not allow write access. Ensure that the write destination in your data platform is configured correctly.
The table is created with a name like
AI_USAGE_<ORGANIZATION_NAME>.
After creating the dashboard, you can review usage from the Usage dashboards. See Usage overview.
Migrate Assistant usage data to AI usage
If you have historical usage data in the Assistant usage dashboard, you can migrate it to the AI usage dashboard.
System and user requirements
To migrate data:
- You must configure AI usage and the AI usage table must be set up on the same connection as the Assistant usage table.
- You must know the fully qualified locations of both the Assistant usage table and the AI usage table. To get both locations, click Copy table locations in the deprecation banner on the Assistant tab in Usage.
- You must be assigned the Admin account type.
Limitations
The data collected for the Assistant usage dashboard is in a different schema structure than the data collected for the AI usage dashboard, so the migration maps the columns as follows:
| Assistant usage column | AI usage column | Details |
|---|---|---|
| Question Id | Trace Id, Span Id | One question is treated as one span. |
generation | Span Type | No equivalent column, set to a string that matches the value tracked for Assistant in AI usage. |
ask-sigma | Trace Name | No equivalent column, set to a string that matches the value tracked for Assistant in AI usage. |
| Agent | Agent Name | |
| User Name | User Name | |
| Model | Model | |
| Tokens | Tokens Input | Token source was not tracked. |
0 | Tokens Output | Token source was not tracked. |
{ question: User Question } | Input | No equivalent column, set to a static value. |
{ result: Result } | Output | No equivalent column, set to a static value. |
| User Id, Data Classification, Selected Source, Improvement, Teams, Warehouse Runtime Ms, Llm Runtime Ms, Error, Call Count | Metadata | Stored as a metadata JSON array. |
| Timestamp | Trace Created At Utc | More specific name avoids reserved term. |
| null | Parent Id, Agent Id, Session Id, Ai Provider, Tags, Tool Calls | Not tracked by Assistant usage. |
Copy Assistant usage data to the AI usage table
To copy historical Assistant usage data to the AI usage table:
- Write
INSERTSQL against the fully qualified locations of both tables. - Run the SQL in your data platform where you have the Assistant usage and AI usage dashboards configured.
Both the Assistant usage and AI usage tables are managed by Sigma. You must reference each table by its fully qualified location.
To retrieve the locations of the tables for your SQL statement:
-
Open the Assistant usage dashboard.
-
In the deprecation banner, click Copy table locations.
The table locations are copied as a JSON object with two keys, each value listing the location:
{"ask":["DATABASE","SCHEMA","SIGDS_1a2b345c_6d7e_8f9g_h0i1_23456l789m0n"],"ai_usage":["DATABASE","SCHEMA","SIGDS_1a2b345c_6d7e_8f9g_h0i1_23456l7m8901"]} -
Use the copied JSON to construct fully qualified paths to the tables:
DATABASE.SCHEMA.SIGDS_1a2b345c_6d7e_8f9g_h0i1_23456l789m0nDATABASE.SCHEMA.SIGDS_1a2b345c_6d7e_8f9g_h0i1_23456l7m8901
To copy the data:
-
Write the
INSERTSQL, replacing the placeholder values with the specifics for your organization.If you write your own SQL statement, your
INSERTmust also populate the following system columns in addition to the usage data columns:System column Value IDA unique 16-byte binary primary key for each row. Because QUESTION_IDis not unique, the example salts it with a row number.SEQ_NUMA non-null, fixed-width ordered key so migrated rows sort consistently. ROW_VERSIONA non-null version number, seeded from the current maximum value in the AI usage table. UPDATED_BYThe email address to record as the editor of the migrated rows. UPDATED_ATWhen the row was last updated. The example uses the original Assistant usage timestamp. Columns in the AI usage table are case-senstive and stored in lowercase. Treat each column as a delimited identifier. If you store your usage data in Databricks, wrap each column name with backticks. For example,
trace_id. -
In your data platform, run the SQL. Avoid running the SQL statement when AI-powered features are being used in Sigma to avoid duplicated data or conflicts.
If you store your Assistant usage data in a Snowflake connection, you can use the following example SQL. If you store Assistant usage data in Databricks or BigQuery, update the SQL statement to use the relevant primary key, sequencing, and JSON functions for your data platform.
Before running the example SQL, replace the following placeholder values:
<AI_USAGE_TABLE_LOCATION>: The fully qualified location of the AI usage table.<ASSISTANT_USAGE_TABLE_LOCATION>: The fully qualified location of the Assistant usage table.<[email protected]>: The user email address to record inUPDATED_BY.
INSERT INTO <AI_USAGE_TABLE_LOCATION> (
ID, SEQ_NUM, ROW_VERSION, UPDATED_BY, UPDATED_AT,
"trace_id", "span_id", "parent_id", "span_type", "trace_name",
"agent_name", "agent_id", "user_name", "session_id", "ai_provider",
"model", "tokens_input", "tokens_output", "tags", "tool_calls",
"input", "output", "metadata", "trace_created_at_utc"
)
WITH src AS (
-- Number each source row so the primary key and sequence are unique and ordered.
SELECT a.*, ROW_NUMBER() OVER (ORDER BY a."TIMESTAMP", a.QUESTION_ID) AS rn
FROM <ASSISTANT_USAGE_TABLE_LOCATION> a
),
seed AS (
-- Seed ROW_VERSION from the current maximum so migrated rows don't collide with existing rows.
SELECT COALESCE(MAX(ROW_VERSION), 0) AS max_rv
FROM <AI_USAGE_TABLE_LOCATION>
)
SELECT
-- 16-byte binary primary key, unique per source row (QUESTION_ID is not unique, so salt with rn).
MD5_BINARY(src.QUESTION_ID || '|' || src.rn::varchar) AS ID,
-- Non-null, fixed-width ordered key so migrated rows sort consistently.
TO_BINARY(LPAD(src.rn::varchar, 20, '0'), 'UTF-8') AS SEQ_NUM,
seed.max_rv + src.rn AS ROW_VERSION,
'<[email protected]>' AS UPDATED_BY,
src."TIMESTAMP" AS UPDATED_AT,
src.QUESTION_ID AS "trace_id",
src.QUESTION_ID AS "span_id",
NULL AS "parent_id",
'generation' AS "span_type",
'ask-sigma' AS "trace_name",
src.AGENT AS "agent_name",
NULL AS "agent_id",
src.USER_NAME AS "user_name",
NULL AS "session_id",
NULL AS "ai_provider",
src.MODEL AS "model",
src.TOKENS AS "tokens_input",
0 AS "tokens_output",
ARRAY_CONSTRUCT() AS "tags",
ARRAY_CONSTRUCT() AS "tool_calls",
OBJECT_CONSTRUCT('question', src.USER_QUESTION) AS "input",
OBJECT_CONSTRUCT('result', src.RESULT) AS "output",
OBJECT_CONSTRUCT(
'userId', src.USER_ID,
'dataClassification', src.DATA_CLASSIFICATION,
'selectedSource', src.SELECTED_SOURCE,
'improvement', src.IMPROVEMENT,
'teams', TRY_PARSE_JSON(src.TEAMS),
'warehouseRuntimeMs', src.WAREHOUSE_RUNTIME_MS,
'llmRuntimeMs', src.LLM_RUNTIME_MS,
'error', src.ERROR,
'callCount', src.CALL_COUNT,
'migratedFrom', 'ask_usage'
) AS "metadata",
src."TIMESTAMP" AS "trace_created_at_utc"
FROM src CROSS JOIN seed;