Qyra

Usage analytics

Track who is accessing content and running queries in your Qyra projects

There are two ways of understanding user activity:

  1. Usage Analytics dashboards - these are dashboards created by Qyra which give you an overview of your project's content and user activity.
  2. Query tags - this is metadata which is added to your data warehouse queries and gives you information about who is querying data and what they are querying.

Usage analytics dashboards

Each project has usage analytics dashboards created by Qyra giving you an overview of your project's content and user activity.

To see your usage analytics dashboards for a project, just click on the settings icon, project settings, then usage analytics.

The usage analytics entry in the project settings menu

Or you can also use our search bar to get direct access to the different analytics dashboards by typing the name of the dashboard (eg: User activity)

User Activity dashboard

This dashboard gives you an overview of the users in your project and the activity of your users.

The User Activity dashboard with tiles counting users by role alongside charts of queries run over time

Here's an overview of the fields used in the dashboard:

  • Number of users: the total number of users that have access to the project.
  • Number of viewers: the number of users with the viewer role that have access to the project.
  • Number of editors: the number of users with the editor role that have access to the project.
  • Number of admins: the number of users with the admin role that have access to the project.
  • % of weekly querying users: the % of users which have run at least one query in the project in the last 7 days (out of all users in your project). Queries include viewing existing charts and dashboards.
  • Number of weekly querying users: the number of users which have run at least one query in the project in the last 7 days.
  • Weekly average number of queries per user: the rolling 7 day average number of queries that each user is running in your project.
  • Users that have run the most queries in the last 7 days: a list of the users that have run the most queries in your project in the last 7 days.
  • Users that have updated the most charts in the last 7 days: a list of users that have updated (including created) the most charts in the project in the last 7 days.
  • Users that have not run a query in the last 90 days: a list of users that have not run a query in the project in the last 7 days. This includes viewing charts and dashboards.

Extended usage analytics

Self-hosted instances can set the EXTENDED_USAGE_ANALYTICS=true environment variable to add two extra tables to the User Activity dashboard:

  • Dashboard views (top 20): ranks dashboards in the project by total view count.
  • Chart views (top 20): ranks charts in the project by total view count.

Query tags

Query tags are metadata which is added to your data warehouse queries and gives you information about each query executed.

The following query tags are sent:

Query TagDetail
organization_uuidQyra organization unique identifier.
project_uuidQyra project unique identifier.
user_uuidUser unique identifier for the user that triggered the query.
explore_nameName of the explore the query was run against.
chart_uuidChart unique identifier. Only set when the query originates from a saved chart.
dashboard_uuidDashboard unique identifier. Only set when the query originates from a dashboard.
saved_sql_uuidSaved SQL chart unique identifier. Only set when a scheduled job is running a saved SQL chart.
scheduler_uuidScheduler unique identifier. Only set when the query is triggered by a scheduled delivery, alert, or Google Sheets sync.
scheduler_nameHuman-readable name of the scheduler. Only set when the query is triggered by a scheduler.
job_idScheduler job identifier for a single run of a scheduler. Only set when the query is triggered by a scheduler.
app_uuidIdentifier of the external app that originated the request, taken from the app attribution header. Self-reported by the caller and used for attribution only.
query_contextWhich context the query was executed in. See Query contexts below for the full list of values.
user_attribute_<name>One tag per user attribute value assigned to the querying user. Applies to both regular users and embed viewers, and requires no configuration.

Query contexts

The query_context tag identifies which surface triggered the query. Possible values:

ValueWhere the query came from
dashboardViewViewing a dashboard.
autorefreshedDashboardDashboard auto-refresh tick.
exploreViewRunning a query from the explore view.
chartViewViewing a saved chart.
chartHistoryViewing a chart's version history.
sqlChartViewViewing a saved SQL chart.
sqlRunnerRunning a query from the SQL runner.
viewUnderlyingDataViewing the underlying data behind a result cell.
filterAutocompleteAutocomplete lookups for filter values.
calculateTotalCalculating a column total.
calculateSubtotalCalculating a group subtotal.
metricsExplorerQueries from the Metrics Explorer.
csvDownloadCSV export of query results.
gsheetsAd-hoc Google Sheets export.
alertScheduled alert evaluating its condition.
scheduledDeliveryScheduled delivery running.
scheduledChartScheduled chart delivery.
scheduledDashboardScheduled dashboard delivery.
scheduledGsheetsChartScheduled Google Sheets sync for a chart.
scheduledGsheetsDashboardScheduled Google Sheets sync for a dashboard.
scheduledGsheetsSqlChartScheduled Google Sheets sync for a SQL chart.
preAggregateMaterializationBuilding a pre-aggregate materialization.
embedQuery from an embedded chart or dashboard.
apiQuery issued through the Qyra HTTP API.
cliQuery issued through the Qyra CLI.
aiQuery issued by a Qyra AI agent.
mcp.run_metric_queryrun_metric_query tool call from the Qyra MCP server.
mcp.run_sqlrun_sql tool call from the Qyra MCP server.
mcp.search_field_valuessearch_field_values tool call from the Qyra MCP server.
dataAppSampleSample query issued when previewing a data app.

User attribute tags

For every query, Qyra emits an extra user_attribute_<name> tag for each user attribute value assigned to the user running the query. This makes it possible to attribute warehouse cost, audit access, or debug row-level-security by user attribute directly from your warehouse's query history.

  • Tags are emitted alongside the standard query tags for both signed-in users and embed viewers (using the attributes passed on the embed token).
  • Values are carried through async query execution end-to-end, so they appear on the actual warehouse job (for example, as labels on a BigQuery job).
  • Keys and values are sanitized to match warehouse tag constraints — lower-cased, restricted to a-z 0-9 _ -, and truncated if too long. Invalid or oversized metadata is sanitized rather than blocking the query.
  • No configuration is required — user attribute tags are emitted automatically wherever query tags are already supported.

For example, a user with the region attribute set to emea and customer_tier set to enterprise will produce these additional tags on every warehouse query they trigger:

user_attribute_region=emea
user_attribute_customer_tier=enterprise

You can then filter your warehouse's query or job history by these tags (for example, labels.user_attribute_region = "emea" in BigQuery) to break down usage or cost by user attribute.

Query tags are stored differently in each data warehouse:

Data WarehouseQuery Tag
BigQueryWrites metadata as labels in your job history.
SnowflakeWrites JSON metadata in the comment column of your query history.
ClickHouseWrites JSON metadata in the comment column of your query log.
TrinoSends metadata as comma-separated key=value pairs in the X-Trino-Client-Tags HTTP header on each submitted query.
RedshiftAppends JSON metadata as a SQL comment in each submitted SQL query.
DatabricksAppends JSON metadata as a SQL comment in each submitted SQL query.
PostgresAppends JSON metadata as a SQL comment in each submitted SQL query.
AthenaAppends JSON metadata as a SQL comment in each submitted SQL query.