Catalog
The catalog reads the schema of your connections (PostgreSQL, MySQL, SQL Server and SQLite families) and lets you annotate every column with a description. Descriptions show up in editor autocomplete and in global search. On the other engines queries work but the catalog stays empty — introspection only ships once verified against a real instance.
Metrics
A metric is SQL with a name — "revenue", "active customers" — defined once. In any query, `{{metric:revenue}}` expands to the metric's SQL as a subquery, so a report, a dashboard and an ad-hoc query answer "what is revenue?" the same way. Limits: 3 metrics on Solo, 15 on Pro, 50 on Team, 500 on Business.
SELECT region, SUM(amount) AS revenue
FROM ({{metric:gross_revenue}}) r
GROUP BY regionAn unknown slug is a hard error at run time, not silence — a renamed metric breaks the query that cites it, on purpose.
Quality tests
Every query can carry tests that run on each execution — scheduled or manual — and record pass/fail with a message. A failing test with warning or critical severity raises the `data_quality.test_failed` event on outbound webhooks.
| Rule | What it checks |
|---|---|
| rows_gte / rows_lte / rows_eq | row count against a threshold |
| not_empty | at least one row |
| freshness_hours | the newest value in a timestamp column is within N hours — the freshness SLA: "updates every hour, or alert" |
| no_nulls | a column with no nulls |
| unique_col | a column with no duplicates |
| custom_sql | your own SQL that must return one truthy row |