Define a metric once

Metricflow keeps the definition of each number in one file, so a report cannot quietly disagree with another.

It is a single binary. Point it at your database, write metric files, query them by name.

A metric file

Files live in a repository and are reviewed before they take effect.

metric "active" {
  source  = table("events")
  measure = count_distinct("user_id")
  where   = "kind = 'seen'"
  by      = ["plan", "day"]
}

Why it stays consistent

Reports never write their own aggregation. They ask for a named metric sliced by a dimension, so two people always get the same number.

Metricflow, a self-hosted tool. Run from your own machine.