NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1600 most downloaded on PyPI
Translates a simple metric definition into reusable SQL and executes it against the SQL engine of your choice.
Last release 8 days ago
10 Sep 2026
Release timing varies
gaps range from 9 days to 6 months
Most releases are documented
notes for 31 of 45 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
96 releases · first in 2022
One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Resolved GitHub upgrade warnings on use of deprecated APIs and node.js build versions (@tlento)
We've added a number of new features, including:
MetricFlow now enables the user to reference metrics in the definition of a metric - an expression of metrics. This feature will further simplify and DRY out code by removing the need to create pre-aggregated subqueries in the data source definition or duplicated measure definitions. For example:
metric:
name: net_sales_per_user
owners:
- nick@company.com
type: derived
type_params:
expr: gross_sales - cogs / active_users
metrics:
# these are all metrics (can be a derived metric, meaning building a derived metric with derived metrics)
- name: gross_sales
- name: cogs
- name: users
constraint: is_active # Optional additional constraint
alias: active_users # Optional alias to use in the expr
MetricFlow now supports versioned dimension (Slowly Changing Dimension (SCD) Type II) joins! Given an SCD Type II table with an entity key and dimension values with an appropriate start and end timestamp column, you can now fetch the slowly changing dimension from an SCD Type II table through extra configurations in your data source. For specific details and examples, please see the documentation on slowly changing dimensions.
MetricFlow now supports percentile calculations in measures! Simply specify percentile for the agg type in your data sources and input the desired percentile within agg_params as seen in the documentation for configuring measures. This feature also provides a median aggregation type as a convenience around the appropriate percentile configuration. For example:
measures:
- name: p99_transaction_value
description: The 99th percentile transaction value
expr: transaction_amount_usd
agg: percentile
agg_params:
percentile: .99
# False will calculate the discrete percentile and True will calculate the continuous percentile
use_discrete_percentile: False
create_metric: True
- name: median_transaction_value
description: The median transaction value
expr: transaction_amount_usd
agg: median
create_metric: True
Note that MetricFlow allows for choosing between continuous or discrete percentiles via the use_discrete_percentile parameter.
MetricFlow is now available to use with dbt Cloud. Instead of requiring additional MetricFlow config yamls to enable dbt in your MetricFlow model (as in the previous dbt metrics release), the MetricFlow CLI can work off of a semantic model built from dbt Cloud. To use, simply follow these two steps:
pip install "metricflow[dbt-cloud]").metricflow/config.yaml:dbt_cloud_job_id: <job_id>
# The following service token MUST have dbt Metadata API access for the project containing the specified job
dbt_cloud_service_token: <dbt_service_token>
cancel_request API in the SQL client for canceling running queries, with the necessary support for SQL isolation levels and asynchronous query submission (@plypaul)explain output for Databricks SQL warehouse configurations (@courtneyholcomb)engine.table_names method (@Jstein77)primary key type, as support for a natural key type was added in a follow-up PR. (@tlento)cancel_request API in the SQL client for canceling running queries, with the necessary support for SQL isolation levels and asynchronous query submission (@plypaul)explain output for Databricks SQL warehouse configurations (@courtneyholcomb)engine.table_names method (@Jstein77)We've improved safeguards for proper model development and added support for profile and targets overrides for dbt queries!
We've improved safeguards for proper model development and added support for profile and targets overrides for dbt queries!
profile and targets attributes when querying dbt models (@QMalcolm)DISTINCT keyword in COUNT aggregation expressions, as this can lead to incorrect results if optimized queries relying on partial aggregation attempt to do something like SUM(counts) to retrieve a less granular total value. (@tlento)Introducing query support for dbt metrics!
Introducing query support for dbt metrics!
With this release you can now use MetricFlow to run queries against your dbt metrics config! If you wish to use the MetricFlow toolchain to query your dbt metrics you can now do this with a simple configuration change. To use, reinstall Metricflow with the appropriate dbt package (see below for supported installations) and make sure the following is in your .metricflow/config.yaml:
model_path: /path/to/dbt/project/root
dbt_repo: true
From there you can use all of Metricflow's tools to query that model!
Our supported installations can be added as follows:
pip install metricflow[dbt-bigquery]pip install metricflow[dbt-postgres]pip install metricflow[dbt-redshift]pip install metricflow[dbt-snowflake]poetry install -E dbt-<data_warehouse> where <data_warehouse> is one of the supported extras noted above.We now support Databricks! If you use Databricks for your metrics data warehousing needs, give it a go! You'll need your server hostname, http path, a
We now support Databricks! If you use Databricks for your metrics data warehousing needs, give it a go! You'll need your server hostname, http path, and access token (see the databricks documentation on where to find these). You'll need to use the keys dwh_host, dwh_http_path, and dwh_access_token for these properties in your data warehouse configuration.
We have also fixed some bugs and improved support for semi-additive measures, and added the ability to use measure-specific constraints inside of more complex metric definitions!
count as a measure aggregation type. Note this is implemented as an alias around sum, so use of the DISTINCT keyword in expressions is not supported, and will be blocked via validation in a separate update. Users wishing for a COUNT(DISTINCT thing) equivalent should continue to use the count_distinct aggregation type. (@WilliamDee)We now have a basic extension for authoring configs available for Visual Studio Code, with simple support for auto-completion and inline schema valida
We now have a basic extension for authoring configs available for Visual Studio Code, with simple support for auto-completion and inline schema validation, courtesy of @jack-transform !
This release also features several bugfixes and improvements, most notably a dramatic speedup (as much as 10x) in plan building for complex queries.
Changes:
Metricflow 0.111.0 was released today!
Metricflow 0.111.0 was released today!
The big news is we have added data source inference as a Beta feature. It allows new users to quickly get started with Metricflow by bootstrapping their data source configurations from a warehouse connection.
Please note that this is still Beta feature. As such, it should not be expected to be free of bugs, and its CLI/Python interfaces might change without prior notice.
For full details see our release notes.
mf infer --help for more details. Feedback welcome! (@serramatutu)^8.1.3 to >=7.1.2 to temporarily resolve dependency issue for downstream Flask 1.1.4 usage (@jack-transform)2.11.0 to >=2.11.0 to allow downstream Flask 1.1.4 users to update to 2.x.x (@jpreillymb, @tlento)Patch fixes and minor improvements on v0.110.0:
Patch fixes and minor improvements on v0.110.0:
Get the latest here: https://pypi.org/project/metricflow/0.110.1/
Metricflow 0.110.0 was released today!
Metricflow 0.110.0 was released today!
The big news is we have added support for setting custom time dimensions on a measure-by-measure basis. This change also means we no longer require the primary time dimensions to have the same names across all data sources.
To run a query for a time series metric computation, simply request the metric_time dimension, and Metricflow will use the aggregation time dimension associated with each measure in your query and line everything up on your time series chart for you. You don't even need to know the names of the time dimensions! Please note metric_time is now a reserved name.
Speaking of reserved names, we have also improved our validation against SQL reserved keywords, which should provide more rapid feedback in the metric config development workflow.
For full details see our release notes.
metric_time instead of dimension names, since it is now possible for measures to have different time dimensions for time series aggregation. This also removes the restriction that all data sources have the same primary time dimension name. However, users issuing queries might experience exceptions if they are not using metric_time as their requested primary time dimension. (@plypaul)metric_time (@tlento)time dimension, identifiers, dimensions, metrics, which could break automation relying on order-dependent parsing of CLI output. We encourage affected users to switch to using the API, and to access the resulting data frame with order-independent (i.e., by name) access to column values. (@williamdee)metric_time instead of dimension names, since it is now possible for measures to have different time dimensions for time series aggregation. This also removes the restriction that all data sources have the same primary time dimension name. However, users issuing queries might experience exceptions if they are not using metric_time as their requested primary time dimension. (@plypaul)metric_time (@tlento)time dimension, identifiers, dimensions, metrics, which could break automation relying on order-dependent parsing of CLI output. We encourage affected users to switch to using the API, and to access the resulting data frame with order-independent (i.e., by name) access to column values. (@WilliamDee)ds = CURRENT_DATE() would throw an error (@tlento)Nothing published for this version
Fixed CLI support for PostgreSQL (@plypaul)
Updated MetricFlow config parameters for BigQuery users. See description on https://github.com/transform-data/metricflow/pull/62 for usage instruction
Simple Developer API for interacting with MetricFlow engine based on a local config file for Warehouse credentials (@williamdee)
Ability to visualize DataFlow Plan from the command line via the --display-plans flag (@plypaul)
--display-plans flag (@plypaul)Special thanks to @zzsza for the quick fix for our BigQuery token parsing bug!
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →