From ce2420c9b40eff37011e567c204fcf6d24760cf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20L=C3=B8nskov?= Date: Mon, 15 Jun 2026 11:23:38 +0200 Subject: [PATCH 1/4] Update udfs about GA and optional parameters --- content/tutorials/udfs.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/content/tutorials/udfs.md b/content/tutorials/udfs.md index 776847d80..7f56a75a1 100644 --- a/content/tutorials/udfs.md +++ b/content/tutorials/udfs.md @@ -2,7 +2,7 @@ uid: udfs title: DAX User-Defined Functions author: Daniel Otykier -updated: 2026-03-19 +updated: 2026-06-11 applies_to: products: - product: Tabular Editor 2 @@ -19,7 +19,7 @@ applies_to: --- # DAX User-Defined Functions -DAX User-Defined Functions (UDFs) is a new capability of semantic models introduced in Power BI Desktop with the September 2025 update. +DAX User-Defined Functions (UDFs) are a capability of semantic models. The feature entered preview with the September 2025 update of Power BI Desktop and is [generally available](https://community.fabric.microsoft.com/t5/Power-BI-Updates-Blog/DAX-User-Defined-Functions-Generally-Available/ba-p/5185738) since the June 2026 release of Power BI. The feature lets you create reusable DAX functions that you can invoke from within any DAX expression of your model, even other functions. This powerful feature helps you maintain consistency, reduce code duplication, and create more maintainable DAX expressions. @@ -301,15 +301,15 @@ Tabular Editor 3 automatically picks up any comments and displays them appropria - Check the Microsoft documentation for supported constraint types **Function not working after deployment** -- Verify your target environment supports UDFs (compatibility level 1702+). As of September 16th, 2025, the Power BI Service does not yet support UDFs, nor does Azure Analysis Services or SQL Server Analysis Services. +- Verify your target environment supports UDFs (compatibility level 1702+). The Power BI Service supports UDFs as of the June 2026 release. Azure Analysis Services and SQL Server Analysis Services don't support UDFs. ## Limitations -- Not all Power BI environments support UDFs (requires specific builds) +- UDFs require compatibility level 1702 or higher; Azure Analysis Services and SQL Server Analysis Services don't support them - UDFs cannot be recursive (call themselves) > [!NOTE] -> As of June 2026, UDFs are [generally available](https://community.fabric.microsoft.com/t5/Power-BI-Updates-Blog/DAX-User-Defined-Functions-Generally-Available/ba-p/5185738). As part of this, UDFs now support default expressions / optional parameters. However, Tabular Editor 3 currently displays a false error message when the default expression syntax is used. This issue will be fixed in our next update of Tabular Editor 3. +> With the [general availability](https://community.fabric.microsoft.com/t5/Power-BI-Updates-Blog/DAX-User-Defined-Functions-Generally-Available/ba-p/5185738) of UDFs in June 2026, UDFs support optional parameters with default expressions. Tabular Editor 3 supports this syntax since version 3.26.2. Older versions display a false error message when you use the default expression syntax. --- From abd7ca06efb6aceea3b82ade3f307146f638ee3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20L=C3=B8nskov?= Date: Wed, 24 Jun 2026 10:36:52 +0200 Subject: [PATCH 2/4] release documentation updates --- content/features/ai-assistant.md | 8 +++--- content/features/table-groups.md | 4 ++- content/features/views/tom-explorer-view.md | 4 +-- .../getting-started/refresh-preview-query.md | 12 +++++++-- content/tutorials/udfs.md | 25 ++++++++++++++++++- 5 files changed, 43 insertions(+), 10 deletions(-) diff --git a/content/features/ai-assistant.md b/content/features/ai-assistant.md index e7385cb22..985a8f2a1 100644 --- a/content/features/ai-assistant.md +++ b/content/features/ai-assistant.md @@ -2,7 +2,7 @@ uid: ai-assistant title: AI Assistant author: Morten Lønskov -updated: 2026-04-17 +updated: 2026-06-24 applies_to: products: - product: Tabular Editor 2 @@ -44,11 +44,11 @@ The AI Assistant uses a bring-your-own-key model. You provide an API key from on ## Supported Providers -Configure your AI provider under **Tools > Preferences > AI Assistant > AI Provider**. Select a provider from the dropdown — the default is **None (AI disabled)** until you configure one — enter your API key, and optionally override the default model. For OpenAI and Anthropic, the **Model name** field is a combo box pre-populated with known models; you can also type a custom model name. +Configure your AI provider under **Tools > Preferences > AI Assistant > AI Provider**. Select a provider from the dropdown — the default is **None (AI disabled)** until you configure one — enter your API key, and optionally override the default model. For OpenAI and Anthropic, the **Model name** field is a combo box pre-populated with current models — including Anthropic's `claude-fable-5` and `claude-opus-4-8` and OpenAI's `gpt-5.5` and `gpt-5.5-pro` — so you can pick a recent model without typing a custom ID. You can also type a custom model name. | Provider | Default Model | Configuration Required | | -- | -- | -- | -| OpenAI | gpt-4o | API key. Optional base URL, Organization ID and Project ID | +| OpenAI | gpt-5.5 | API key. Optional base URL, Organization ID and Project ID | | Anthropic | claude-sonnet-4-6 | API key. Optional base URL | | Azure OpenAI | Deployment-dependent | API key, endpoint URL and deployment name | | Custom (OpenAI-compatible) | User-specified | API key and custom endpoint URL | @@ -57,7 +57,7 @@ Configure your AI provider under **Tools > Preferences > AI Assistant > AI Provi ### OpenAI -Select **OpenAI** as the provider and enter your API key. You can optionally specify an Organization ID and Project ID if your OpenAI account uses these. The default model is **gpt-4o**, but you can change it to any model available on your account. +Select **OpenAI** as the provider and enter your API key. You can optionally specify an Organization ID and Project ID if your OpenAI account uses these. The default model is **gpt-5.5**, but you can change it to any model available on your account. ![AI Assistant OpenAI Configuration](~/content/assets/images/ai-assistant/ai-assistant-openai-config.png) diff --git a/content/features/table-groups.md b/content/features/table-groups.md index 61f02c748..e87b902b3 100644 --- a/content/features/table-groups.md +++ b/content/features/table-groups.md @@ -2,7 +2,7 @@ uid: table-groups title: Table Groups author: Daniel Otykier -updated: 2023-03-08 +updated: 2026-06-24 applies_to: products: - product: Tabular Editor 2 @@ -25,6 +25,8 @@ Table Groups is a new feature, available in Tabular Editor 3 starting from [vers You can set up Table Groups either by right-clicking on a table and choosing the **Create > Table group** menu option, or by specifying a name for the Table Group in the **Properties View**, while selecting one or more tables. +You can also use the **Move to group** right-click submenu on one or more selected tables. The submenu lists existing Table Groups, a **(New...)** entry that creates a new group from the selected tables and opens its name editor, and a **(None)** entry that removes the Table Group assignment. + Tables can be moved around between Table Groups by dragging and dropping in the TOM Explorer. Note that, unlike Display Folders for measures, columns and hierarchies, Table Groups cannot be nested. Right-clicking on a Table Group in the TOM Explorer, gives you the same context menu options, as if you had selected the table(s) within that Table Group. diff --git a/content/features/views/tom-explorer-view.md b/content/features/views/tom-explorer-view.md index f1aa0e1d3..9154e74db 100644 --- a/content/features/views/tom-explorer-view.md +++ b/content/features/views/tom-explorer-view.md @@ -2,7 +2,7 @@ uid: tom-explorer-view title: TOM Explorer view author: Morten Lønskov -updated: 2026-03-19 +updated: 2026-06-24 applies_to: products: - product: Tabular Editor 2 @@ -48,7 +48,7 @@ Expands to a selection of possible refresh operation for the selected table. Thi Expands to a submenu allowing the creation of new measures, columns, hierarchies, display folders or calculation items under the selected object. The available options depends on the object type selected. - **Move to group**: -Allows you to organize the table into a Table group within the TOM Explorer for easier model navigation. This option is only available for tables. +Expands to a submenu for organizing the selected tables into a Table Group for easier model navigation. The submenu lists existing Table Groups, a **(New...)** entry that creates a new group from the selected tables and opens its name editor, and a **(None)** entry that removes the Table Group assignment. This option is only available for tables. - **Make invisible**: Marks the object as not visible in client tools. The table remains part of the model but is hidden from report authors. Alternative use the shortcut **Ctrl+I** to hide the object. diff --git a/content/getting-started/refresh-preview-query.md b/content/getting-started/refresh-preview-query.md index 219b9c2b7..dfa65fbf3 100644 --- a/content/getting-started/refresh-preview-query.md +++ b/content/getting-started/refresh-preview-query.md @@ -2,7 +2,7 @@ uid: refresh-preview-query title: Refreshing, previewing and querying data author: Daniel Otykier -updated: 2026-01-08 +updated: 2026-06-24 applies_to: products: - product: Tabular Editor 2 @@ -86,7 +86,15 @@ At certain points during DAX authoring and data model development, you may need ![Preview Data](~/content/assets/images/preview-data-big.png) -You can open multiple such table previews and arrange them anyway you like in the user interface. In addition, you can sort or filter individual columns. There is no practical limit to the number of rows that can be previewed. Tabular Editor simply executes a [`TOPNSKIP`](https://dax.guide/topnskip) DAX query against the model, to return just a small number of records suitable to fill the current view. +You can open multiple such table previews and arrange them anyway you like in the user interface. In addition, you can sort or filter individual columns. Tabular Editor executes a DAX query against the model to return just a small number of records suitable to fill the current view, then pages in more rows as you scroll. + +How paging works depends on the storage mode and engine: + +- For Import tables on engines that support the [`WINDOW`](https://dax.guide/window) function, paging uses `WINDOW` against the table's primary key, so you can scroll through the full table. +- If the engine doesn't support `WINDOW` or the table has no primary key, the preview shows the first rows and indicates that scrolling is disabled. +- DirectQuery tables show the first rows only — pagination isn't possible — along with an informational message. + +Preview metadata is cached for the session, so reopening a preview doesn't re-query the server. Click **Refresh** to re-read the metadata, for example after the model has been processed outside of Tabular Editor. If one or more calculated columns are in an invalid state, those columns contain the text *(Calculation needed)*. You can recalculate the table by right-clicking on the column and choosing the **Recalculate table...** option. diff --git a/content/tutorials/udfs.md b/content/tutorials/udfs.md index 7f56a75a1..f1c2f17d2 100644 --- a/content/tutorials/udfs.md +++ b/content/tutorials/udfs.md @@ -2,7 +2,7 @@ uid: udfs title: DAX User-Defined Functions author: Daniel Otykier -updated: 2026-06-11 +updated: 2026-06-24 applies_to: products: - product: Tabular Editor 2 @@ -132,8 +132,31 @@ In addition to specifying the evaluation mode, you can also constrain the parame These type specifications are optional, but if specified they will perform an implicit type conversion on arguments passed to the function, and will also affect the autocomplete suggestions in Tabular Editor 3 when writing DAX code that calls the function. +Tabular Editor 3 validates arguments against the declared parameter types. If you call a UDF with an argument that doesn't match its parameter type — for example, passing a scalar value where a `TABLEREF` parameter is expected — the Semantic Analyzer reports a warning or error. + Check the [Microsoft specification for UDFs](https://learn.microsoft.com/en-us/dax/best-practices/dax-user-defined-functions) for the complete list of available constraints. +### Optional Parameters with Default Expressions + +Starting from version 3.26.2, Tabular Editor 3 supports optional parameters with default expressions. Append `= expression` after the parameter name (and after any type or evaluation-mode hints) to make the parameter optional. When the caller omits the argument, the default expression supplies the value. + +```dax +FUNCTION AddTax = + ( + amount: NUMERIC, // Required parameter + taxRate: NUMERIC = 0.1 // Optional parameter, defaults to 10% + ) + => amount * (1 + taxRate) +``` + +Calling `AddTax(10)` returns `11`, while `AddTax(10, 0.25)` returns `12.5`. + +A few rules govern optional parameters: + +- Callers can leave an argument empty to fall back to its default, e.g. `MyFunc(1,,3)` omits the second argument. The minimum number of arguments is determined by the position of the rightmost required parameter. +- A default expression can only reference names (columns, tables, measures, functions) visible where the function is defined, and it can't reference another parameter of the same function. +- Type checking against a parameter's type hint is enforced only when the default expression is used; an explicitly passed argument is checked against the hint instead. + ## Using UDFs in Your Model ### In Object Expressions From 15025017deb09d061c6da15a223f2e1d550af6a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20L=C3=B8nskov?= Date: Wed, 24 Jun 2026 13:36:33 +0200 Subject: [PATCH 3/4] add whats new for 3.26.2 --- content/references/whats-new.md | 4 ++-- content/whats-new/3-26-2.html | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 content/whats-new/3-26-2.html diff --git a/content/references/whats-new.md b/content/references/whats-new.md index 6a9859834..0af7df631 100644 --- a/content/references/whats-new.md +++ b/content/references/whats-new.md @@ -2,7 +2,7 @@ uid: whats-new title: What's new author: Morten Lønskov -updated: 2026-03-19 +updated: 2026-06-24 --- - + diff --git a/content/whats-new/3-26-2.html b/content/whats-new/3-26-2.html new file mode 100644 index 000000000..0fdaef06b --- /dev/null +++ b/content/whats-new/3-26-2.html @@ -0,0 +1,11 @@ +

Tabular Editor 3.26.2

+

Release blog: June 2026 (v. 3.26.2, release notes)

+
    +
  • DAX UDFs are generally available: DAX user-defined functions are now GA. Tabular Editor 3.26.2 supports their syntax and metadata for models at compatibility level 1702 or higher, so you can package logic once and reuse it in measures, calculated columns, visual calculations, and other functions. Learn more.
  • +
  • Optional parameters for DAX UDFs: A parameter can now carry a default expression, keeping the common case short while the edge cases stay configurable. The Semantic Analyzer also warns when an argument doesn't match a parameter's declared type.
  • +
  • New NAMEOF parameters: Tabular Editor 3.26.2 understands the optional component and escaped parameters introduced in Power BI Desktop's April 2026 update -- validating them as you type, suggesting calendars alongside tables, columns, and measures, and updating table references inside NAMEOF during formula fixup.
  • +
  • Move tables to groups from the context menu: Right-click one or more selected tables in the TOM Explorer to move them into a Table Group or remove them. The new Move to group submenu lists your existing groups, plus a (New...) entry that creates a group from the selection and a (None) entry that clears the assignment.
  • +
  • Semantic Bridge supports metric view YAML 1.1 (Enterprise): Importing a Databricks Metric View now carries more metadata -- display names, descriptions, and format strings -- into the generated semantic model, with improved SQL-to-DAX translation and support for snowflake schemas with nested joins.
  • +
  • Also in the Tabular Editor CLI: these DAX language and semantic analysis improvements are available in te-cli, helping with scripting operations and giving agents better DAX results.
  • +
  • Other fixes include more reliable Data Preview sorting and pagination across storage modes, several Semantic Analyzer corrections, and Update Table Schema working on mixed selections and Table Groups. See release notes for details.
  • +
From 01e4363bcae8a60fb94ec3ff60b4a8ef249acfd8 Mon Sep 17 00:00:00 2001 From: Daniel Otykier Date: Thu, 25 Jun 2026 09:22:28 +0200 Subject: [PATCH 4/4] upadted release notes --- content/references/downloads.md | 27 ++---- content/references/release-history.md | 8 ++ content/references/release-notes/3_26_2.md | 106 +++++++++++++++++++++ 3 files changed, 124 insertions(+), 17 deletions(-) create mode 100644 content/references/release-notes/3_26_2.md diff --git a/content/references/downloads.md b/content/references/downloads.md index c71564433..a70a6014b 100644 --- a/content/references/downloads.md +++ b/content/references/downloads.md @@ -2,7 +2,7 @@ uid: downloads title: All downloads author: Daniel Otykier -updated: 2026-04-17 +updated: 2026-06-25 --- # Tabular Editor 3 Downloads @@ -10,12 +10,12 @@ This page provides download and installation instructions for Tabular Editor 3. ## Latest version -Tabular Editor 3.26.1 **.NET 8** downloads: +Tabular Editor 3.26.2 **.NET 8** downloads: -- Download [Tabular Editor 3.26.1 (64 bit)](https://cdn.tabulareditor.com/files/TabularEditor.3.26.1.Installer.x64.Net8.exe) *(recommended)* -- Download [Tabular Editor 3.26.1 (ARM64)](https://cdn.tabulareditor.com/files/TabularEditor.3.26.1.Installer.ARM64.Net8.exe) -- Portable versions: [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.1.x64.Net8.zip), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.1.ARM64.Net8.zip) -- MSI version: [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.1.x64.Net8.msi), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.1.ARM64.Net8.msi) +- Download [Tabular Editor 3.26.2 (64 bit)](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.Installer.x64.Net8.exe) *(recommended)* +- Download [Tabular Editor 3.26.2 (ARM64)](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.Installer.ARM64.Net8.exe) +- Portable versions: [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.x64.Net8.zip), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.ARM64.Net8.zip) +- MSI version: [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.x64.Net8.msi), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.ARM64.Net8.msi) Read the [latest release notes](release-notes/3_26_1.md). @@ -29,6 +29,10 @@ It is not necessary to remove previous installations when upgrading to a newer v ## History +- 2026-06-25 **Tabular Editor 3.26.2** (*[Release notes](release-notes/3_26_1.md)*) + - .NET 8 installer (.exe): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.Installer.x64.Net8.exe), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.Installer.ARM64.Net8.exe) + - .NET 8 portable (.zip): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.x64.Net8.zip), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.ARM64.Net8.zip) + - .NET 8 installer (.msi): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.x64.Net8.msi), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.ARM64.Net8.msi) - 2026-04-17 **Tabular Editor 3.26.1** (*[Release notes](release-notes/3_26_1.md)*) - .NET 8 installer (.exe): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.1.Installer.x64.Net8.exe), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.1.Installer.ARM64.Net8.exe) - .NET 8 portable (.zip): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.1.x64.Net8.zip), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.1.ARM64.Net8.zip) @@ -61,16 +65,5 @@ It is not necessary to remove previous installations when upgrading to a newer v - .NET 8 installer (.exe): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.22.1.Installer.x64.Net8.exe), [x86](https://cdn.tabulareditor.com/files/TabularEditor.3.22.1.Installer.x86.Net8.exe) - .NET 8 portable (.zip): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.22.1.x64.Net8.zip), [x86](https://cdn.tabulareditor.com/files/TabularEditor.3.22.1.x86.Net8.zip) - .NET 8 installer (.msi): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.22.1.x64.Net8.msi), [x86](https://cdn.tabulareditor.com/files/TabularEditor.3.22.1.x86.Net8.msi) -- 2025-04-25 **Tabular Editor 3.21.0** (*[Release notes](release-notes/3_21_0.md)*) - - .NET 8 installer (.exe): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.21.0.Installer.x64.Net8.exe), [x86](https://cdn.tabulareditor.com/files/TabularEditor.3.21.0.Installer.x86.Net8.exe) - - .NET 8 portable (.zip): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.21.0.x64.Net8.zip), [x86](https://cdn.tabulareditor.com/files/TabularEditor.3.21.0.x86.Net8.zip) - - .NET 8 installer (.msi): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.21.0.x64.Net8.msi), [x86](https://cdn.tabulareditor.com/files/TabularEditor.3.21.0.x86.Net8.msi) -- 2025-04-11 **Tabular Editor 3.20.1** (*[Release notes](release-notes/3_20_1.md)*) - - .NET 8 installer (.exe): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.20.1.Installer.x64.Net8.exe), [x86](https://cdn.tabulareditor.com/files/TabularEditor.3.20.1.Installer.x86.Net8.exe) - - .NET 8 portable (.zip): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.20.1.x64.Net8.zip), [x86](https://cdn.tabulareditor.com/files/TabularEditor.3.20.1.x86.Net8.zip) - - .NET 8 installer (.msi): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.20.1.x64.Net8.msi), [x86](https://cdn.tabulareditor.com/files/TabularEditor.3.20.1.x86.Net8.msi) - - .NET 6 installer (.exe): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.20.1.Installer.x64.exe), [x86](https://cdn.tabulareditor.com/files/TabularEditor.3.20.1.Installer.x86.exe) - - .NET 6 portable (.zip): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.20.1.x64.zip), [x86](https://cdn.tabulareditor.com/files/TabularEditor.3.20.1.x86.zip) - - .NET 6 installer (.msi): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.20.1.x64.msi), [x86](https://cdn.tabulareditor.com/files/TabularEditor.3.20.1.x86.msi) For earlier builds, see the [full release history](release-history.md). \ No newline at end of file diff --git a/content/references/release-history.md b/content/references/release-history.md index 5bb6598df..354d33bae 100644 --- a/content/references/release-history.md +++ b/content/references/release-history.md @@ -4,6 +4,14 @@ title: Full release history --- # Full release history +- 2026-06-25 **Tabular Editor 3.26.2** (*[Release notes](release-notes/3_26_1.md)*) + - .NET 8 installer (.exe): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.Installer.x64.Net8.exe), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.Installer.ARM64.Net8.exe) + - .NET 8 portable (.zip): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.x64.Net8.zip), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.ARM64.Net8.zip) + - .NET 8 installer (.msi): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.x64.Net8.msi), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.ARM64.Net8.msi) +- 2026-04-17 **Tabular Editor 3.26.1** (*[Release notes](release-notes/3_26_1.md)*) + - .NET 8 installer (.exe): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.1.Installer.x64.Net8.exe), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.1.Installer.ARM64.Net8.exe) + - .NET 8 portable (.zip): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.1.x64.Net8.zip), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.1.ARM64.Net8.zip) + - .NET 8 installer (.msi): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.1.x64.Net8.msi), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.1.ARM64.Net8.msi) - 2026-03-25 **Tabular Editor 3.26.0** (*[Release notes](release-notes/3_26_0.md)*) - .NET 8 installer (.exe): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.0.Installer.x64.Net8.exe), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.0.Installer.ARM64.Net8.exe) - .NET 8 portable (.zip): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.0.x64.Net8.zip), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.0.ARM64.Net8.zip) diff --git a/content/references/release-notes/3_26_2.md b/content/references/release-notes/3_26_2.md new file mode 100644 index 000000000..3dec10aa3 --- /dev/null +++ b/content/references/release-notes/3_26_2.md @@ -0,0 +1,106 @@ +--- +uid: release-3-26-2 +--- +# Tabular Editor 3.26.2 + +# [**Downloads**](#tab/downloads) + +Tabular Editor 3.26.2 downloads: + +- Download [Tabular Editor 3.26.2 (x64)](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.Installer.x64.Net8.exe) *(recommended)* +- Download [Tabular Editor 3.26.2 (ARM64)](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.Installer.ARM64.Net8.exe) +- Portable versions: [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.x64.Net8.zip), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.ARM64.Net8.zip) +- MSI version: [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.x64.Net8.msi), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.ARM64.Net8.msi) + +*If you haven't used Tabular Editor 3 before, you are eligible to a 30 day trial, which can be activated after installation. You can also [purchase a license](https://tabulareditor.com/licensing).* + +# [**SHA-256 checksums**](#tab/checksums) + +| File | .NET runtime | Platform | SHA-256 | +| -- | -- | -- | -- | +| [TabularEditor.3.26.2.Installer.x64.Net8.exe](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.Installer.x64.Net8.exe) | .NET 8 | x64 | `CDCEEF571902E58E3368F5A60BBF6926C310B34B2CC4ABA2F3D28B9A5C1C98AC` | +| [TabularEditor.3.26.2.x64.Net8.msi](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.x64.Net8.msi) | .NET 8 | x64 | `D3C0FA8184855C57D16D78CD9D2A44A7622E3C67CD07CFDC7B6D0EA59FB30E09` | +| [TabularEditor.3.26.2.x64.Net8.zip](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.x64.Net8.zip) | .NET 8 | x64 | `B4A2B836E6DA359E798D7546934F1A477C2F4C74D653995D77D2F182A57A8725` | +| [TabularEditor.3.26.2.Installer.ARM64.Net8.exe](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.Installer.ARM64.Net8.exe) | .NET 8 | ARM64 | `7CC1E25D51EA665787500DC460BB533F457E26FF7AE5A4B9F44480F980F1998F` | +| [TabularEditor.3.26.2.ARM64.Net8.msi](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.ARM64.Net8.msi) | .NET 8 | ARM64 | `A8A6E324D38E80140B171B5D7F84C5EBADD6AFE2810529504F332091ECF7E682` | +| [TabularEditor.3.26.2.ARM64.Net8.zip](https://cdn.tabulareditor.com/files/TabularEditor.3.26.2.ARM64.Net8.zip) | .NET 8 | ARM64 | `B265579D384A6586B7599CBC0A54032C5F477D3A485FC1F773F79D4B31D128C6` | + +*** + +Check out our [release blog](https://blog.tabulareditor.com/) to get a brief overview of the most important updates in this release. + +## Improvements in 3.26.2 + +- Added a **Move to group** right-click submenu for tables in the TOM Explorer. The submenu lists existing Table Groups, a **(New...)** entry that creates a new group with the selected tables and opens the name editor, and a **(None)** entry that removes the Table Group assignment. +- Refreshed the model presets in the AI Assistant preferences with the latest releases, so users can pick current models without typing a custom model ID. Added Anthropic's `claude-fable-5` and `claude-opus-4-8`, and OpenAI's `gpt-5.5`/`gpt-5.5-pro` along with other current GPT-5 variants. Deprecated entries (such as the older Codex variants) were removed, and the default OpenAI model is now `gpt-5.5`. + +- **Semantic Analyzer improvements** + - Added support for optional parameters with default expressions in DAX UDFs. + - The Semantic Analyzer now emits suitable warning / error messages, when an UDF is called with a parameter that doesn't match its declared type (e.g. passing a scalar value to a `TABLEREF` parameter, etc.) + - The semantic analyzer now reports an error when `IGNORE` is used anywhere other than directly as an expression argument of `SUMMARIZECOLUMNS`, matching engine behavior. + - The semantic analyzer now supports the new optional component and escaping parameters introduced for the `NAMEOF` function in Power BI Desktop April 2026. Valid component keywords are `TABLE`, `COLUMN`, `MEASURE`, `CALENDAR`, `FULL`, `SELF`, `PARENT`; valid escaping keywords are `ESCAPED`, `UNESCAPED`, `MINIMALLYESCAPED`. The return type is unchanged (scalar string). For example, `EVALUATE { NAMEOF([MyMeasure], TABLE, MINIMALLYESCAPED) }` returns the table name component of a fully qualified measure reference. + +- **Semantic Bridge improvements** + - Importing a Databricks Metric View now carries the view's metadata into the semantic model. + - `comment` becomes the description on the model, dimensions, and measures. + - `display_name` becomes the user-facing Name in the TOM model, with a fallback to `name` if there is no `display_name` defined. + - Measure and dimension `format` translate to TOM FormatString, and the resulting column or measure DataType is inferred from the format (currency, percentage, date, etc.). + Format specs without a clean TOM equivalent fall back to a sensible default and surface a warning. + - SQL-to-DAX translation is improved: row counts (`COUNT(*)`), `MEASURE(name)` references, binary operations, literals (including `NULL` -> `BLANK()`), `/` mapped to the blank-safe `DIVIDE`, and parenthesis precedence all now translate cleanly. + - Expressions outside the recognized set still fall back to the verbatim SQL with a warning. + - Translated DAX is best-effort — review and validate before deploying. + - Add support for snowflake schemas with nested joins. + - YAML deserialization accepts both `fields:` and `dimensions:` at the top level: the Databricks v1.1 spec treats them as aliases. + Round-trip preserves whichever keyword the source YAML used. Views created in TE3 (no source YAML) default to `dimensions:` for v1.1 and earlier: the `fields:` alias was introduced after the v1.1 spec was published, so we stay compatible with tooling that targets the original 1.1 spec. + A deserialization warning surfaces when a v1.1+ view uses `dimensions:` (the spec marks `fields:` as preferred at v1.1+), and a symmetric warning surfaces when a pre-v1.1 view uses `fields:`. + - The C# scripting surface renames `Dimension` to `Field` (`view.Fields`, `view.AddField`, `Dimension` -> `Field`, `MakeValidationRuleForDimension` -> `MakeValidationRuleForField`, `ctx.DimensionNames` -> `ctx.FieldNames`). + - The legacy names remain as obsolete forwarders that continue to compile and run with deprecation warnings, so existing scripts and stored paths like `Model.Dimensions["x"]` still work. + - Window measures (including the v1.1 `offset:` field) round-trip in YAML deserialization and serialization. We don't yet translate features the spec marks as experimental; the YAML round-trip preserves them so they're not lost. + - Joins now support two new properties in the updated v1.1 spec: + - `rely:` map is supported + - `cardinality:` field round-trips for both spec values (`many_to_one`, `one_to_many`) and the omitted form. + An unknown value falls back to `many_to_one` with a warning. + - Joins declared `cardinality: one_to_many` are still imported, but the relationship to the source is intentionally skipped — the v1.1 spec treats these joins as independent fact sources aggregated separately at the source grain + The joined table is still created so it appears in the resulting TOM model, without the relationships defined. + A warning surfaces the gap on each affected join. + +## Bugfixes in 3.26.2 + +- Fixed AI chat failing with a `BadRequest` error ("temperature is deprecated for this model") on Anthropic Claude Opus 4.7+ and Fable 5, which removed support for the temperature sampling parameter. The retry logic that transparently re-sends the request without an explicit temperature now recognizes this provider's phrasing in addition to the previously handled cases. +- Calendars are now suggested in autocomplete for the `NAMEOF` and `TABLEOF` functions, alongside tables, columns, and measures. This includes calendars that have no time-unit columns configured (such as a freshly added, not-yet-configured calendar), which were previously omitted. Typing a quoted prefix (e.g. `'My Cal`) now narrows the suggestions to matching calendars, the same way it does for tables. +- Sorting and pagination in the table **Data Preview** are now more reliable across storage modes: + +- Sorting by a column that has no attribute hierarchy no longer returns rows in the wrong order. When possible, paging now uses the `WINDOW` function (on engines that support it, for tables with a primary key); otherwise the preview shows the first rows and indicates that scrolling is disabled. +- Attribute-hierarchy availability is now read directly from the server, so it stays correct even after the model is processed outside of Tabular Editor. +- DirectQuery tables correctly show the first rows (pagination isn't possible with DirectQuery) along with an informational message. +- Preview metadata is cached for the session and only refreshed when you click **Refresh**, avoiding redundant server round-trips (including repeated row-count queries). +- The DAX formatter no longer removes the table qualifier from `DEFINE MEASURE` blocks when the home table cannot be resolved against the model. Previously this could turn a valid `MEASURE 'Sales'[Amount] = ...` into the invalid `MEASURE [Amount] = ...`, breaking the statement. +- The semantic analyzer no longer reports a spurious error when a filter-removal function (`ALL`, `ALLSELECTED`, `REMOVEFILTERS` or `ALLCROSSFILTERED`) is used as the top-level body expression of a DAX user-defined function, e.g. `FUNCTION F = () => REMOVEFILTERS('Sales')`. Such UDFs are valid when invoked as a `CALCULATE` filter argument. Invalid usage is still reported at invocation sites, and relationship modifiers (`CROSSFILTER` / `USERELATIONSHIP`) and `KEEPFILTERS` remain invalid as UDF bodies, matching engine behavior. +- When renaming a table that's being referenced inside a NAMEOF function call, formula fixup now correctly updates the table reference. +- The semantic analyzer no longer reports a spurious error when `TABLEOF(...)` is passed as a table reference argument to `ALL`, `ALLEXCEPT`, `ALLSELECTED`, `ALLNOBLANKROW`, `ALLCROSSFILTERED` or `REMOVEFILTERS`. +- The **Update Table Schema** action now behaves correctly when invoked on a mix of object types, or when invoked on a Table Group. + +--- +## Coming from Tabular Editor 2.x? + +Watch [this video](https://youtu.be/O4ATwdzCvWc) to get a quick tour of the main features in Tabular Editor 3. Also, make sure to check our [onboarding guide](https://docs.tabulareditor.com/onboarding/index.html). + +**Tabular Editor 3 major features overview:** +- Fully customizable IDE, with multi-monitor, Hi-DPI support and themes +- New powerful DAX code editor with auto-complete, syntax checking, code folding and much, much more +- *Workspace mode, allowing you to save your changes to disk and synchronise model metadata to Analysis Services simultaneously +- *Preview table data with infinite scrolling, create PivotGrids or write DAX queries to browse the model or test calculation logic +- *Schedule data refreshes +- Update Table Schemas on both Provider and Structured Data Sources (yes, even for M queries!) +- Create data model diagrams +- Create DAX scripts that allow you to edit multiple measures or other calculated objects in a single document +- Record C# scripts and save as macros (formerly known as "Custom Actions") +- VertiPaq Analyzer integration +- DAX debugger +- DAX Optimizer integration +- Code Actions to easily refactor you DAX. + +*=Only while connected to an instance of Analysis Services or Power BI + +--- +