Databricks Unity Catalog logoDatabricks Unity Catalog integration

Your Unity Catalog metric view defines the metric. KPI Tree explains the movement, names the owner and proves the fix.

Pick a Unity Catalog metric view on your Databricks connection.

What Unity Catalog metric views are, and where they stop.

Databricks’ semantic layer, governed in the catalog itself.

A Unity Catalog metric view is a governed object that declares business measures over a source table: the dimensions you can group by and the measures, each an aggregation expression, queried with the MEASURE() function so that every consumer computes the same number. It is Databricks' semantic layer. Genie Agents, AI/BI dashboards and any SQL client read the same definition, under the same Unity Catalog grants.

It settles what Revenue is. It does not say why Revenue fell, who owns the driver, or whether the fix worked. Those questions live in a layer above the semantic layer, and that is the layer this integration adds. The definition stays in Unity Catalog and Databricks keeps doing the maths. The causal tree, the owners and the verified outcomes live in KPI Tree, and Canopy hands all of it to your people and your agents.

Governed in Unity Catalog. Explained in KPI Tree. One metric view, the whole loop.

The sync runs on your existing Databricks connection. KPI Tree lists the metric views in the catalog you chose, reads the one you pick with DESCRIBE TABLE EXTENDED AS JSON, and turns every measure into a tracked metric queried with MEASURE() at day grain. Databricks computes every value, so the number here is the number your metric view gives Genie Agents and every other consumer. dbt metrics that build into Databricks can sit on the same tree.

What your metric view does not know is why Revenue fell, who owns Conversion, or whether Monday's release moved it. That is the layer KPI Tree adds: a causal metric tree re-tested every night, RACI ownership on every node, action plans measured against a forecast, and Canopy, the business context layer that hands all of it to your people and to the agents they already use over MCP. Your metric view stays the single source of truth for how a metric is calculated. KPI Tree becomes the source of truth for what to do about it.

Every measure, as defined, nothing re-declared

Measures come across with their expressions and comments, and the dimensions the view declares. The rollup for weeks and months is inferred from each expression, window measures take their latest value, and you can change any of it in KPI Tree without touching the view.

Sync a Unity Catalog metric view

Create Dimension Metrics · on
Unity Catalog metricmain.sales.sales_mv

DESCRIBE TABLE EXTENDED main.sales.sales_mv AS JSON

MEASURErevenueSUM(order_total)sum
MEASUREordersCOUNT(1)sum
MEASUREactive_customersCOUNT(DISTINCT customer_id)last
DIMENSIONregionSTRING
DIMENSIONorder_dateDATEday grain

Databricks computes every value. Rollup inferred from each expression.

One query per measure, everything else in memory

Each measure is one MEASURE() query at day grain, returned as Arrow and cached. Comparisons, rollups, breakdowns and the nightly correlation and causality sweep run in KPI Tree’s own engine, so the warehouse only works during a sync.

Warehouse queries · last sync

4 total
Revenue1 query · 1.8s · 412 rows
Orders1 query · 1.2s · 412 rows
Average order value1 query · 1.6s · 412 rows
Active customers1 query · 2.3s · 412 rows

0 warehouse queries for

period comparisons, weekly and monthly rollups, dimension breakdowns, nightly correlation and causality tests. All computed in memory from those four results.

Dimension metrics, created automatically

Switch on Create Dimension Metrics and every dimension you chose becomes a child metric per value: Revenue (Region: EMEA), Revenue (Region: APAC), and so on, filtered in the MEASURE() query so Databricks still does the maths. Each child gets its own owner, baseline and nightly driver tests.

Revenue

Create Dimension Metrics · on

dimensions: region, channel · 5 child metrics created

Revenue (Region: EMEA)£612k4%
Revenue (Region: APAC)£318k21%
Revenue (Region: UK)£350k2%
Revenue (Channel: Web)£880k1%
Revenue (Channel: App)£400k9%

Each child has its own owner, baseline and nightly driver tests. No YAML changes.

Re-sync as a diff, trees and owners untouched

Every sync is compared with the last. New measures appear, changed ones update in place, removed ones retire with their history kept. Ownership, trees, action history and any rollup you set by hand stay exactly where you left them.

Sync summary

Completed 06:14

42

Found

3

Created

38

Updated

1

Archived

0

Skipped

Dimension metrics created118

customer__customer_id skipped: 48,211 values, above the 50 value limit

Trees, owners and action history preserved · gross_margin renamed in place

Connected in three steps. The connection you already have, the view you already govern.

The sync rides on an existing Databricks connection. Point it at the catalog, pick the view from the list, and Databricks does the rest.

Connect a SQL warehouse

A Databricks connection with a personal access token or an OAuth service principal, pointed at a SQL warehouse or a cluster on Runtime 16.2 or later, because discovery reads each view with DESCRIBE TABLE EXTENDED AS JSON. Unity Catalog grants decide what the principal can see.
  • SQL warehouse, or Runtime 16.2 or later
  • Read access only, Unity Catalog grants apply
  • Enabled per workspace, so ask us to switch it on

Databricks SQL warehouse

Connected · SELECT 1 ok
Server hostnamedbc-a1b2c3.cloud.databricks.com
HTTP path/sql/1.0/warehouses/9f2c…
Catalog · schemamain · sales
AuthService principal · OAuth M2M
Unity Catalog permissions applyRead-onlyServerless cold start retried

Pick a view and sync

KPI Tree lists the metric views in the catalog and schema you chose and reads the one you pick. Choose the measures and dimensions to keep on the Metrics tab, switch on Create Dimension Metrics if you want breakdowns, and start the sync. It runs as a background job and reports what it created, updated, retired and skipped, one view per run.
  • Views discovered from the information schema, chosen from a list
  • Selective sync: pick measures and dimensions one at a time
  • Runs as a background job, so large views complete reliably

Sync a Unity Catalog metric view

Create Dimension Metrics · on
Unity Catalog metricmain.sales.sales_mv

DESCRIBE TABLE EXTENDED main.sales.sales_mv AS JSON

MEASURErevenueSUM(order_total)sum
MEASUREordersCOUNT(1)sum
MEASUREactive_customersCOUNT(DISTINCT customer_id)last
DIMENSIONregionSTRING
DIMENSIONorder_dateDATEday grain

Databricks computes every value. Rollup inferred from each expression.

Databricks does the maths

Each measure becomes one MEASURE() query grouped by the view’s date dimension, cast to a date if it is a timestamp. Dimension metrics carry their filter in the query. Databricks computes every value under your principal, so the numbers match what Genie Agents and every other consumer of the view returns.
  • Native MEASURE() queries, one per measure
  • Day grain from the view’s DATE or TIMESTAMP dimension
  • Results returned as Arrow and cached
revenue.sqlrun by Databricks

-- One query per measure, at day grain, run by Databricks

SELECT CAST(order_date AS DATE) AS metric_date,

MEASURE(revenue) AS metric_value

FROM main.sales.sales_mv

GROUP BY 1

ORDER BY 1;

What comes across from a metric view. And what stays exactly where it is.

The view carries everything KPI Tree needs to query a measure. Databricks keeps the calculation. Nothing is written back.

Measures with expressions and comments

Every measure in the view, with its expression and its comment as the metric description, as long as the view has a DATE or TIMESTAMP dimension to group by. Joins, the source table and lineage are not read, and a window measure is treated as a running value.

Dimensions child metrics created for you

The dimensions the view declares. Pick the ones that matter, up to five per measure, and KPI Tree probes their distinct values and creates a child metric per value, within a cardinality limit of 15 by default, adjustable between 2 and 200.

Rollups inferred, then yours

A metric view carries no rollup rule, so KPI Tree infers one from each expression: sums and counts add up across weeks and months, averages, ratios and distinct counts take the latest value, min and max carry through, and a window measure takes its latest value. The sync report shows every inference, and a rollup you set by hand is never overwritten.

Ask an agent the same question twice. Once on Genie, once on Canopy above it.

You already have a Genie Agent over this metric view, and it comes back with a governed number. The fair question is what Canopy adds. The pair below shows the shape of the difference, and the benchmark beneath it measures it on eight real business questions. It ran on Snowflake; the Cortex Analyst arm is the closest stand-in for Genie on a metric view.

The semantic layer alone

A correct number, and a dead end.

A Genie Agent over a metric view gets the definition right every time. It does not get the cause, the owner or the follow-up, so the question goes back to the data team.

Why is revenue down this month?
Revenue is £1.28m month to date, 15% below last month. The metric is defined as the sum of order_total where status is complete.
I do not have information about what caused the change or who is responsible. Would you like me to break it down by region?

Canopy on top of dbt

The driver, the owner, the build check and the next step.

Canopy reads the causal tree, the RACI, the build history from your dbt artifacts and the open tasks, so the first answer is the one people act on.

Why is revenue down this month?
Conversion rate is the driver, down 23%, Granger-causal at a three day lag. Traffic and order value are flat. The drop starts the day after Monday's checkout release.
The data is sound: fct_orders built at 06:12 and every source passed freshness. Sarah Chen is Accountable and a rollback task is already open. Shall I attach this analysis to it?
driver · q < 0.05owner · Sarah Chenbuild · freshtask · open

Part of the Databricks integration. SQL metrics on the same connection, dbt beside it.

The Databricks page covers the connection, authentication, SQL warehouses and SQL metrics. If your definitions live in dbt and build into Databricks, the dbt Semantic Layer integration reads them and runs the SQL on this same warehouse.

Common questions

What is a Unity Catalog metric view?

A governed object in Databricks that declares business measures over a source table: the dimensions you can group by and the measures, each an aggregation expression, queried with the MEASURE() function so every consumer computes the same number. It is Databricks’ semantic layer, read by Genie Agents, AI/BI dashboards and any SQL client under the same Unity Catalog grants.

What do I need before I can sync a metric view?

A Databricks connection whose principal can read the view, pointed at a SQL warehouse or a cluster on Runtime 16.2 or later, because discovery reads each view with DESCRIBE TABLE EXTENDED AS JSON. If the compute cannot serve the JSON description, KPI Tree says so rather than guessing. The connector is enabled per workspace, so ask us to switch it on.

How does the sync turn a metric view into metrics?

KPI Tree lists the metric views in the catalog and schema you chose from the information schema, reads the one you pick with DESCRIBE TABLE EXTENDED AS JSON, and turns every measure with a date dimension into a tracked metric queried with MEASURE() at day grain. A timestamp dimension is cast to a date. Databricks computes every value.

How does KPI Tree decide whether to sum or take the last value across a week or a month?

A metric view carries no rollup rule, so KPI Tree infers one from each measure’s expression: sums and counts add up across weeks and months, averages, ratios and distinct counts take the latest value, min and max carry through, and a window measure takes its latest value. The sync report shows every inference, and a rollup you set by hand in KPI Tree is never overwritten by a later sync.

What are dimension metrics?

With Create Dimension Metrics on, KPI Tree probes the distinct values of each dimension you chose and creates a child metric per value, filtered in the MEASURE() query, so Revenue with a Region dimension gains Revenue (Region: EMEA), Revenue (Region: APAC) and so on, each with its own owner, baseline and nightly driver tests. Up to five dimensions per measure are expanded, and a dimension with more distinct values than the limit, 15 by default and adjustable between 2 and 200, is skipped and reported rather than truncated.

Are comments, joins and lineage read?

Measure comments come across as metric descriptions. Joins, the source table and Unity Catalog lineage are not read, and Genie Agents and AI/BI dashboards are not used. Descriptions and relationships can be added in KPI Tree and survive re-syncs.

What happens when the metric view changes?

Sync it again from the connection page. The run is compared with the previous one and the report lists what was created, updated, retired and skipped. Trees, ownership, action history and any rollup you set by hand are preserved.

How does this affect Databricks costs?

One MEASURE() query per measure on your schedule, returned as Arrow and cached for a TTL you set. Every comparison, rollup, correlation and drill-down runs in KPI Tree’s own engine, so the warehouse only works during a sync.

Can metric view measures share a tree with dbt or SQL metrics?

Yes. Measures from metric views, SQL metrics on the same Databricks connection, dbt metrics and metrics from other warehouses all sit on the same tree, each keeping its own calculation source.

Related integrations. More sources that work with KPI Tree.

You governed the definition. Now govern the decision.

Sync a Unity Catalog metric view and see your own metrics as a causal tree with named owners and verified actions, in a demo on your data.

The guide

Semantic layer vs business context layer: what a definition settles, and what it cannot.

Read the guide

Experience That Matters

Built by a team that's been in your shoes

Our team brings deep experience from leading Data, Growth and People teams at some of the fastest growing scaleups in Europe through to IPO and beyond. We've faced the same challenges you're facing now.

Checkout.com
Planet
UK Government
Travelex
BT
Sainsbury's
Goldman Sachs
Dojo
Redpin
Farfetch
Just Eat for Business