Skip to content

Fix time_comparison metric error when base_metric is missing#9

Merged
nicosuave merged 4 commits intomainfrom
fix-time-comparison-missing-base-metric
Dec 3, 2025
Merged

Fix time_comparison metric error when base_metric is missing#9
nicosuave merged 4 commits intomainfrom
fix-time-comparison-missing-base-metric

Conversation

@nicosuave
Copy link
Copy Markdown
Member

Summary

  • Fix cryptic "argument of type 'NoneType' is not iterable" error when using time_comparison metrics that lack a base_metric field
  • Now raises a clear ValueError with the message: time_comparison metric 'metric_name' requires 'base_metric' field

Root cause

When a time_comparison metric was defined without a base_metric:

Metric(
    name="revenue_mom",
    type="time_comparison",
    comparison_type="mom",
    # Missing: base_metric="sales.revenue"
)

The code would fail at line 1820 with if "." in base_ref: where base_ref was None.

Changes

  • Add validation in _generate_with_window_functions to check for required base_metric field and raise a descriptive error
  • Add defensive check in the final SELECT building phase
  • Add test to verify the error message

When querying a time_comparison metric that lacked a base_metric field,
the error "argument of type 'NoneType' is not iterable" was raised. This
was confusing as it didn't indicate the actual problem.

Changes:
- Add validation in _generate_with_window_functions to raise a clear
  ValueError when base_metric is missing
- Add defensive check in final SELECT building phase
- Add test for the error message
Validate type-specific required fields at Metric construction time:
- time_comparison: requires base_metric
- ratio: requires numerator and denominator
- derived: requires sql
- cumulative: requires sql
- conversion: requires entity, base_event, conversion_event

Also fix MetricFlow adapter to set sql for cumulative metrics from
type_params.measure, and remove invalid test that mixed conversion
type with ratio fields.
- Add scripts/generate_schema.py to generate schema from pydantic models
- Publish schema to docs/schema.json (available at sidemantic.com/schema.json)
- Add CI check to ensure schema stays in sync with models
- Update getting-started docs with schema URL for YAML autocomplete
@nicosuave nicosuave force-pushed the fix-time-comparison-missing-base-metric branch from 32234f0 to 4bf16fd Compare December 3, 2025 17:03
@nicosuave nicosuave merged commit c767144 into main Dec 3, 2025
10 checks passed
@nicosuave nicosuave deleted the fix-time-comparison-missing-base-metric branch December 3, 2025 17:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant