1,203,400.00
Shuzi · Self-service BI
Comb yourdata clear.
Many sources, many definitions, many reports, combed into one. Data with versions, metrics with definitions, answers with provenance, permissions with boundaries.
The sources are a mess.The definitions shouldn't be.
- 1 setof metric definitions, shared by reports, AI and APIs
- 10databases to connect, plus file upload and API pulls
- 1 placeenforces row-level permissions, and no one goes around it
Product tour
Write it in a notebook.
Ask it in chat.
Share it as an app.
Three ways in, one semantic layer underneath. The same definitions, the same permissions, the same numbers, whichever door you use.
SQL
-- Q3 revenue by category, confirmed orders only
SELECT category,
SUM(amount) AS revenue
FROM orders
WHERE status = 'confirmed'
AND quarter = 'Q3'
GROUP BY category
ORDER BY revenue DESC5 rows · done
Result
| Category | Revenue | QoQ |
|---|---|---|
| Apparel | 454k | +3.9% |
| Home | 448k | +8.2% |
| Electronics | 304k | -1% |
| Beauty | 270k | +1.9% |
| Grocery | 213k | +6% |
Chart
Revenue by category
- 454Apparel
- 448Home
- 304Electronics
- 270Beauty
- 213Grocery
Runs in a restricted SQL sandbox, on tables you are allowed to read.
Ask in plain words. The Agent reads the semantic layer, shows its steps, then draws the answer.
Compare revenue by region and quarter, stacked by category.
- cube_list_models1 model
- cube_get_metadataretail_model
- cube_queryrevenue × region × quarter
Only data you are allowed to see
Revenue rose every quarter in all three regions. East is the largest, Apparel leads everywhere, and Electronics is the only category that shrank.
- Apparel
- Home
- Beauty
- Electronics
- Grocery
- Revenue
- 1689k
- +4.0% vs. last quarter
- Top category
- Apparel
- Fastest growing
- Home
Revenue by category
Channel mix · Apparel
Row-level permissions apply to every viewer.
Illustrative interface with sample data from a fictional retailer. No real data is connected, and no real AI is called.
Heard around the office
- Why doesn't this number match Finance's?
- Can we rerun last month's report on the data as it was then?
- Who gave them access to that table?
- I just want one number, and now I'm waiting on the data team.
- Can I actually trust the number the AI gave me?
- The report has had six versions. Which one is right?
01 · Definitions
One word,
three numbers.
Finance counts recognized revenue, Sales counts booked orders, Operations counts cash received. Each has its own report and its own SQL, and the weekly meeting turns into a reconciliation.
1,318,950.25
1,176,280.40
Sample data. Once the definition is shared, reports, the AI assistant and the API all read the same one.
02 · Five moves
From source to answer,
five moves.
Every step has a version, a definition and a record. That comes from structure, not from convention.
01 / 05 · Ingest
Can we rerun last month's report on the data as it was then?
However messy the source, it lands the same way.
Databases, APIs and uploaded files are pulled, transformed and merged by workflows, then landed as immutable, versioned snapshots. Every refresh is a new version, and a bad one can be rolled back.
- Workflow-based pullsOrchestrate pulls and transforms visually. Data from different sources is first synced into managed snapshots, then analyzed together.
- Immutable versionsA released snapshot is never edited. It can be traced and rolled back, and a referenced version is never deleted by mistake.
- Separated reads and writesOnly the scheduler writes; queries read a read-only replica. The API never changes data behind your back.
Sources
- PostgreSQL
- SQL Server
- REST API
- CSV · XLSX
Workflow
- 01Extract
- 02Transform
- 03Merge by key
Snapshots
- v13parquet immutable
- v12parquet
- v11parquet
snapshot v13 · parquet · immutable
02 / 05 · Model
Why doesn't this number match Finance's?
Define it once.
On a canvas, arrange tables, joins, dimensions and measures into a semantic model, validate it, and release it. Reports, the AI assistant and open APIs all read the same definition, so no one computes their own.
- Visual modelingTables, joins, dimensions and measures are built on a canvas, with the native definition available when you need it.
- Draft to releaseValidate first, then release the whole thing as a new revision. Historical definitions are never rewritten.
- Consistent calculationsReports, the AI assistant and open APIs calculate from the same semantic models, with results you can verify.
measures:
- name: revenue
type: sum
sql: amount
filters:
- sql: "{CUBE}.status = 'confirmed'" ref(revenue)
- Reports
- AI assistant
- API
- PG port
- MCP
revenue = SUM(amount) WHERE status = 'confirmed'
03 / 05 · Explore
I just want one number, and now I'm waiting on the data team.
Business teams click. Analysts stop queuing.
On a published model, pick dimensions, drag measures, switch charts and add filters. The reason behind a number is one click away.
- Drag to exploreSwitch dimensions, measures and chart types freely, and the result refreshes instantly.
- Drill and filterGo from totals to detail, with filters saved alongside the chart.
- SQL for analystsAnalysts can write SQL while preparing data, but the result must land as a managed table before reports can use it.
Dimensions
Measures
Revenueview → members → query → chart
04 / 05 · Ask
Can I actually trust the number the AI gave me?
Ask your data. Answers come with provenance.
Ask in plain language. The assistant reaches data only through the semantic layer: list models, read metadata, run a query. Every step is laid out for you, and runs with the asker's own permissions.
- Visible stepsWhich tool was used and which members were queried, all in plain view and open to review.
- One permission boundaryModels and rows you cannot see are invisible to the assistant too.
- Your choice of model serviceAdmins configure an OpenAI-compatible provider, a model and a key, and the key is stored encrypted.
Which region earns more?
- cube_list_models1 model
- cube_get_metadatarevenue_model
- cube_queryrevenue × region
Only data you are allowed to see
Sample answer: the North region earns more. Choose a region and quarter to see the sample result for that scope.
cube_list_models → cube_get_metadata → cube_query
05 / 05 · Publish
The report has had six versions. Which one is right?
Every change leaves a trace.
Every version can come back.
Charts form dashboards, drafts save automatically, and publishing fixes an immutable version. If something breaks, restore any earlier version. To move between environments, export to YAML.
- Autosaved draftsEdits are saved to the server as you work, so you can continue on another machine.
- Publish and restorePublishing fixes a historical version. Restoring first archives the current draft, then returns to the version you pick.
- Reports as codeCharts and dashboards export to YAML. A batch is validated and imported as a whole, and any failure rolls everything back.
Versions
- v7current
- v6·
- v5·
↺ Restore to v6
⇣ Export YAML
dashboard.yml · version 1 · dry-run → apply
03 · How it fits
Five layers.
One source of truth.
From raw sources to the answer on screen, every layer has one job and one boundary. Pick a layer to see what lives there.
Everything people touch reads from the layer below, never around it. Notebooks, the Agent, dashboards, data apps, the JSON API, MCP and the PG port all go through the same door.
- Notebook & SQL
- Agent chat
- Dashboards & apps
- API · MCP · PG port
Row-level permissions are enforced in exactly one place. If a decision cannot be made, the query is refused rather than let through.
- One enforcement point
- Refuse when unsure
- Same rows everywhere
Revenue is defined once, with its filter, and every chart, answer and API call reuses it. A published model pins the snapshots it reads, so a query never mixes old and new data halfway through.
- Dimensions
- Measures
- Joins
- Pinned snapshots
Every refresh writes a new immutable version, and nothing is edited in place. Only the scheduler writes; everything else reads.
- Immutable
- Parquet
- Primary keys required
Connect ten kinds of database, upload files, or pull from an API. Workflows extract, transform and merge them on a schedule.
- 10 databases
- CSV · Excel
- API pulls
- Scheduled workflows
Schematic. Layer names are simplified from the product architecture.
04 · Built by AI
Describe it.
Get a working app.
Tell the Agent what you want to see. It reads the semantic layer, writes a single-file data app and previews it right away. Review it, then save it as a data app.
Build a sales dashboard by region and category.
Sales overview
1689kRevenue · Q3 · Sample data
- Apparel
- Home
- Beauty
- Electronics
- Grocery
Let me test a price change and see revenue and margin.
Price what-if
- Revenue
- 474k
- +22k
- Gross margin
- 62.8%
- +1.8
Revenue forecast
Show customer retention by signup cohort.
Retention
Retention by cohort and month
Plot every account by revenue and growth and flag outliers.
Account map
Illustrative apps on sample data from a fictional retailer. Generated apps run in a sandbox with no network access and read data through the host, under your permissions.
05 · Governance
Same table, different people,
different rows.
Authentication, space authorization, row-level permissions and audit tighten in layers. Row permissions are enforced once, in the semantic layer, and reports, the AI assistant, the API and the PG port are treated alike. If no decision can be obtained, the request is refused, not allowed.
Try it: switch identity
Four entry points, one result
- Reports7,549,201.50
- AI assistant7,549,201.50
- API7,549,201.50
- PG port7,549,201.50
- 01
Identity
Accounts and OIDC sign-in. Before any data is touched, we check who you are.
- 02
Space and resource authorization
Assets belong to personal or team spaces, and folders and resources are granted to members.
- 03
Row-level permissions
A permission table decides which rows each person sees, enforced once in the semantic layer.
- 04
Audit
Key actions leave a record, so who did what and when can be looked up.
SQL in a sandbox
The SQL console runs in a restricted DuckDB sandbox with external file access turned off.
Outbound policy
Outbound requests from workflows and connections all follow one global outbound-access policy.
AI has your permissions
The assistant queries as the asker and does not inherit anything broader.
06 · Openness
Easy to bring data in.
Easy to take it out.
A native JSON API, MCP, a PG-protocol port, and charts and dashboards as YAML. Your data and definitions are not locked inside an interface.
Sources
- PostgreSQL
- MySQL
- Oracle
- SQL Server
- ClickHouse
- Doris · StarRocks
- Files · APIs
Cube Core
- Data modelingDimensions, measures, joins and views, defined once
- Access controlOne enforcement point for row access; views only
- Pinned snapshotsEvery query reads an immutable data version
- Open APIsJSON API · MCP · PG port
semantic layer
Consumers
- Dashboards & data appsIn the workspace
- AI agentsMCP
- Other systemsJSON API
- BI tools & ExcelPG port · Power Query
POST /api/v1/query
Authorization: Bearer <token>
{
"model_id": "valuation",
"view": "asset_view",
"query": {
"measures": ["asset_view.revenue"],
"dimensions": ["asset_view.region"],
"order": [["asset_view.revenue", "desc"]],
"limit": 100
}
}
// → { "data": [ … ], "release_id": "…", "snapshot_set_id": "…" }Native JSON queries, with the release and snapshot identifiers attached to every result.
Supported databases
- PostgreSQL
- MySQL
- Oracle
- SQL Server
- ClickHouse
- TiDB
- Doris
- StarRocks
- KingbaseES
- DuckDB
Plus CSV / XLSX upload and API pulls.
Database connections support SSH jump hosts and mutual TLS
07 · Who uses it
One platform, and three roles each take what they need.
Business teams
BeforeWait for the data team to pull numbers
NowExplore a published model yourself
BeforeCan't say where a number came from
NowAI answers carry tool steps and definitions
BeforeSeveral reports, several numbers
NowOne shared metric definition
Data teams
BeforeOne SQL per report
NowPrepare once, model once, publish once
BeforeManual refreshes, hard-to-trace errors
NowWorkflow refreshes, a new version every time
BeforeAfraid that changing a definition breaks everything
NowValidate a draft, release a new revision as a whole
IT & leadership
BeforePermissions by convention and group chat
NowSpace authorization plus row-level permissions, enforced in one place
BeforeExports and screenshots everywhere
NowQueries go through an authorized API, and actions are audited
BeforeWorried AI will overreach
NowAI has the asker's permissions, and its steps are visible
Good questions
What is Shuzi?
Shuzi connects ingestion, preparation, semantic modeling, analysis and publishing into one pipeline, so teams work from shared metric definitions.
Do I need to know SQL?
Business users can use published reports, the explorer or the AI assistant. Analysts can use SQL during data preparation.
Can the AI see data I'm not allowed to see?
No. The assistant queries as the asker, through the same authorization and row-level permissions.
Can I query from other tools?
Yes. Published models are available through the JSON API, MCP or the PG port. Actual access requires authentication and authorization.
Is the data on this site real?
No. This site uses only local sample data and preset answers. Real data is used after you sign in, under your own permissions.
Take your datafrom tangled to clear.
Try it on sample data first, then bring your own.