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:

🚩

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:

  • 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 SIGMA catalog in Databricks, then create an AI_USAGE schema. Only grant MODIFY and CREATE TABLE privileges 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:

  1. Go to Administration > AI Settings:

    1. In the Sigma header, click your user avatar to open the user menu.
    2. Select Administration to open the Administration portal.
    3. In the side panel, select AI Settings.
  2. In the Organization AI usage configuration section, for Connection, select a connection that has write access turned on.

  3. 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.
  4. 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 columnAI usage columnDetails
Question IdTrace Id, Span IdOne question is treated as one span.
generationSpan TypeNo equivalent column, set to a string that matches the value tracked for Assistant in AI usage.
ask-sigmaTrace NameNo equivalent column, set to a string that matches the value tracked for Assistant in AI usage.
AgentAgent Name
User NameUser Name
ModelModel
TokensTokens InputToken source was not tracked.
0Tokens OutputToken source was not tracked.
{ question: User Question }InputNo equivalent column, set to a static value.
{ result: Result }OutputNo equivalent column, set to a static value.
User Id, Data Classification, Selected Source, Improvement, Teams, Warehouse Runtime Ms, Llm Runtime Ms, Error, Call CountMetadataStored as a metadata JSON array.
TimestampTrace Created At UtcMore specific name avoids reserved term.
nullParent Id, Agent Id, Session Id, Ai Provider, Tags, Tool CallsNot tracked by Assistant usage.

Copy Assistant usage data to the AI usage table

To copy historical Assistant usage data to the AI usage table:

  1. Write INSERT SQL against the fully qualified locations of both tables.
  2. 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:

  1. Open the Assistant usage dashboard.

  2. 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"]}
  3. Use the copied JSON to construct fully qualified paths to the tables:

    • DATABASE.SCHEMA.SIGDS_1a2b345c_6d7e_8f9g_h0i1_23456l789m0n
    • DATABASE.SCHEMA.SIGDS_1a2b345c_6d7e_8f9g_h0i1_23456l7m8901

To copy the data:

  1. Write the INSERT SQL, replacing the placeholder values with the specifics for your organization.

    If you write your own SQL statement, your INSERT must also populate the following system columns in addition to the usage data columns:

    System columnValue
    IDA unique 16-byte binary primary key for each row. Because QUESTION_ID is 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.

  2. 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 in UPDATED_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;