Semanticus
Documentation

Calendars

Calendar-based time intelligence for modern models: map your date columns to time units once, then write calendar-aware DAX like TOTALYTD([Total Sales], 'Fiscal'). Templates cover Gregorian, fiscal, ISO week, 4-4-5 retail and 13-period calendars, and a single table can carry several at once.

In the Studio

The Calendars area (under Advanced Modelling) lists each table's calendars and gives you a mapping editor. Pick a column and assign it to a time unit (Year, Quarter, Month, Week, Date, and the recurring variants such as MonthOfYear and DayOfWeek), and drop untagged-but-time-related columns (like IsWorkingDay or HolidayName) into a time-related bucket. Template buttons scaffold a whole calendar in one step.

Because the calendar metadata is plain model metadata, Semanticus authors it directly whatever your editing setup, and a single date table can hold a Gregorian, a fiscal and an ISO-week calendar together over the same columns.

Over MCP

The same calendars are dual-drive:

list_calendars                                    # -> calendars + whether CL supports them
set_compatibility_level  1701                     # if needed (a one-way upgrade)
define_calendar_from_template  table:Date  template=fiscal  fiscalStartMonth=7
# then author calendar-aware DAX:   TOTALYTD([Total Sales], 'Fiscal')

The classic path is still there

generate_date_table and mark_date_table remain for classic, Gregorian-only date tables (existing models are real), but they are the legacy approach: their own tool descriptions point to define_calendar_from_template for calendar-based time intelligence. If you are building a new model on a recent compatibility level, prefer calendars, calendar-aware YTD can even outperform the classic date-column form in grouped-by-week scenarios.

Calendars need compatibility level 1701 or higher

list_calendars tells you whether the current model qualifies; if not, set_compatibility_level raises it. Upgrades are one-way, and redeploying an upgraded model to an older runtime may fail, so raise the level deliberately.