From a31850114df9441aa6679e3c0b69d360abead946 Mon Sep 17 00:00:00 2001 From: Will Deng Date: Mon, 3 Nov 2025 00:52:30 -0500 Subject: [PATCH 1/3] Propagate measure.config to metric.config when specified during create_metric:True --- core/dbt/parser/schema_yaml_readers.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/dbt/parser/schema_yaml_readers.py b/core/dbt/parser/schema_yaml_readers.py index ef82728a4ff..30a47c1de88 100644 --- a/core/dbt/parser/schema_yaml_readers.py +++ b/core/dbt/parser/schema_yaml_readers.py @@ -633,14 +633,19 @@ def _create_metric( measure: UnparsedMeasure, enabled: bool, semantic_model_name: str, + meta: Optional[Dict[str, Any]] = None, ) -> None: + config = {"enabled": enabled} + if meta is not None: + # Need to propagate meta to metric from measure during create_metric: True + config["meta"] = meta unparsed_metric = UnparsedMetric( name=measure.name, label=measure.label or measure.name, type="simple", type_params=UnparsedMetricTypeParams(measure=measure.name, expr=measure.name), description=measure.description or f"Metric created from measure {measure.name}", - config={"enabled": enabled}, + config=config, ) parser = MetricParser(self.schema_parser, yaml=self.yaml) @@ -758,7 +763,10 @@ def parse_semantic_model(self, unparsed: UnparsedSemanticModel) -> None: for measure in unparsed.measures: if measure.create_metric is True: self._create_metric( - measure=measure, enabled=parsed.config.enabled, semantic_model_name=parsed.name + measure=measure, + enabled=parsed.config.enabled, + semantic_model_name=parsed.name, + meta=config.meta if config is not None else None, ) def parse(self) -> None: From 34c7343ad8548cf7ae79564703987e34c5724b5b Mon Sep 17 00:00:00 2001 From: Will Deng Date: Mon, 3 Nov 2025 00:53:17 -0500 Subject: [PATCH 2/3] changelog --- .changes/unreleased/Under the Hood-20251103-005311.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changes/unreleased/Under the Hood-20251103-005311.yaml diff --git a/.changes/unreleased/Under the Hood-20251103-005311.yaml b/.changes/unreleased/Under the Hood-20251103-005311.yaml new file mode 100644 index 00000000000..2054fa62f3a --- /dev/null +++ b/.changes/unreleased/Under the Hood-20251103-005311.yaml @@ -0,0 +1,6 @@ +kind: Under the Hood +body: Fixes issue where config isn't propagated to metric from measure when set as create_metric:True +time: 2025-11-03T00:53:11.354097-05:00 +custom: + Author: WilliamDee + Issue: None From df292dbe36d36ccffbfd3c1deb56e9eb81bfaf18 Mon Sep 17 00:00:00 2001 From: Will Deng Date: Mon, 3 Nov 2025 14:22:42 -0500 Subject: [PATCH 3/3] Update the metric.expr to be populated correctly according to DSI rules --- core/dbt/parser/schema_yaml_readers.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/dbt/parser/schema_yaml_readers.py b/core/dbt/parser/schema_yaml_readers.py index 30a47c1de88..46db62ede17 100644 --- a/core/dbt/parser/schema_yaml_readers.py +++ b/core/dbt/parser/schema_yaml_readers.py @@ -635,7 +635,7 @@ def _create_metric( semantic_model_name: str, meta: Optional[Dict[str, Any]] = None, ) -> None: - config = {"enabled": enabled} + config: Dict[str, Any] = {"enabled": enabled} if meta is not None: # Need to propagate meta to metric from measure during create_metric: True config["meta"] = meta @@ -643,7 +643,9 @@ def _create_metric( name=measure.name, label=measure.label or measure.name, type="simple", - type_params=UnparsedMetricTypeParams(measure=measure.name, expr=measure.name), + type_params=UnparsedMetricTypeParams( + measure=measure.name, expr=measure.expr or measure.name # type: ignore + ), description=measure.description or f"Metric created from measure {measure.name}", config=config, )