Introducing MetricFlow, Transform’s open source metric framework.

Build and maintain all of your metric logic in code. Get consistent metrics across every team and every tool.

MetricFlow

Your open source metrics layer

MetricFlow is a metrics layer that sits on top of your data warehouse. Define “metrics”—like active users, revenue, and net dollar retention—in code. Then use the same logic across your entire organization. In MetricFlow, you define these metrics in YAML and export them as REST endpoints.

Powerful semantic models for your metrics

MetricFlow constructs a relational graph of your underlying data model—so you can easily build and aggregate even your most complex metrics to any granularity. Powerful abstractions mean you spend less time configuring data and more time on strategic work.

Learn More
With MetricFlow
Without MetricFlow

Pull metrics into downstream applications

With MetricFlow’s API-layer, called MQL (MetricFlow Query Language), connect with a range of downstream tools and express metric requests through various interfaces. MQL eliminates the need for writing (or copy-pasting) SQL into last-mile data analysis tools.

Learn More

Create a consistent data model across your stack

Stop redefining metric logic in every query. Use MetricFlow to generate data marts (also called denormalized or summary tables) back to your warehouse for your most-popular metrics and dimensions. This keeps your data models consistent and eliminates repetitive work.

Learn More

Create a consistent data model across your stack

SQL

SELECT
m.meetings_per_sales_person
, sales_28.gross_sales_last28
, COALESCE(m.ds, sales_28.ds) AS ds
FROM (
SELECT
  CAST(meetings AS DOUBLE) / NULLIF(sales_persons_with_a_meeting, 0) AS meetings_per_sales_person
  , ds
FROM (
  SELECT
    SUM(1) AS meetings
    , COUNT(DISTINCT m.sales_person_id) AS sales_persons_with_a_meeting
    , m.ds
  FROM DEMO_DB.MEETINGS AS m
  JOIN DEMO_DB.PRODUCTS AS p
    ON p.product_id = m.product_id
    AND p.ds = m.ds
  WHERE p.category = 'API'
  GROUP BY m.ds
    )
) AS m
FULL OUTER JOIN (
  SELECT
    SUM(s.gross_sales) AS gross_sales_last28
    , d.ds
    FROM (
      SELECT
        SUM(t.sales_price) AS gross_sales
        , t.ds
      FROM DEMO_DB.TRANSACTIONS AS t
      JOIN DEMO_DB.PRODUCTS AS p
        ON p.product_id = t.product_id
        AND p.ds = t.ds
      WHERE p.category = 'API'
      GROUP BY
        t.ds
    ) s
     INNER JOIN (
      SELECT DISTINCT(ds) as ds
      FROM DEMO_DB.TRANSACTIONS
    ) AS d
    ON s.ds <= d.ds
    AND s.ds > DATEADD(day, -28, d.ds)
  GROUP BY
    d.ds
) AS sales_28
ON
sales_28.ds = COALESCE(m.ds,NULL)

MQL

mql query --metrics 'meetings_per_sales_person,
gross_sales_last28' --dimensions 'ds' --where "product__category = 'API'"

Avoid code duplication and simplify queries

Simplify code governance with auto-generated SQL for even for the most complex queries. Optimized for the “DRY (Don’t Repeat Yourself)” principle, MQL (MetricFlow Query Language) helps you avoid code duplication in key workflows that can lead to technical debt and disjointed metric logic.

Learn More

Bring your own compute

Define new database connectors and optimizations for your unique use cases. MetricFlow supports—and even optimizes—queries to any data warehouse. MetricFlow also has database-specific optimizations for Snowflake, Amazon Redshift, and Google BigQuery.

Learn More
Bring your own compute

We started Transform to democratize access to insights. And we believe every modern data team needs a metrics layer to make that vision a reality. We’re sharing our framework with the community so that teams everywhere can experience the transformative power of trustworthy metrics.

Let’s build the future of the metrics layer, together

Join a community of developers and data analysts passionate about pushing the field forward for everyone. Find us on GitHub to contribute and join our growing community on Slack