AI Metric Grain Intelligence Platform · AI Semantic Data Reliability Layer

GrainLux

Every Number Has A Grain

Know The Grain Before You Trust The Number.

Illuminate The True Grain Of Every Metric — because a correct query can still produce the wrong metric.

  • Grain-Aware
  • Metric-Native
  • Explainable
  • Warehouse-Connected
  • Deterministic
  • Developer-Friendly
Inspect A Metric Create Workspace Sign In
Resolution Handle · same warehouse · five grains
Active Customers6,412
Grain: Customer — true

Drag Event → User → Workspace → Customer → Market. Only Customer is the true grain of Active Customers.

EventUserWorkspaceCustomerMarket
Event482,910

Every product usage ping — logins, clicks, API calls. One person can fire forty events a day.

User58,204

Distinct user_id — collapses events, but still counts every teammate plus test and duplicate accounts.

Workspace21,340

Distinct workspace / tenant id — collapses users, but dead trials and abandoned workspaces still count.

Customer6,412

The billing entity in the contract table. This is the true grain of “Active Customers.”

Market7,986

Customer × market/region — re-inflated when one multi-region account joins to more than one row.

The pain is not the query

SQL grain errors don't throw — they just answer confidently wrong

Four ways the same warehouse produced two, three, or four numbers, all from technically correct SQL.

Fanout

Average revenue per customer inflated after one join.

orders ⨝ contacts ⨝ subscriptions — one customer counted many times

ARPC rose overnight when orders were joined to contacts and subscriptions without a grain key. GrainLux names the true grain of each table and explains why the ratio ballooned.

Grain mismatch

“Active Customers” actually meant COUNT(DISTINCT user_id).

SELECT COUNT(DISTINCT user_id) AS active_customers

Two different grains sharing one metric name — Growth and Finance were never talking about the same thing.

Filter order

The filter was correct. The join happened first.

WHERE plan = 'enterprise' -- after a LEFT JOIN duplicated invoice rows

Predicate pushed after a row-duplicating join keeps the duplicates and drops the discipline.

Silent drift

A model rename shipped Tuesday. Three dashboards changed Wednesday.

ALTER: renamed fct_billing_events → fct_billing_events_v2

Correct SQL, correct deploy — the grain underneath moved anyway, and nobody downstream was told.

Ten instruments, one reliability layer

Every surface GrainLux gives your data team

Not dashboards. Instruments for finding, defining, and protecting the true grain of a metric.

Public inspection

Paste a metric — see its grain reading

No warehouse connection required. We infer entity, grain, and fanout risk from the definition alone.

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.