dbt-labs/dbt-core · error

new-style cumulative metric should compile without error

Error message

new-style cumulative metric should compile without error

What it means

Test-only panic: a new-style cumulative metric (7-day rolling, `base_l7d`) failed to compile for DuckDB, panicking at `.expect("new-style cumulative metric should compile without error")`. The comment notes the pre-fix failure was 'cumulative metric base_l7d has no aggregation params', so this guards against regressing cumulative metrics defined with the new syntax lacking proper aggregation parameter materialization.

Solutions

  1. Ensure the cumulative metric has valid window/aggregation type params (e.g. measure + window: 7 days)
  2. Check the compiler path that materializes cumulative base_l7d rolling window params
  3. Verify generated SQL contains the INTERVAL rolling condition for the 7-day window
  4. Update the regression fix referenced in the test comment

Example fix

null
Defensive patterns

Strategy: try-catch

Validate before calling

// check cumulative metric has aggregation params before compile
assert!(!metric.type_params.measures.is_empty() || metric.type_params.window.is_some(),
        "cumulative metric needs measures and window");

Try / catch

let sql = compile(&mut store, &spec, Dialect::DuckDB)
    .unwrap_or_else(|e| panic!("cumulative compile failed: {e:?}"));

Prevention

When it happens

Trigger: Compiling a cumulative metric spec where the compiler cannot derive aggregation params for the base window metric — the new-style cumulative definition's `window: 7 days` wasn't converted into rolling aggregation params, so `compile` returns Err (or the SQL lacks the INTERVAL rolling condition).

Common situations: Mixing old/new cumulative syntax; metric defined without `type_params.window`/`gravity` handled; compiler refactor dropping the rolling-window conversion for cumulative base metrics.

Understand the failure class

Background: "query failed", "%w: SQL error" — wrapped database query errors in Go libraries explained — this error's family across 3 libraries.

Related errors


AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07). Data as JSON: /api/errors/54e2677145462b79. Report an issue: GitHub.

Appendix: source

Thrown at crates/dbt-metricflow/src/lib.rs:11626

        let spec = SemanticQuerySpec {
            metrics: vec!["base_l7d".into()],
            group_by: vec![GroupBySpec::TimeDimension {
                name: "metric_time".into(),
                granularity: "day".into(),
                date_part: None,
            }],
            where_filters: vec![],
            order_by: vec![],
            limit: None,
            time_constraint: None,
            apply_group_by: true,
        };

        // Pre-fix: fails with "cumulative metric base_l7d has no aggregation params".
        // Post-fix: compiles and the SQL contains a rolling window condition.
        let sql = compile(&mut store, &spec, Dialect::DuckDB)
            .expect("new-style cumulative metric should compile without error");

        assert!(
            sql.contains("INTERVAL"),
            "rolling-window cumulative SQL must contain an INTERVAL for the 7-day window\n  SQL:\n{sql}"
        );
    }
}

View on GitHub (pinned to 0267ce9170)