BI Copilot

Welcome back

Sign in with your organisation account to continue.

Your session has expired.
BI Copilot
Ask Documents Reports Templates Metrics My KRA
Sources Connections Sync Logs Data Explorer Transformations Semantics Conversations Data Requests Permissions Take a tour

Ask

Documents

Saved analyses. Each stores the analysis plan, not the answer - re-running picks up the latest data through the same playbook. Ask "why did sales drop in June?" in the Ask tab to create one.

NamePlaybookPeriodUpdatedActions
Loading...

Reports

Scheduled deliveries

Recipients receive data under the report OWNER's location access, not their own.

Templates

Upload the .xlsx you already use, say what belongs in it, and it is filled with live data. Plain grids only - a template containing charts or images is refused, because they cannot be preserved when the file is written. Scheduled deliveries run under the template OWNER's location access.

My KRA

Upload the sheet you are measured on, or paste your objectives one per line. Each one is checked against the semantic layer: the ones it can report become a running brief, and the ones nothing covers can be raised as a request for the data team. Every figure is scoped to your own location access, and a window the warehouse has not loaded is reported as "no data" rather than as a fall. A brief can be emailed on a schedule, but only if you ask for one - uploading a KRA enrols you in nothing.

Data Requests

KRA objectives that nothing in the semantic layer measures. Each one names what a user is accountable for and what data would answer it. The queue is the record of truth - filing to the tracker is best-effort, so a request whose push failed is still here. People measured on the same thing join one request, so "+N waiting" is how many are blocked on it. Marking one Done re-checks every objective on it, so a measure you have just added starts reporting without anyone re-uploading their KRA.

Metrics

Create a metric from the Ask tab ("Save as Metric" on any single-number answer). Evaluations run under the owner's data access.

Conversations

Every question asked of the assistant, grouped by the person who asked it. Search matches an email, a conversation title, or the text of any message inside it. You can read a user's conversations only if you hold every department they hold - a transcript contains the figures they were shown. Opening a transcript is recorded in the audit log.

Permissions

Role, departments and allowed store locations per user. Departments decide WHICH datasets a user may query; locations decide WHICH ROWS within them - both apply, and departments apply to admins too. Scheduled reports and metric alerts always run under the OWNER's access.

Departments

Which cubes belong to which team. A cube listed under no department is denied to everyone and hidden from the assistant - that is the deny-by-default, and it is why unregistered cubes are flagged below. Changes apply immediately, with no restart.

LLM Providers

Vendor-agnostic backends for the Ask agent (Anthropic Messages API). Leave Base URL empty for Anthropic; use https://api.deepseek.com/anthropic with model deepseek-chat for DeepSeek. The Ask tab lets users pick which provider answers; the Default one is used otherwise.

Data Sources

Connections

Sync

Transformations

dbt models over the raw ingested tables. Saving compiles the model; Build runs it into ClickHouse. Expose the result to the agent by adding a cube on the Semantics tab.

Semantics

Measure and dimension descriptions are the text the AI reads to map a question onto a field. Editing one here applies to the live model without a restart.

Logs

Data Explorer

Row and column counts, when each table was last refreshed, and a read-only SQL console. Reads ClickHouse directly - nothing here can change the warehouse.

Database

Table

Add Source

ClickHouse ORDER BY / dedup key. Must be a unique field — leaving it blank or using a non-unique field collapses rows.
Reusable credentials. Manage these in the Connections tab. Required unless you switch back to inline credentials.
How often the scheduler auto-syncs this source. Leave blank for manual/UI-only.
Rebuilds the dbt models downstream of this source's tables.

New Model

Lower snake_case. Becomes the ClickHouse table clean.<name>.
MergeTree ORDER BY. Comma-separated for a composite key.
Only tables you read via source('raw', ...). Registers them with dbt.
A single SELECT. Reference a built mart with {{ ref('name') }} or a raw table with {{ source('raw', 'name') }}. The config() header is generated - do not include one.

Add Member

Lower snake_case. This is what the AI will refer to.
A column on the cube's table, or an expression.
The AI reads this to decide whether the field answers a question. Say what it means, and any trap in using it.

Add Connection

Field Preview & Mapping

Sample Data

Save as Report

The report stores the question + generated query and re-runs live each time it is opened.

Schedule Analysis

Use day NAMES (mon, tue...) not numbers - the scheduler reads numeric day-of-week 0 as Monday, not Sunday. The analysis runs under YOUR data access and the document states that scope in the email.

Save as Metric

Add Department

Letters, digits and underscores. Used in access tokens - it cannot be changed later.
Tick a cube to put it in this department, then choose the column its rows are filtered by. A department with no cubes grants nothing.

Add your KRA

Free text. It appears on the brief and on any data request raised from it.
The brief's own window. Individual objectives keep whatever cadence their KRA states.
A line ending in a colon becomes an area heading. Targets written in plain English are read.
One objective per row. Columns like KRA / Objective / Measure / Target / Weightage are recognised automatically.

Edit KRA

Renaming applies to every KPI under it.
Every KPI of this KRA inherits it. Used to ORDER the brief, never as a multiplier on a figure - so a 25% KRA leads a 10% one.
The KRA's stated aim. Context for mapping and a heading in the brief - it is never measured itself; its KPIs are.

Edit KPI

The measurable line, as it reads on the sheet.
Which KRA it sits under. A new name starts a new group.
Quoted verbatim in the ticket when nothing can measure this. Leave it as the person wrote it.
Blank = nothing measures this yet, which is a valid state and the one that raises a data request.
Required to report a period. Without it there is no window.
Leave neutral if unsure. A wrong direction tells somebody they missed a target they beat.
A reduction target is negative, e.g. -5 with "down is good".

Triage data request

Waiting on it:
Free text. Nothing is granted or emailed by setting it.
This is what every requester is shown when the request is closed. Name the measure if there is one.

Request this data

Free text, passed to the data team as written. Say where the numbers live today if you know - a system, a report, a spreadsheet.

Data request

A source carrying the underlying records, ingested, modelled into a clean table, and exposed in the semantic layer. Once the measure exists the KPI is re-checked automatically and starts reporting - nobody re-uploads anything.
Mark the request Done only once it is exposed, not once the table is built. The re-check asks the same question the copilot asks.
Full ticket text

      

Upload Template

Your own grid - a header row, and either empty rows below it or rows you have already typed in. Charts and images are refused: they cannot survive being written to.
Plain English - what the report should contain. The period is set below.
A relative period is re-resolved on every fill, so a scheduled template stays current. Choose a fixed range only for a report pinned to one window - a closed financial period, an audit range - which will report the same dates forever.
Both ends are inclusive. This window never moves, so a schedule on this template will report the same dates every time.
The column whose values say which row is which - the date column on a date-wise sheet. Values already in it are matched against, so figures land on the right row instead of being written top to bottom. Required when several columns hold the same figure split by store, category or channel.

Columns to fill

Tick the columns that should receive data and say what each one holds. Anything left un-ticked is never written to.

Schedule Report

Sent as an HTML summary + Excel attachment. Recipients see the report OWNER's data scope.

Add LLM Provider

Leave blank to keep the stored key.

Add User

Which datasets this user may query at all. Applies to admins too - an admin sees every location of their own departments, and nothing outside them. No departments = no data.
Which rows within those departments. A non-admin with no locations sees NO data (deny-by-default).

First time here?

BI Copilot answers questions about the business in plain English - tables, charts, full written analyses, scheduled reports and alerts. Take the quick tour and you will know where everything is in about a minute.