diff --git a/content/assets/images/tutorials/calendar-associated-columns.png b/content/assets/images/tutorials/calendar-associated-columns.png new file mode 100644 index 00000000..ab479e08 Binary files /dev/null and b/content/assets/images/tutorials/calendar-associated-columns.png differ diff --git a/content/assets/images/tutorials/calendar-collection-editor-column-group.png b/content/assets/images/tutorials/calendar-collection-editor-column-group.png new file mode 100644 index 00000000..17b59265 Binary files /dev/null and b/content/assets/images/tutorials/calendar-collection-editor-column-group.png differ diff --git a/content/assets/images/tutorials/calendar-complete-time-unit-tooltip.png b/content/assets/images/tutorials/calendar-complete-time-unit-tooltip.png new file mode 100644 index 00000000..2488ffa4 Binary files /dev/null and b/content/assets/images/tutorials/calendar-complete-time-unit-tooltip.png differ diff --git a/content/assets/images/tutorials/calendar-configured-example.png b/content/assets/images/tutorials/calendar-configured-example.png new file mode 100644 index 00000000..3dac1c89 Binary files /dev/null and b/content/assets/images/tutorials/calendar-configured-example.png differ diff --git a/content/assets/images/tutorials/calendar-cross-category-validation.png b/content/assets/images/tutorials/calendar-cross-category-validation.png new file mode 100644 index 00000000..24822700 Binary files /dev/null and b/content/assets/images/tutorials/calendar-cross-category-validation.png differ diff --git a/content/assets/images/tutorials/calendar-dependency-error.png b/content/assets/images/tutorials/calendar-dependency-error.png new file mode 100644 index 00000000..5e0398ba Binary files /dev/null and b/content/assets/images/tutorials/calendar-dependency-error.png differ diff --git a/content/assets/images/tutorials/calendar-dock-example.png b/content/assets/images/tutorials/calendar-dock-example.png new file mode 100644 index 00000000..41c1d059 Binary files /dev/null and b/content/assets/images/tutorials/calendar-dock-example.png differ diff --git a/content/assets/images/tutorials/calendar-dropdown-column-selection.png b/content/assets/images/tutorials/calendar-dropdown-column-selection.png new file mode 100644 index 00000000..46f2b114 Binary files /dev/null and b/content/assets/images/tutorials/calendar-dropdown-column-selection.png differ diff --git a/content/assets/images/tutorials/calendar-editor-parts.png b/content/assets/images/tutorials/calendar-editor-parts.png new file mode 100644 index 00000000..8ece8b22 Binary files /dev/null and b/content/assets/images/tutorials/calendar-editor-parts.png differ diff --git a/content/assets/images/tutorials/calendar-editor.png b/content/assets/images/tutorials/calendar-editor.png new file mode 100644 index 00000000..c2762b98 Binary files /dev/null and b/content/assets/images/tutorials/calendar-editor.png differ diff --git a/content/assets/images/tutorials/calendar-partial-time-unit-tooltip.png b/content/assets/images/tutorials/calendar-partial-time-unit-tooltip.png new file mode 100644 index 00000000..927f3a22 Binary files /dev/null and b/content/assets/images/tutorials/calendar-partial-time-unit-tooltip.png differ diff --git a/content/assets/images/tutorials/calendar-preview-data-button.png b/content/assets/images/tutorials/calendar-preview-data-button.png new file mode 100644 index 00000000..6aacab29 Binary files /dev/null and b/content/assets/images/tutorials/calendar-preview-data-button.png differ diff --git a/content/assets/images/tutorials/calendar-simple-example.png b/content/assets/images/tutorials/calendar-simple-example.png new file mode 100644 index 00000000..8ece8b22 Binary files /dev/null and b/content/assets/images/tutorials/calendar-simple-example.png differ diff --git a/content/assets/images/tutorials/calendar-time-related-columns.png b/content/assets/images/tutorials/calendar-time-related-columns.png new file mode 100644 index 00000000..3335f6b3 Binary files /dev/null and b/content/assets/images/tutorials/calendar-time-related-columns.png differ diff --git a/content/tutorials/calendars.md b/content/tutorials/calendars.md index 24cf09c2..8c99dcb8 100644 --- a/content/tutorials/calendars.md +++ b/content/tutorials/calendars.md @@ -1,8 +1,8 @@ --- uid: calendars title: Calendars (Enhanced Time Intelligence) -author: Daniel Otykier -updated: 2025-09-15 +author: Daniel Otykier and Maria José Ferreira +updated: 2026-01-22 applies_to: products: - product: Tabular Editor 2 @@ -17,34 +17,220 @@ applies_to: - edition: Enterprise full: true --- + # Calendars (Enhanced Time Intelligence) -The September 2025 release of Power BI Desktop introduced a new Public Preview feature called "Enhanced Time Intelligence". This feature lets you define custom calendars in your semantic model, and it also introduces 8 new DAX functions that work with these calendars, enabling week-based time intelligence calculations that were difficult to perform previously. +The September 2025 release of Power BI Desktop introduced a new Public Preview feature called **Enhanced Time Intelligence** (also known as **Calendar-based Time Intelligence**). This feature lets you define custom calendars in your semantic model, enabling time intelligence calculations across diverse calendar systems such as fiscal, retail (4-4-5, 4-5-4, 5-4-4), ISO, and other non-Gregorian calendars. + +Unlike classic time intelligence functions that assume a standard Gregorian calendar, the new calendar-based functions derive their behavior from explicit column mappings you define in your Date table. This approach also introduces week-level time intelligence calculations that were difficult to perform previously. + +For more information about how calendar-based time intelligence works, see: +- [Introducing Calendar-based Time Intelligence in DAX](https://www.sqlbi.com/articles/introducing-calendar-based-time-intelligence-in-dax/) (SQLBI) +- [Calendar-based Time Intelligence Preview](https://powerbi.microsoft.com/en-us/blog/calendar-based-time-intelligence-time-intelligence-tailored-preview/) (Microsoft) ## Defining a Calendar  1. Right-click on a table in your model (typically a Date table) and select **Create > Calendar...**. -2. Give your calendar a name, e.g. "Fiscal" +2. Give your calendar a name, e.g. `Fiscal`. Once calendars are added to a table, they will be shown in the TOM Explorer under the **Calendars** node:  -Before you can use a calendar in your DAX calculations, you need to configure it by specifying which columns in the table represent the different calendar attributes. You can do this by right-clicking on the calendar in the TOM Explorer, then choosing the **Edit Column Mappings...** option: +Before you can use a calendar in your DAX calculations, you need to configure it by mapping columns in the table to the appropriate time unit categories. + +## The Calendar Editor + +The January 2026 release of Tabular Editor 3 introduced a dedicated **Calendar Editor** that provides a comprehensive interface for configuring calendars. The editor displays all time unit categories in a structured grid with helpful tooltips, and performs real-time validation to help you avoid configuration errors. + +### Opening the Calendar Editor + +You can open the Calendar Editor in any of the following ways: + +- Double-click an existing calendar under a table in the TOM Explorer. +- Right-click an existing calendar under a table in the TOM Explorer and choose **Edit Calendar...**. +- Select a calendar in the TOM Explorer, then open the **Calendar** menu and choose **Edit Calendar...**. +- Open the **View** menu and choose **Calendar Editor**. + + + +### Layout of the Calendar Editor + +The Calendar Editor is split into two main areas: + +1. **Calendars grid (left panel)** + A vertical grid where each calendar is displayed as a column and time unit categories are displayed as rows. The rows are organized hierarchically by Year, Quarter, Month, Week, and Day. In this grid you can: + + - Select the table that the calendar should get its columns from (typically a Date table) in the **Table** row. + - Map columns to time unit categories by selecting from the dropdown in each cell. + - See real-time validation feedback via icons and tooltips. + - Create additional calendars using the **+ Add Calendar** column (if your model requires multiple calendar definitions). + - Rename calendars by editing the name directly in the grid. + - Delete calendars by right-clicking on a calendar column. + +2. **Context panel (right panel)** + A detail panel that changes based on your selection in the calendars grid: + + - **Associated Columns**: When you select a time unit row that has a column mapped, this panel lets you select additional associated columns. + - **Time-Related Columns**: When you select the "Time-related columns" row at the bottom of the grid, this panel lets you mark columns as time-related. + + + +### Mapping Columns to Time Units + +The calendars grid displays all available time unit categories. To map a column to a time unit, click on a time-unit cell under a calendar column in the grid. This opens a dropdown where you can select the **primary column** for that time unit. + + + +You don't need to map every time unit—only the ones that apply to your calendar structure and for which your table has appropriate columns. + +Time units are divided into **complete** categories (which uniquely identify a period on their own) and **partial** categories (which require a parent time unit to be mapped first). Hover over any time unit row to see a tooltip describing the expected data format and examples. + + + +For partial time units, the tooltip also shows which parent time units must be mapped: + + + +#### Example: Using Partial Time Units + +In some cases, your Date table may not have columns that uniquely identify complete time units like Quarter or Month (e.g., "Q1 2024" or "January 2024"). Instead, you might have columns like `QuarterOfYear` (1-4) and `MonthOfYear` (1-12) that only make sense when combined with a Year column. + +In this scenario, you can map the partial time units (`Quarter of Year`, `Month of Year`) along with the `Year` complete time unit. This is a valid configuration because the partial time units can derive their full context from the Year mapping. + + + +> [!TIP] +> To see the available columns and their values while configuring your calendar, right-click on your Date table in the TOM Explorer and choose **Preview Data**. +> +>  +> +> You can then dock the Data Preview window next to the Calendar Editor for easy reference. +> +>  +> +> Alternatively, you can use the **DAX Query** window to query your Date table and keep it visible alongside the Calendar Editor. + +With the Date table preview docked, you can see the column values as you configure your calendar: + + + +**Complete Time Units:** + +| Time Unit | Description | Examples | +|-----------|-------------|----------| +| Year | The year | 2024, 2025 | +| Quarter | The quarter including the year | Q1 2024, Q2 2025 | +| Month | The month including the year | January 2023, 2024 Feb | +| Week | The week including the year | Week 50 2023, W50-2023 | +| Date | The date | 12/31/2025, 4/3/2023 | + +**Partial Time Units** (require a parent time unit to be mapped): + +| Time Unit | Description | Examples | Requires | Or requires one of | +|-----------|-------------|----------|----------|-------------------| +| Quarter of Year | The quarter of the year | Q1, Quarter 2, YQ1 | Year | | +| Month of Year | The month of the year | January, M11, 11 | Year | | +| Month of Quarter | The month within a quarter | 1, QM2 | Quarter |