@@ -606,20 +606,18 @@ impl DimensionConfig {
606606
607607impl MetricConfig {
608608 fn into_metric ( self ) -> Metric {
609- let inline_aggregation = if self . agg . is_none ( ) {
609+ let explicit_metric_type = self . metric_type . as_deref ( ) . map ( str:: to_ascii_lowercase) ;
610+ let can_normalize_inline_aggregation =
611+ matches ! ( explicit_metric_type. as_deref( ) , None | Some ( "simple" ) ) ;
612+ let inline_aggregation = if self . agg . is_none ( ) && can_normalize_inline_aggregation {
610613 self . sql
611614 . as_deref ( )
612615 . and_then ( parse_inline_metric_aggregation)
613616 } else {
614617 None
615618 } ;
616619
617- let metric_type = match self
618- . metric_type
619- . as_deref ( )
620- . map ( str:: to_ascii_lowercase)
621- . as_deref ( )
622- {
620+ let metric_type = match explicit_metric_type. as_deref ( ) {
623621 Some ( "simple" ) => MetricType :: Simple ,
624622 Some ( "derived" ) => MetricType :: Derived ,
625623 Some ( "ratio" ) => MetricType :: Ratio ,
@@ -1795,6 +1793,9 @@ models:
17951793 sql: VARIANCE_POP(amount)
17961794 - name: revenue_per_order
17971795 sql: SUM(amount) / COUNT(*)
1796+ - name: explicit_derived_revenue
1797+ type: derived
1798+ sql: SUM(orders.amount)
17981799"# ;
17991800
18001801 let config: SidemanticConfig = serde_yaml:: from_str ( yaml) . unwrap ( ) ;
@@ -1844,6 +1845,18 @@ models:
18441845 revenue_per_order. sql. as_deref( ) ,
18451846 Some ( "SUM(amount) / COUNT(*)" )
18461847 ) ;
1848+
1849+ let explicit_derived_revenue = orders
1850+ . metrics
1851+ . iter ( )
1852+ . find ( |m| m. name == "explicit_derived_revenue" )
1853+ . unwrap ( ) ;
1854+ assert_eq ! ( explicit_derived_revenue. r#type, MetricType :: Derived ) ;
1855+ assert_eq ! ( explicit_derived_revenue. agg, None ) ;
1856+ assert_eq ! (
1857+ explicit_derived_revenue. sql. as_deref( ) ,
1858+ Some ( "SUM(orders.amount)" )
1859+ ) ;
18471860 }
18481861
18491862 #[ test]
0 commit comments