Create a dbt SQL or Python model that produces a continuous date sequence with at minimum a daily-grain date column
In the corresponding YAML properties file, add a time_spine block under the model entry with standard_granularity_column set to the name of your date column
Optionally add additional custom_granularities under the time_spine block for non-standard periods such as fiscal quarters
Run dbt parse to validate the YAML; a deprecation warning will appear if your project still relies on the legacy metricflow_time_spine.sql approach without a YAML definition
Reference the time spine in your metric definitions by setting fill_nulls_with or join_to_timespine: true on derived metrics to ensure continuous date coverage
Known gotchas
Before dbt v1.9, the time spine was configured only through a model named metricflow_time_spine; in v1.9+ the YAML time_spine block is the recommended standard and the SQL-only approach is in the process of deprecation
The standard_granularity_column must reference the coarsest grain column in the model; using a finer grain (e.g., hour) as the standard column when daily is available can cause excessive query fanout
Multiple time spine models at different grains are supported; if you add a sub-daily spine, keep the daily spine in place because MetricFlow still relies on it for day-level aggregations
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp