shuzi
Open the app

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.

notebook · retail_q3Sample data

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 DESC

5 rows · done

Result

CategoryRevenueQoQ
Apparel454k+3.9%
Home448k+8.2%
Electronics304k-1%
Beauty270k+1.9%
Grocery213k+6%

Chart

Revenue by category

  • 454Apparel
  • 448Home
  • 304Electronics
  • 270Beauty
  • 213Grocery

Runs in a restricted SQL sandbox, on tables you are allowed to read.

agent · retail_modelSample data

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.

  1. cube_list_models1 model
  2. cube_get_metadataretail_model
  3. 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.

Revenue by region, quarter and category
0200400600800Q1Q2Q3EastQ1Q2Q3SouthQ1Q2Q3North
  • Apparel
  • Home
  • Beauty
  • Electronics
  • Grocery
app · retail_overviewPublished
Sample data
Revenue
1689k
+4.0% vs. last quarter
Top category
Apparel
Fastest growing
Home

Revenue by category

  • Apparel454k
  • Home448k
  • Beauty270k
  • Electronics304k
  • Grocery213k

Channel mix · Apparel

  • Online58%
  • Stores30%
  • Wholesale12%

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.

FinanceRevenue

1,203,400.00

SUM(recognized_amt)Recognized revenue
SalesRevenue

1,318,950.25

SUM(order_amt)Booked orders
OperationsRevenue

1,176,280.40

SUM(cash_received)Cash received
revenue = SUM(amount) WHERE status = 'confirmed'Largest gap between the three 142,669.85

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.
Learn more
workflow · revenue_dailySample data

Sources

  • PostgreSQL
  • SQL Server
  • REST API
  • CSV · XLSX

Workflow

  1. 01Extract
  2. 02Transform
  3. 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.
Learn more
semantic_model · valuationSample data
valuationsrevenue · count
funds
regions
calendar
products
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.
Learn more
explore · revenue_modelSample data

Dimensions

Measures

Revenue

view → 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.
Learn more
ask · revenue_modelSample data

Which region earns more?

  1. cube_list_models1 model
  2. cube_get_metadatarevenue_model
  3. 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.

North
1,003,000.00
South
666,000.00

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.
Learn more
valuation.dashboard.ymlSample data
valuationPublished · v7Autosaved
Total revenue1,669,000.00

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.

app · sales_overviewBuilt by Agent

Sales overview

1689kRevenue · Q3 · Sample data

045090013501800Q1Q2Q3All regions
  • Apparel
  • Home
  • Beauty
  • Electronics
  • Grocery
Sandboxed · your permissions

Let me test a price change and see revenue and margin.

app · price_whatifBuilt by Agent

Price what-if

Revenue
474k
+22k
Gross margin
62.8%
+1.8

Revenue forecast

Today
Sandboxed · your permissions

Show customer retention by signup cohort.

app · retentionBuilt by Agent

Retention

Retention by cohort and month

Sandboxed · your permissions

Plot every account by revenue and growth and flag outliers.

app · account_mapBuilt by Agent

Account map

Revenue →↑ GrowthOutlier
Sandboxed · your permissions

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

Signed in as
Portfolio companyRegionValuation
Xinghe OneEast1,284,500.00
Yunshan AssetsEast963,200.50
Lanwan EnergySouth752,100.00
Beichen ParkNorth1,438,700.25
Haitang FundSouth612,000.00
Songxi SolarEast884,000.00
Yuanxiu LogisticsNorth523,300.00
Langrun TechSouth709,800.00
Qinghe AgriNorth381,600.75

Visible rows 9 / 9

Filter — (no filter)

Total 7,549,201.50

Four entry points, one result

  • Reports7,549,201.50
  • AI assistant7,549,201.50
  • API7,549,201.50
  • PG port7,549,201.50
  1. 01

    Identity

    Accounts and OIDC sign-in. Before any data is touched, we check who you are.

  2. 02

    Space and resource authorization

    Assets belong to personal or team spaces, and folders and resources are granted to members.

  3. 03

    Row-level permissions

    A permission table decides which rows each person sees, enforced once in the semantic layer.

  4. 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

  1. Data modelingDimensions, measures, joins and views, defined once
  2. Access controlOne enforcement point for row access; views only
  3. Pinned snapshotsEvery query reads an immutable data version
  4. 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
Illustration. The PG port is exposed by an administrator at deployment, internal networks only; Excel goes through Power Query calling the JSON API or a CSV import, since Cube Core has no direct Excel connector.
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

Learn more

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

Learn more

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

Learn more

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.