- Entity: Customer ✓
- Numerator: COUNT(DISTINCT customer_id) ✓
- Time Grain: Monthly ✓
- Filters: churn_date IS NULL ≠
Metric Contracts
Define Exactly What The Metric Is Allowed To Mean
Expand a Metric Silhouette — Entity, Numerator, Denominator, Time Grain, Allowed Dimensions, Filters, Owner — into seven fixed fields. Overlay a second team's definition and see exactly which field doesn't line up.
Metric contract · Active Customers
EntityCustomer (billing account)
NumeratorCOUNT(DISTINCT customer_id)
Denominator1 — count metric, no ratio
Time GrainMonthly, as of last day of month
Allowed DimensionsRegion, Plan, Industry
Filtersstatus = 'active' AND churn_date IS NULL
OwnerFinance · Priya Nair
Silhouette locked — Overlay Definitions to compare against Growth's version of “Active Customers.”
Definition overlay
Same metric name, different silhouette
Growth's “Active Customers” outline doesn't match Finance's on three of seven fields.
- Create Metric Contract — start a new seven-field definition
- Overlay Definitions — compare two teams' versions of one metric
- Lock Metric Grain — prevent a grain change without review
- Add Allowed Dimension — extend which slices are safe
- Publish Contract — make it the metric of record
A Correct Query Can Still Produce The Wrong Metric.
Illuminate The True Grain Of Every Metric.
GrainLux is the AI Semantic Data Reliability Layer between your warehouse and every model, metric, and dashboard built on top of it — grain-aware, metric-native, explainable, and deterministic.