Releases: dbt-labs/metricflow
Releases · dbt-labs/metricflow
Release list
MetricFlow 0.212.0
MetricFlow 0.212.0 - August 11, 2026
Features
- Add Athena adapter and SQL rendering support (#979)
Fixes
- Use TIMESTAMP_TRUNC instead of DATETIME_TRUNC for BigQuery (#2078)
- Add parentheses around user-supplied filter strings (#2066)
- Name auto-generated OSI ratio sub-metrics without dunders so they pass semantic manifest name validation (#2091)
Under the Hood
- Restore
dbt-metricflowdependency changes in release flow (#2055) - Remove old release helpers (#2056)
- Simplify output column orderers (#2064)
- Add option to use legacy column order (#2065)
- Limit result cache in group-by item resolver (#2075)
- Update error handling for invalid percentile configuration (#2076)
- Update emitted messages in
ExecutionTimer(#2084) - Clean up method duration logging (#2085)
- Improve invalid state file handling in the release tool (#2088)
- Update release tool to use
ortinstead offossa(#2102) - Add CI pipeline to compile MetricFlow into standalone Nuitka binaries for macOS, Linux, and Windows, and publish them as versioned GitHub Release artifacts for embedding in dbt-core v2 (Fusion) (#2106)
Dependencies
- Update DuckDB dev dependency to
>= 1.5(#2051) - Update
dbt-coreto>=1.11, <1.13(#2105) - Support Python 3.14 in
dbt-metricflow(#2108)
Contributors
mf-stdio-sidecar/v0.212.0.dev0+2607311617.cb03eb2a
DI-4871: decouple sidecar release versioning from MetricFlow release …
sidecar/v0.210.0+1
DI-4819: swap x86_64-apple-darwin leg to MACOS_RUNNER_INTEL (#2103) ## Summary Follow-up to #2079. The `macos-13` leg of `cd-build-sidecar-binaries.yaml` was disabled there (GitHub's free-tier hosted Intel Mac pool queues indefinitely). This swaps it to `vars.MACOS_RUNNER_INTEL` (`macos-15-intel`). ## Why this variable, not Depot Depot (dbt-core v2's route for aarch64-apple-darwin) doesn't work here: Depot's own docs confirm its macOS runners are Apple Silicon (M2/M4) only, and Nuitka can't cross-compile the way dbt-core's Rust CLI builds do. This is because the Nuitka builds embeds native CPython plus precompiled per-arch wheels (pydantic-core, duckdb), so it needs to actually run on Intel hardware to produce an Intel binary. However there is still a path forward. Some of the drivers core v2 uses for adapters are go based, and go also don't have cross compilation. For these builds it turns out we target macos-15-intel, which is now what we do. ## Validated `MACOS_RUNNER_INTEL` has been added as a variable on this repo. Confirmed in two stages: - A one-step, no-compile check scheduled and ran in 5s on genuine `x86_64` hardware (`Darwin ... RELEASE_X86_64 x86_64`, macOS 15.7.7) -- no queueing, unlike `macos-13`. - The full matrix then ran end-to-end via a temporary draft-PR validation trigger (since removed): all 5 legs passed, including `Compile & Validate mf_entry (x86_64-apple-darwin)` in 23m6s on `macos-15-intel`. ## Caveat GitHub has announced it's retiring Intel macOS support entirely after the macOS 15 runner image goes away (~Fall 2027) -- this is a real fix but not a permanent one. Refs DI-4819
MetricFlow 0.211.0
MetricFlow 0.211.0 - May 11, 2026
Features
- Return results from OSI<>MSI converters as a ConverterResult object (#2031)
- Add support for Python 3.14 for metricflow package (#1916)
- Allow multiple
--wherearguments in the CLI (#2050)
Fixes
- Isolate mypy cache between metricflow / dbt-metricflow (#2046)
Under the Hood
- Run lint / tests for
dbt-metricflowin a separate environment (#2039) - Port
dbt-metricflowpackage CI tests (#1933) - Update
dbt-metricflowpackage tests to check log file (#1934) - Initial step for release automation tool (#2040)
- Add other steps for release automation tool (#2042)
- Assorted refinements to the release tool (#2045)
- Add retries to
test_format_report_to_text_table(#2047)
Dependencies
- Remove
graphvizdependency fromdbt-metricflow(#2038) - Update DuckDB dev dependency to
>= 1.5(#2051)
Contributors
MetricFlow 0.210.0
MetricFlow 0.210.0 - April 24, 2026
Breaking Changes
- Remove
MetricFlowEngine.get_measures_for_metrics(#1881) - License Change - Version 0.209.0 and greater is covered by the Apache 2.0 license. (#1905)
Features
- Add new transformations to production from dsi that produce metrics from old-style measures. (#387)
- Generate nested CTEs to simplify SQL (#1992)
- Add initial implementation of OSI converters (#2017)
Fixes
- Don't error for lack of time dimensions in manfest (#1848)
- Pin to the latest non-dev release of dbt-semantic-interfaces. (#1854)
- Use node_relation to render time spine table with proper quoting. (#1875)
- Fixes a bug related to leaving out metric values in offset metrics, specifically if the queried grain is smaller than the offset grain. (#1910)
- Properly apply time constraints on agg time dimensions for cumulative metrics. (#1910)
- Fixes a bug causing errors for join_to_timespine metrics queried with date part. (#1919)
- Add dunder prefix to column aliases for simple-metric inputs (#1938)
- Render simple-metric inputs without a dunder prefix for the
WHEREfilter (#1941) - Improve handling of invalid metrics in metadata methods of
MetricFlowEngine(#1949) - Fixes an issue where metric-level YAML filters are not applied for cumulative & conversion metrics. (#1950)
- Fix logging setup in the CLI (#1932)
- Fixes a bug where time dimensions utilizing the default time grain raise an error. (#1955)
- Add memoization to
resolve_available_itemsto prevent repeated expensive DAG traversals during query resolution with invalid group-by items (#1964) - Fix optimization of queries containing metrics with
fill_nulls_withset (#1963) - Improve CTE generation via caching in
ComputeMetricsBranchCombiner(#1986) - Prevent base-grain time dimensions from leaking into time-offset metric output (#2004)
- Fix check for aggregation time dimensions in filters (#2012)
- Fix bug with filters applied before aggregation in time-offset metrics (#2016)
- Fix queries mixing aliased and non-aliased versions of the same dimension (#2025)
Docs
- Update help text for
mf queryoptions (#1815) - Improve OSS contribution standards in CONTRIBUTING.md (#1996)
Under the Hood
- Add tests for the filtering of
AnnotatedSpecLinkableElementSet(#1864) - Remove
LegacyLinkableSpecResolver(#1865) - Consolidate measure / metric methods of
GroupByItemSetResolver(#1871) - Add test for group-by items using the cyclic manifest (#1869)
- Add workflow to check changelog files (#1847)
- Remove
LinkableElementSet(#1866) - Rename classes for group-by items (#1870)
- Consolidate measure-related operations into
MeasureLookup(#1868) - Consolidate measure / metric methods of
MetricLookup(#1872) - Assorted fixes for
GroupByItemSetFilter(#1873) - Bump dependence on dbt-semantic-interfaces to 0.9.3.dev4 to get newest transformations code. (#387)
- Add
SemanticGraphNodeTypedCollection(#1880) - Update
metricflow_semanticsto migratemeasures -> simple metrics(#1882) - Update
metricflowto migratemeasures -> simple metrics(#1889) - Add a test for
MetricLookup. get_aggregation_time_dimension_specs()(#1890) - Update SQL engine snapshots for the
measures -> simple metricsmigration (#1891) - Remove measure-related functionality from
MetricLookup(#1892) - Remove deprecated measure-related classes (#1893)
- Update simple-metric generation in the synthetic manifest generator (#1894)
- Copy dbt-semantic-interfaces into the MetricFlow repo. (#1895)
- Mark tests from
test_dataflow_to_sql_plan.pyas DuckDB-Only (#1896) - Remove
SimpleMetricInputSpec.non_additive_dimension_spec(#1897) - Renames for the
measures -> simple metricsmigration - Part 1 (#1898) - Renames for the
measures -> simple metricsmigration - Part 2 (#1902) - Renames for the
measures -> simple metricsmigration - Part 3 (#1903) - Rename
Metricflow*->MetricFlow*(#1904) - Remove assorted unused code (#1908)
- Move helper / utility methods to
toolkitmodule (#1909) - Update Cursor rules file to include linting + loading of additional rules (#1920)
- Move semantic-graph modules out of
experimental(#1921) - Remove case to reproduce date-part bug (#1922)
- Consolidate alias SQL generation to
ComputeMetricsNode(#1936) - Remove
AggregateSimpleMetricInputsNode.alias_mapping(#1937) - Filter out unneeded specs in dataflow plan before applying where filter. (#1944)
- Move CLI tests to dbt-metricflow package. Developers will need to run
make test-include-slowto execute CLI tests locally, and will need to runhatch -v run dev-env:pre-commit cleanto pick up the relevant config changes for linting. (#1948) - Multiprocess explain-SQL test framework (#1951)
- Support explain-SQL tests using external manifests (#1952)
- Add explain-SQL test using all metric / group-by item pairs (#1953)
- Add a test for a query that includes a time-offset metric and
metric_time__alien_day(#1954) - Test optimization of queries containing metrics with
fill_nulls_withset (#1962) - Update
ComputeMetricsNodeto allow passthrough (#1972) - Rename
FilterElementsNodetoSelectorNode(#1973) - Assorted updates to
DataflowPlanBuilder(#1976) - Remove
WhereFilterSpecSet(#1977) - Replace
PydanticMetricTimeWindowfields with immutable equivalent (#1978) - Rename
WhereConstraintNodetoWhereFilterNodefor consistency (#1979) - Improve rendering of multiple
WHEREfilters (#1980) - Remove
LinklessEntitySpec(#1981) - Assorted updates to ordered set and graph classes (#1982)
- Add
.create()initializer to spec / request classes (#1983) - Use a graph to model metric evaluation for a query (#1984)
- Add DFS metric evaluation planner (#1985)
- Update `DataflowPlanBuild...
MetricFlow v0.209.0
Releases MetricFlow with an Apache 2.0 license.
Note that dbt-semantic-interfaces is currently pinned to a development version, which may cause issues for some installers. This will be resolved soon.
What's Changed
- Bump dbt-metricflow version by @courtneyholcomb in #1860
- Bump to new dev version by @courtneyholcomb in #1859
- Bump to a new dev version of dbt-metricflow by @courtneyholcomb in #1861
- Bug fix: don't error if there are no time dims in manifest by @courtneyholcomb in #1862
- Bump to new DSI dev version (again) by @courtneyholcomb in #1863
- Bump dsi version to allow for 'is_private' on metrics from mantle by @theyostalservice in #1867
- Add tests for the filtering of
AnnotatedSpecLinkableElementSetby @plypaul in #1864 - Remove
LegacyLinkableSpecResolverby @plypaul in #1865 - Remove
LinkableElementSetby @plypaul in #1866 - Consolidate measure-related operations into
MeasureLookupby @plypaul in #1868 - Add test for group-by items using the cyclic manifest by @plypaul in #1869
- Rename classes for group-by items by @plypaul in #1870
- Pin version more tightly while we resolve test failures by @theyostalservice in #1874
- Use
node_relationto render time spine table SQL by @courtneyholcomb in #1875 - Consolidate measure / metric methods of
GroupByItemSetResolverby @plypaul in #1871 - Consolidate measure / metric methods of
MetricLookupby @plypaul in #1872 - Bump DSI Version by @theyostalservice in #1876
- Get MF using the new dsi transformations by @theyostalservice in #1877
- Assorted fixes for
GroupByItemSetFilterby @plypaul in #1873 - Enable
DimensionPatternwithout time dimensions by @courtneyholcomb in #1883 - Add
SemanticGraphNodeTypedCollectionby @plypaul in #1880 - Remove
MetricFlowEngine.get_measures_for_metricsby @plypaul in #1881 - Update
metricflow_semanticsto migratemeasures -> simple metricsby @plypaul in #1882 - Update
metricflowto migratemeasures -> simple metricsby @plypaul in #1889 - Add a test for
MetricLookup. get_aggregation_time_dimension_specs()by @plypaul in #1890 - Update SQL engine snapshots for the
measures -> simple metricsmigration by @plypaul in #1891 - Remove measure-related functionality from
MetricLookupby @plypaul in #1892 - Remove deprecated measure-related classes by @plypaul in #1893
- Update simple-metric generation in the synthetic manifest generator by @plypaul in #1894
- Update help to provide examples to AI agents by @b-per in #1815
- Update requirement for dependency
more-itertoolsto include newest version by @MatthijsKok in #1879 - Mark tests from
test_dataflow_to_sql_plan.pyas DuckDB-Only by @plypaul in #1896 - Remove
SimpleMetricInputSpec.non_additive_dimension_specby @plypaul in #1897 - Renames for the
measures -> simple metricsmigration - Part 1 by @plypaul in #1898 - Renames for the
measures -> simple metricsmigration - Part 2 by @plypaul in #1902 - Renames for the
measures -> simple metricsmigration - Part 3 by @plypaul in #1903 - Sync DSI into MF by @courtneyholcomb in #1895
- Rename
Metricflow*->MetricFlow*by @plypaul in #1904 - Change License to Apache 2.0 by @courtneyholcomb in #1905
New Contributors
- @b-per made their first contribution in #1815
- @MatthijsKok made their first contribution in #1879
Full Changelog: v0.208.1...v0.209.0
v0.208.1
What's Changed
- Update
metricflowto0.208.1.dev0by @plypaul in #1844 - Release
dbt-metricflow==0.10.0by @plypaul in #1845 - Update
dbt-metricflowto0.10.1.dev0by @plypaul in #1846 - Add workflow to check changelog files by @plypaul in #1847
- Update offset implementation by @courtneyholcomb in #1826
- Cleanup: fix duckdb version + remove accidental commenting by @courtneyholcomb in #1856
- Pin to a non-dev version of DSI for release by @courtneyholcomb in #1854
- Create version 0.208.1 by @courtneyholcomb in #1855
Full Changelog: v0.208.0...v0.208.1
MetricFlow 0.208.0
MetricFlow 0.208.0 - September 11, 2025
Features
- Support for custom offset windows. (#1584)
- Support for multiple time spines in one query. (#1644)
- Allow bypassing the group by when making queries without metrics. (#1720)
- Support aliases for dimensions and entities. (#1727)
- Support for order_by and limit on saved queries (#1759)
- Expose semantic_model(s) on Metrics and Dimensions in API (#1776)
- Support ordering dimensions by semantic model name" (#1778)
- Add new CLI command 'mf list saved-queries' to list all saved queries with their descriptions (#1787)
- Improve engine initialization speed via semantic graph (#1835)
Fixes
- Add config to get_measures_for_metrics response (#1606)
- Compatibility Issue with dbt-core 1.9.0 and dbt-metricflow 0.7.1. (#1589)
- dbt-core dependency issue with metricflow==0.207.0. (#1632)
- Remove
semantic_manifest.jsonfrom the tutorial project (#1704) - Remove trailing comma when pretty-formatting
list(#1735) - Fix error message with empty queries (#1740)
- Fix exception propagation in SQL generation (#1747)
- Fix ambiguity error for time dimensions in Dimension Jinja block (#1772)
- Ensure agg_time_dimension is lowercased (#1773)
- Fix error message in
no_common_items.py(#1795) - Fix ambiguous-join-path detection for
UNIQUEentities (#1835)
Under the Hood
- Add properties to
LazyFormatfor custom logging handlers (#1713) - Synthetic manifests for performance tests (#1495)
- Add support for index object to improve MF engine initialization times. (#1715)
- Use option object for
mf_pformat(#1731) - Provide context in
MetricFlowPrettyFormattable.pretty_format()(#1733) - Use
{}for pretty-formattingSet(#1734) - Add
include_underscore_prefix_fieldsoption tomf_pformat(#1736) - Add
pretty_format_object_by_parts()to pretty formatter (#1738) - Add test to check the error message for empty queries (#1739)
- Update
SequentialIdGeneratorto support async methods (#1741) - Generate a
SELECTstatement for sink nodes in a dataflow plan (#1743) - Update
SelectColumnSetfields to tuples (#1744) - Add
MetricQuerySpec.spec_output_order(#1745) - Update engine interface to order output columns by query inputs (#1746)
- Use
outputfrom theclickinvocation to check test results (#1749) - Handle
order_output_columns_by_input_orderfor filtered metrics (#1753) - Rename
mf_test_configuration->snapshot_configuration(#1750) - Consolidate dev dependencies of
metricflow-semanticsandmetricflow(#1751) - Add handling of
Pathobjects inmf_pformat()(#1752) - Implement
SizedforWhereFilterSpecSet(#1756) - Skip rendering of the table alias in SQL if not needed (#1757)
- Replace
Singletonwith@singleton_dataclass()(#1761) - Assorted improvements to snapshot methods (#1762)
- Implement
MergeableforPrettyFormatOption(#1763) - Add base classes to model a directed graph (#1764)
- Add formatter to display graphs in DOT notation. (#1766)
- Add formatter to display graphs in DOT notation (#1766)
- Assorted fixes for graph-related classes (#1782)
- Remove predicate pushdown optimizer for now (#1783)
- Update the snapshot format for
LinkableElementSet(#1784) - Add interfaces for
LinkableElementSet/LinkableSpecResolver(#1785) - Add fast lookup for semantic-manifest objects (#1789)
- Add a helper for writing
timeit-based performance tests (#1788) - Cache predecessors / successors in graphs (#1790)
- Add semantic-graph node classes (#1791)
- Migrate back to
Singletonfor simplicity / performance (#1793) - Add semantic-graph edge classes (#1794)
- Add subgraph generator for measures (#1796)
- Add subgraph generator for modeling joins (#1798)
- Add subgraph generator for categorical dimensions (#1799)
- Add subgraph generator for configured-entity keys (#1800)
- Add subgraph generator for metrics (#1802)
- Add subgraph generator for time-related elements (#1801)
- Add graph path / pathfinder classes (#1803)
- Add path weight-function for the semantic graph (#1804)
- Add trie-like data structure for dunder names (#1805)
- Add semantic-graph-based resolver for simple group-by items (#1806)
- Add semantic-graph-based resolver for group-by metrics (#1807)
- Add an implementation of
LinkableSpecResolverusing the semantic-graph (#1808) - Add performance tests for the semantic-graph-based resolver (#1809)
- Add
use_semantic_graphflag toSemanticManifestLookup(#1812) - Add query-parser tester and additional cases for SCDs (#1814)
- Update error handling for
simple_dimensions_for_metrics(#1816) - Minor fixes for semantic manifests in test cases (#1818)
- Add text-table formatter for
SessionReport(#1819) - Assorted minor fixes / improvements (#1820)
- Switch back to using minimum time grain from models (#1822)
- Migrate correctness tests for the semantic-graph-based resolver (#1833)
- Migrate performance tests for the semantic-graph-based resolver (#1834)
Dependencies
- Remove version requirement for dbt adapters in
dbt-metricflow(#1837)
Contributors
- @DevonFulcher (#1606)
- @courtneyholcomb (#1584, #1644, #1720, #1727, #1759, [#1776](https://github.com/d...
MetricFlow 0.207.3
Features
- Allow querying SCDs without metric_time. (#1621)
- Add
--quietoption to thequeryCLI command. (#1554) - Specify DB file path in tutorial-project profile (#1692)
- Add support for
DBT_PROFILES_DIR/DBT_PROJECT_DIRin the CLI (#1702) - Add semantic manifest artifact context to error messages (#1708)
Fixes
- Update tutorial project to use
ref()(#1691) - Address issues with the display of numeric types (#1699)
- Address display of
Nonein the output ofmf query(#1700) - Address display of whitespace-padded strings in the output of
mf query(#1701) - Address intermittently missing CSV output file (#1709)
- Configure
pytestto skip scanning snapshots directory (#1710) - Fix issue counter when generating error messages. (#1708)
Under the Hood
- Use snapshots in CLI tests. (#1690)
- Allow
CliConfigurationto be loaded from specified paths (#1693) - Remove
dbtproject metadata dependency in tutorial project generation (#1694) - Avoid reinitialization of
CLIConfiguration(#1697) - Add process-isolated CLI runner for tests (#1695)
- Migrate CLI tests to use the process-isolated CLI runner (#1696)
Contributors
MetricFlow 0.207.2
Changes from 0.207.2:
This release includes a number of a number of assorted fixes and updates that were backported from main. It includes some updates to enable CTEs by default.
MetricFlow 0.207.2 - February 21, 2025
Features
- Allow setting aliases for queried metrics (#1573)
Fixes
- Always treat metric_time and the agg_time_dimension the same in the JoinToTimeSpineNode. (#1541)
- Apply time constraints after time offsets to avoid filtering out values that will change later in the query. (#1544)
- Update mf tutorial flow to always create / use the sample dbt project. (#1651)