From 444194d21542d78b18b458ac367439cc6b2a7a76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20L=C3=B8nskov?= Date: Fri, 27 Mar 2026 19:33:35 +0100 Subject: [PATCH 01/11] Fix BOM errors --- content/features/tmdl.md | 2 +- content/features/views/bpa-view.md | 2 +- .../views/tom-explorer-view-reference.md | 2 +- content/references/shortcuts3.md | 342 +++++++++--------- 4 files changed, 174 insertions(+), 174 deletions(-) diff --git a/content/features/tmdl.md b/content/features/tmdl.md index 6f837c8ca..1dc66f885 100644 --- a/content/features/tmdl.md +++ b/content/features/tmdl.md @@ -1,4 +1,4 @@ ---- +--- uid: tmdl title: Tabular Model Definition Language (TMDL) author: Daniel Otykier diff --git a/content/features/views/bpa-view.md b/content/features/views/bpa-view.md index db9c00ec5..f13334c63 100644 --- a/content/features/views/bpa-view.md +++ b/content/features/views/bpa-view.md @@ -1,4 +1,4 @@ ---- +--- uid: bpa-view title: Best Practice Analyzer view author: Daniel Otykier diff --git a/content/getting-started/views/tom-explorer-view-reference.md b/content/getting-started/views/tom-explorer-view-reference.md index 0bee8abd8..664b9f649 100644 --- a/content/getting-started/views/tom-explorer-view-reference.md +++ b/content/getting-started/views/tom-explorer-view-reference.md @@ -1,4 +1,4 @@ ---- +--- uid: tom-explorer-view-reference title: TOM Explorer view author: Morten Lønskov diff --git a/content/references/shortcuts3.md b/content/references/shortcuts3.md index 756ee8306..eee8315f5 100644 --- a/content/references/shortcuts3.md +++ b/content/references/shortcuts3.md @@ -1,171 +1,171 @@ ---- -uid: shortcuts3 -title: Keyboard shortcuts Tabular Editor 3 -author: Daniel Otykier -updated: 2021-09-08 -applies_to: - products: - - product: Tabular Editor 2 - none: true - - product: Tabular Editor 3 - editions: - - edition: Desktop - full: true - - edition: Business - full: true - - edition: Enterprise - full: true ---- -# Keyboard shortcuts - -## General - -|Command|Shortcut| -|---|---| -|New model|Ctrl+N| -|Open file|Ctrl+O| -|Load model from a database|Ctrl+Shift+O| -|Save current item|Ctrl+S| -|Save all|Ctrl+Shift+S| -|Close Document|Ctrl+W| -|Exit|Alt+F4| -|Deployment wizard|Ctrl+Shift+D| -|Switch In-Focus Window|Ctrl+Tab| - -## Edit - -|Command|Shortcut| -|---|---| -|Select All|Ctrl+A| -|Copy|Ctrl+C| -|Cut|Ctrl+X| -|Paste|Ctrl+V| -|Undo|Ctrl+Z| -|Redo|Ctrl+Y| -|Find|Ctrl+F| -|Replace|Ctrl+H| - -## Data modelling - -|Command|Shortcut| -|---|---| -|Properties|F4| -|Edit object name / batch rename|F2| -|Batch rename children|Shift+F2| -|View dependencies|Shift+F12| -|Make invisible|Ctrl+I| -|Make visible|Ctrl+U| -|Create measure|Alt+1| -|Create calculated column|Alt+2| -|Create hierarchy|Alt+3| -|Create data column|Alt+4| -|Create table|Alt+5| -|Create calculated table|Alt+6| -|Create calculation group|Alt+7| -|Accept expression change|F5| - -## TOM Explorer - -|Command|Shortcut| -|---|---| -|Navigate up or down|Up / Down arrow| -|Expand / collapse current node|Right / Left arrow| -|Expand / collapse current node and all subnodes|Ctrl+Right / Left arrow| -|Expand / collapse entire tree|Ctrl+Shift+Right / Left arrow| -|Toggle measures|Ctrl+1| -|Toggle columns|Ctrl+2| -|Toggle hierarchies|Ctrl+3| -|Toggle partitions|Ctrl+4| -|Toggle display folders|Ctrl+5| -|Toggle hidden objects|Ctrl+6| -|Toggle info columns|Ctrl+7| -|Navigate back|Alt+Left arrow| -|Navigate forward|Alt+Right arrow| - -## Text/code editing (general) - -|Command|Shortcut| -|---|---| -|Cut line|Ctrl+L| -|Delete line|Ctrl+Shift+L| -|Copy line|Ctrl+Shift+T| -|Transpose lines|Ctrl+T| -|Duplicate line|Ctrl+D| -|Lowercase line|Ctrl+U| -|Uppercase line|Ctrl+Shift+U| -|Move lines up|Alt+Up arrow| -|Move lines down|Alt+Down arrow| - -## DAX code - -|Command|Shortcut| -|---|---| -|Go to definition|F12| -|Peek definition|Alt+F12| -|Refactor|Ctrl+R| -|Show auto-complete|Ctrl+Space| -|Show calltip|Ctrl+Shift+Space| -|Format DAX|F6| -|Format DAX (Short lines)|Shift+F6| -|Comment lines|Ctrl+K| -|Uncomment lines|Ctrl+U| -|Toggle comments|Ctrl+/| -|Collapse all foldable regions|Ctrl+Alt+[| -|Expand all foldable regions|Ctrl+Alt+]| -|Toggle all foldable regions state|Ctrl+Alt+;| -|Collapse foldable region|Ctrl+Shift+[| -|Expand foldable region|Ctrl+Shift+]| -|Toggle foldable region state|Ctrl+Shift+;| -|Delete reference or words|Ctrl+Backspace or Ctrl+Delete| -|Expand Selection|Ctrl+Shift+E| - -## DAX Query - -|Command|Shortcut| -|---|---| -|Execute query|F5| -|Execute selection|Shift+F5| -|Apply|F7| -|Apply & Sync|Shift+F7| -|Apply Selection|F8| -|Apply Selection & Sync|Shift+F8| -|Show Code Actions|Ctrl+.| - -## DAX Script - -|Command|Shortcut| -|---|---| -|Apply script|F5| -|Apply selection|F8| -|Apply script and save model|Shift+F5| -|Apply selection and save model|Shift+F8| - -## DAX Debugger - -|Command|Shortcut| -|---|---| -|Step over|F10| -|Step back|Shift+F10| -|Step in|F11| -|Step out|Shift+F11| -|Next row (innermost row context)|F9| -|Previous row (innermost row context)|Shift+F9| - -## C# Script - -|Command|Shortcut| -|---|---| -|Run script|F5| - -# Customizing Shortcuts - -Tabular Editor 3 allows for the customization of shortcuts by rebinding existing or adding new shortcuts. - -Setting shortcuts can be done through **Tools -> Preferences -> Keyboard** and locating the command that should have a shortcut binding and setting the binding in the menu. -Shortcuts can be set for many different parts of Tabular Editor 3 including [Macros](xref:creating-macros) to have C# scripts available at the fingertips. - -![Dax Script](~/content/assets/images/SetShortcuts.png) - -1. Keyboard Menu in Preferences -2. Find command that should have a shortcut -3. Set shortcut by holding desired shortcuts key and use "Assign Shortcut" \ No newline at end of file +--- +uid: shortcuts3 +title: Keyboard shortcuts Tabular Editor 3 +author: Daniel Otykier +updated: 2021-09-08 +applies_to: + products: + - product: Tabular Editor 2 + none: true + - product: Tabular Editor 3 + editions: + - edition: Desktop + full: true + - edition: Business + full: true + - edition: Enterprise + full: true +--- +# Keyboard shortcuts + +## General + +|Command|Shortcut| +|---|---| +|New model|Ctrl+N| +|Open file|Ctrl+O| +|Load model from a database|Ctrl+Shift+O| +|Save current item|Ctrl+S| +|Save all|Ctrl+Shift+S| +|Close Document|Ctrl+W| +|Exit|Alt+F4| +|Deployment wizard|Ctrl+Shift+D| +|Switch In-Focus Window|Ctrl+Tab| + +## Edit + +|Command|Shortcut| +|---|---| +|Select All|Ctrl+A| +|Copy|Ctrl+C| +|Cut|Ctrl+X| +|Paste|Ctrl+V| +|Undo|Ctrl+Z| +|Redo|Ctrl+Y| +|Find|Ctrl+F| +|Replace|Ctrl+H| + +## Data modelling + +|Command|Shortcut| +|---|---| +|Properties|F4| +|Edit object name / batch rename|F2| +|Batch rename children|Shift+F2| +|View dependencies|Shift+F12| +|Make invisible|Ctrl+I| +|Make visible|Ctrl+U| +|Create measure|Alt+1| +|Create calculated column|Alt+2| +|Create hierarchy|Alt+3| +|Create data column|Alt+4| +|Create table|Alt+5| +|Create calculated table|Alt+6| +|Create calculation group|Alt+7| +|Accept expression change|F5| + +## TOM Explorer + +|Command|Shortcut| +|---|---| +|Navigate up or down|Up / Down arrow| +|Expand / collapse current node|Right / Left arrow| +|Expand / collapse current node and all subnodes|Ctrl+Right / Left arrow| +|Expand / collapse entire tree|Ctrl+Shift+Right / Left arrow| +|Toggle measures|Ctrl+1| +|Toggle columns|Ctrl+2| +|Toggle hierarchies|Ctrl+3| +|Toggle partitions|Ctrl+4| +|Toggle display folders|Ctrl+5| +|Toggle hidden objects|Ctrl+6| +|Toggle info columns|Ctrl+7| +|Navigate back|Alt+Left arrow| +|Navigate forward|Alt+Right arrow| + +## Text/code editing (general) + +|Command|Shortcut| +|---|---| +|Cut line|Ctrl+L| +|Delete line|Ctrl+Shift+L| +|Copy line|Ctrl+Shift+T| +|Transpose lines|Ctrl+T| +|Duplicate line|Ctrl+D| +|Lowercase line|Ctrl+U| +|Uppercase line|Ctrl+Shift+U| +|Move lines up|Alt+Up arrow| +|Move lines down|Alt+Down arrow| + +## DAX code + +|Command|Shortcut| +|---|---| +|Go to definition|F12| +|Peek definition|Alt+F12| +|Refactor|Ctrl+R| +|Show auto-complete|Ctrl+Space| +|Show calltip|Ctrl+Shift+Space| +|Format DAX|F6| +|Format DAX (Short lines)|Shift+F6| +|Comment lines|Ctrl+K| +|Uncomment lines|Ctrl+U| +|Toggle comments|Ctrl+/| +|Collapse all foldable regions|Ctrl+Alt+[| +|Expand all foldable regions|Ctrl+Alt+]| +|Toggle all foldable regions state|Ctrl+Alt+;| +|Collapse foldable region|Ctrl+Shift+[| +|Expand foldable region|Ctrl+Shift+]| +|Toggle foldable region state|Ctrl+Shift+;| +|Delete reference or words|Ctrl+Backspace or Ctrl+Delete| +|Expand Selection|Ctrl+Shift+E| + +## DAX Query + +|Command|Shortcut| +|---|---| +|Execute query|F5| +|Execute selection|Shift+F5| +|Apply|F7| +|Apply & Sync|Shift+F7| +|Apply Selection|F8| +|Apply Selection & Sync|Shift+F8| +|Show Code Actions|Ctrl+.| + +## DAX Script + +|Command|Shortcut| +|---|---| +|Apply script|F5| +|Apply selection|F8| +|Apply script and save model|Shift+F5| +|Apply selection and save model|Shift+F8| + +## DAX Debugger + +|Command|Shortcut| +|---|---| +|Step over|F10| +|Step back|Shift+F10| +|Step in|F11| +|Step out|Shift+F11| +|Next row (innermost row context)|F9| +|Previous row (innermost row context)|Shift+F9| + +## C# Script + +|Command|Shortcut| +|---|---| +|Run script|F5| + +# Customizing Shortcuts + +Tabular Editor 3 allows for the customization of shortcuts by rebinding existing or adding new shortcuts. + +Setting shortcuts can be done through **Tools -> Preferences -> Keyboard** and locating the command that should have a shortcut binding and setting the binding in the menu. +Shortcuts can be set for many different parts of Tabular Editor 3 including [Macros](xref:creating-macros) to have C# scripts available at the fingertips. + +![Dax Script](~/content/assets/images/SetShortcuts.png) + +1. Keyboard Menu in Preferences +2. Find command that should have a shortcut +3. Set shortcut by holding desired shortcuts key and use "Assign Shortcut" \ No newline at end of file From fa1e2bc0ee4d924137a4f0067b7f955697659f98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20L=C3=B8nskov?= Date: Fri, 27 Mar 2026 19:34:00 +0100 Subject: [PATCH 02/11] Update on Direct Lake based on newest msft documentation --- .../Semantic-Model/direct-lake-sql-model.md | 17 +++++----- .../Semantic-Model/semantic-model-types.md | 31 +++++++++--------- content/tutorials/direct-lake-guidance.md | 32 +++++++++++++------ 3 files changed, 46 insertions(+), 34 deletions(-) diff --git a/content/features/Semantic-Model/direct-lake-sql-model.md b/content/features/Semantic-Model/direct-lake-sql-model.md index a1d5af2dc..d76ba5741 100644 --- a/content/features/Semantic-Model/direct-lake-sql-model.md +++ b/content/features/Semantic-Model/direct-lake-sql-model.md @@ -2,7 +2,7 @@ uid: direct-lake-sql-model title: Direct Lake on SQL Semantic Models author: Morten Lønskov -updated: 2024-08-22 +updated: 2026-03-27 applies_to: products: - product: Tabular Editor 2 @@ -24,14 +24,13 @@ Direct Lake on SQL semantic models connect directly to data sources stored in [O > As of [Tabular Editor 3.22.0](../../references/release-notes/3_22_0.md), Tabular Editor 3 supports Direct Lake on OneLake, which is recommended in most scenarios. See our [Direct Lake guidance](xref:direct-lake-guidance) article for more information. Tabular Editor 3 can create and connect to this type of model. For a tutorial on this please refer to our blog article: [Direct Lake semantic models: How to use them with Tabular Editor](https://blog.tabulareditor.com/2023/09/26/fabric-direct-lake-with-tabular-editor-part-2-creation/). -Tabular Editor 3 can create direct lake semantic models with both the Lakehouse and Datawarehouse SQL Endpoint. +Tabular Editor 3 can create Direct Lake semantic models with both the Lakehouse and Datawarehouse SQL Endpoint. -Tabular Editor 2 can connect to Direct Lake semantic models, but does not have any built in functionality to create new tables or direct lake semantic models. This needs to be done manually or with a C# script. +Tabular Editor 2 can connect to Direct Lake semantic models, but does not have any built-in functionality to create new tables or Direct Lake semantic models. This needs to be done manually or with a C# script. -
-
Direct Lake limitations
- There are several limitations to the changes that can be made to a Direct Lake model: Direct Lake Known Issues and Limitations We recommend this article by SQLBI for a initial overview of choosing between Direct Lake and Import mode. -
+> [!NOTE] +> **Direct Lake limitations** +> There are several limitations to the changes that can be made to a Direct Lake model. See [Direct Lake Considerations and Limitations](https://learn.microsoft.com/en-us/fabric/fundamentals/direct-lake-overview#considerations-and-limitations) for the full list. See also [this article by SQLBI](https://www.sqlbi.com/blog/marco/2024/04/06/direct-lake-vs-import-mode-in-power-bi/) for an overview of choosing between Direct Lake and Import mode. ## Creating a Direct Lake on SQL model in Tabular Editor 3 @@ -43,7 +42,7 @@ Using the checkbox ensures that Direct Lake specific properties and annotations > [!NOTE] > Direct Lake on SQL models currently use a collation that is different from regular Power BI import semantic models. This may lead to different results when querying the model, or when referencing object names in DAX code. - For more information please see this blog post by Kurt Buhler: [Case-sensitive models in Power BI: consequences & considerations](https://data-goblins.com/power-bi/case-specific) +> For more information, see this blog post by Kurt Buhler: [Case-sensitive models in Power BI: consequences & considerations](https://data-goblins.com/power-bi/case-specific). > [!IMPORTANT] > As of [Tabular Editor 3.22.0](../../references/release-notes/3_22_0.md), the Direct Lake checkbox has been removed from the New Model dialog. You must [manually set the collation on your model to match that of your Fabric Warehouse](xref:direct-lake-guidance#collation) if using Direct Lake on SQL. @@ -62,7 +61,7 @@ The top title bar of Tabular Editor shows which type of model is open in that in ## Converting a Direct Lake model to Import Mode -The below C# script converts and existing model into 'Import Mode'. This can be useful if the data latency requirements of your model does not require Direct Lake or you want to avoid the limitations of a Direct Lake model but have already started building one inside Fabric. +The below C# script converts an existing model into Import mode. This can be useful if the data latency requirements of your model does not require Direct Lake or you want to avoid the limitations of a Direct Lake model but have already started building one inside Fabric. Running the script is possible when Tabular Editor is connected to a semantic model through the XMLA endpoint. However, saving changes directly back to the Power BI/Fabric workspace is not supported by Microsoft. To circumvent this, the recommended approach is to use the "Model > Deploy..." option. This allows for the deployment of the newly converted model as a new entity in a workspace. diff --git a/content/features/Semantic-Model/semantic-model-types.md b/content/features/Semantic-Model/semantic-model-types.md index a9ad7db7f..c88aee94b 100644 --- a/content/features/Semantic-Model/semantic-model-types.md +++ b/content/features/Semantic-Model/semantic-model-types.md @@ -2,7 +2,7 @@ uid: semantic-model-types title: Power BI Semantic model Types author: Morten Lønskov -updated: 2025-06-19 +updated: 2026-03-27 applies_to: products: - product: Tabular Editor 2 @@ -24,54 +24,55 @@ Tabular Editor can work with several different model types. Below is an overview |Model Type|Import|Direct Query|Direct Lake on OneLake|Direct Lake on SQL|.pbix|.pbip| -|---|---|---|---|---| -|Connect in Tabular Editor|✔️|✔️|✔️|✔️|✔️| +|---|---|---|---|---|---|---| +|Connect in Tabular Editor|✔️|✔️|✔️|✔️|✔️| | |Create new model|✔️|✔️|✔️|✔️|✔️|✔️| |Write Measures|✔️|✔️|✔️|✔️|✔️|✔️| |Create & Edit Tables|✔️|✔️|✔️[1](#DirectLake)|✔️[1](#DirectLake)|✔️|✔️| |Create & Edit Partitions|✔️|✔️|✔️[1](#DirectLake)|✔️[1](#DirectLake)|✔️|✔️| |Create & Edit Columns|✔️|✔️|✔️[1](#DirectLake)|✔️[1](#DirectLake)|✔️|✔️| -|Create & Edit Calculated Tables|✔️|✔️|✔️[2](#DirectLakeCalculated)|✔️|✔️|✔️| -|Create & Edit Calculated Columns|✔️|✔️|✔️[2](#DirectLakeCalculated)|✔️|✔️|✔️| -|Create & Edit Calculation Groups|✔️|✔️|✔️|✔️|✔️| -|Create & Edit Relationships|✔️|✔️|✔️|✔️|✔️| +|Create & Edit Calculated Tables|✔️|✔️|✔️[2](#DirectLakeCalculated)|✔️[4](#DirectLakeSQLCalculated)|✔️|✔️| +|Create & Edit Calculated Columns|✔️|✔️|❌|❌|✔️|✔️| +|Create & Edit Calculation Groups|✔️|✔️|✔️|✔️|✔️| | +|Create & Edit Relationships|✔️|✔️|✔️|✔️|✔️| | |Create & Edit Roles|✔️|✔️|✔️|✔️|✔️|✔️| |Create & Edit Perspectives|✔️|✔️|✔️|✔️|✔️|✔️| |Create & Edit Translations|✔️|✔️|✔️|✔️|✔️|✔️| -|Use Best Practice Analyzer|✔️|✔️|✔️|✔️|✔️| +|Use Best Practice Analyzer|✔️|✔️|✔️|✔️|✔️| | |Edit All TOM properties|✔️|✔️|✔️|✔️|✔️|✔️| |Create Diagrams[3](#TE3Prem)|✔️|✔️|✔️|✔️|✔️|✔️| |Use Preview Data[3](#TE3Prem)|✔️|✔️|✔️|✔️|✔️|✔️| |Use Pivot Grids[3](#TE3Prem)|✔️|✔️|✔️|✔️|✔️|✔️| |Use DAX Queries[3](#TE3Prem)|✔️|✔️|✔️|✔️|✔️|✔️| |Use DAX Debugger[3](#TE3Prem)|✔️|✔️|✔️|✔️|✔️|✔️| -|Use Vertipac Analyzer[3](#TE3Prem)|✔️|✔️|✔️|✔️|✔️|✔️| +|Use VertiPaq Analyzer[3](#TE3Prem)|✔️|✔️|✔️|✔️|✔️|✔️| |Process Model and Tables[3](#TE3Prem)|✔️|✔️|✔️|✔️|✔️|✔️| -|Delete Objects|✔️|✔️|✔️|✔️| +|Delete Objects|✔️|✔️|✔️|✔️| | | **Legend:** - ✔️: Supported - ❌: Unsupported -1 - The table partition must be an Entity Partition to work correctly and Direct Lake models can only have one partition. -2 - Calculated Tables and Columns cannot refer to Direct Lake on OneLake tables or columns. +1 - The table partition must be an Entity Partition to work correctly. Direct Lake models can only have one partition per table. +2 - Calculated Tables cannot refer to Direct Lake on OneLake tables or columns. Calculation groups, what-if parameters and field parameters are supported. 3 - Tabular Editor 3 features only. Operations performed through the XMLA endpoint requires a Business or Enterprise license. [More information](xref:editions). +4 - Direct Lake on SQL only supports calculation groups, what-if parameters and field parameters, which implicitly create calculated tables. General calculated tables are not supported. >[!NOTE] -> The June 2025 Release of Power BI Desktop all modeling limitations for third party tools where lifted. Prior to that various modeling operations where not supported. See [Power BI Desktop Limitations](xref:desktop-limitations) +> The June 2025 release of Power BI Desktop lifted all modeling limitations for third-party tools. Prior to that, various modeling operations were not supported. See [Power BI Desktop Limitations](xref:desktop-limitations). >[!TIP] > For further details on restrictions on Direct Lake models refer to Microsoft's [Direct Lake documentation](https://learn.microsoft.com/en-us/fabric/fundamentals/direct-lake-overview) ## Unsupported Semantic Model types -The following semantic model types are unsupported, as they don't support XMLA write operations. +The following semantic model types are unsupported, as they do not support XMLA write operations. - Reports based on a live connection to an Azure Analysis Services or SQL Server Analysis Services model. - Reports based on a live connection to a Power BI dataset. - Models with Push data. - Models stored in Power BI My Workspace. - Models stored in Power BI Pro Workspace. -- Direct Lake Default Semantic Models. (It is possible to connect to a default dataset, but it is not possible to change it through the XMLA endpoint) +- Direct Lake Default Semantic Models. As of September 2025, Power BI no longer automatically creates default semantic models when a warehouse, lakehouse or mirrored item is created. By November 2025, all existing default semantic models were disconnected from their items and became independent semantic models. It is possible to connect to a default semantic model, but it is not possible to change it through the XMLA endpoint. - Excel workbook Semantic Models. \ No newline at end of file diff --git a/content/tutorials/direct-lake-guidance.md b/content/tutorials/direct-lake-guidance.md index 2f7352499..760e3ee5c 100644 --- a/content/tutorials/direct-lake-guidance.md +++ b/content/tutorials/direct-lake-guidance.md @@ -2,7 +2,7 @@ uid: direct-lake-guidance title: Direct Lake Guidance author: Daniel Otykier -updated: 2024-06-18 +updated: 2026-03-27 applies_to: products: - product: Tabular Editor 2 @@ -30,7 +30,7 @@ The following table summarizes the storage modes available in Power BI semantic | Import | Data is imported into the semantic model and stored in the model's in-memory cache (VertiPaq). | When you need fast query performance and can afford to refresh the data periodically. | | DirectQuery | Data is queried directly from the source at query time, without being imported into the model. Supports various sources, such as SQL, KQL and even other semantic models. | When you need real-time data access or when the data volume is too large to fit in memory. | | Dual | A hybrid mode where the engine can choose between returning the imported data or delegating to DirectQuery, depending on the query context. | When your model contains a mix of DirectQuery and Import tables (for example when using aggregations), and you have tables that are related to both. | -| Direct Lake on OneLake | Utilizes the Delta Parquet story format to quickly swap the data into semantic model memory when needed. | When your data is already available as tables or materialized views in a Fabric Warehouse or Lakehouse. | +| Direct Lake on OneLake | Utilizes the Delta Parquet storage format to quickly swap the data into semantic model memory when needed. | When your data is already available as tables or materialized views in a Fabric Warehouse or Lakehouse. | | Direct Lake on SQL | Older version of Direct Lake which utilizes the SQL Analytics Endpoint of Fabric Warehouses or Lakehouses. | Not recommended for new development (use Direct Lake on OneLake instead). | > [!NOTE] @@ -40,14 +40,26 @@ The following table summarizes the storage modes available in Power BI semantic [Direct Lake on OneLake](https://learn.microsoft.com/en-us/fabric/fundamentals/direct-lake-overview#key-concepts-and-terminology) was introduced in March 2025 as an alternative to Direct Lake on SQL. With Direct Lake on OneLake, there is no dependency on the SQL endpoint and no fallback to DirectQuery mode. This also means that the [usual restrictions that apply to DirectQuery models](https://learn.microsoft.com/en-us/power-bi/connect-data/desktop-directquery-about#modeling-limitations) do not apply to Direct Lake on OneLake models. -However, as with Direct Lake on SQL, there are still some [limitations that *do* apply](https://learn.microsoft.com/en-us/fabric/fundamentals/direct-lake-overview#considerations-and-limitations). The most important limitations are listed below. See the link for a full list of limitations: +> [!NOTE] +> Direct Lake on OneLake is currently in public preview. You must enable the tenant setting **User can create Direct Lake on OneLake semantic models (preview)** in the Fabric admin portal before you can create semantic models with this table storage mode. + +However, as with Direct Lake on SQL, there are still some [limitations that *do* apply](https://learn.microsoft.com/en-us/fabric/fundamentals/direct-lake-overview#considerations-and-limitations). Key limitations include: + +- Calculated columns are not supported in either Direct Lake mode. +- Calculated tables cannot reference columns or tables in Direct Lake storage mode. Calculation groups, what-if parameters and field parameters are supported because they create implicit calculated tables that do not reference Direct Lake columns. +- Non-materialized SQL views are not supported as data sources for Direct Lake on OneLake tables. Use materialized views or ensure the source Delta table contains the columns you need. +- Shortcuts in a lakehouse are not supported as data sources during the public preview of Direct Lake on OneLake. -- Calculated columns on Direct Lake tables cannot reference columns that are sourced from OneLake. -- Calculated tables on Direct Lake models cannot refer columns on Direct Lake tables that are sourced from OneLake. +For a full and up-to-date list of limitations, see the [Microsoft documentation on Direct Lake considerations and limitations](https://learn.microsoft.com/en-us/fabric/fundamentals/direct-lake-overview#considerations-and-limitations). -One possible workaround for the above limitation, is to create a **composite model** by combining Direct Lake tables with Import tables. This is allowed with Direct Lake on OneLake, but not with Direct Lake on SQL. In this case, you would typically use Import mode for smaller dimension tables, where you may need to add custom groupings, which calculated columns are ideal for, while keeping the larger fact tables in Direct Lake mode. +### Composite models -Alternatively, ensure that your source contains the columns it needs. If you add columns through a view, please note that the view must be materialized in the Fabric Warehouse or Lakehouse, as Direct Lake on OneLake does not support non-materialized views. +One workaround for the calculated column limitation is to create a **composite model** by combining Direct Lake tables with Import tables. This is supported with Direct Lake on OneLake, but not with Direct Lake on SQL. In a composite model, you typically keep larger fact tables in Direct Lake mode while using Import mode for smaller dimension tables where you need calculated columns or custom groupings. + +Direct Lake on OneLake also supports combining with DirectQuery tables through XMLA-based tools such as Tabular Editor. Import tables can be added through Power BI web modeling, Power BI Desktop (live editing) or through XMLA tools. + +> [!NOTE] +> Direct Lake on SQL does not support composite models. You cannot combine Direct Lake on SQL tables with Import, DirectQuery or Dual storage mode tables in the same semantic model. However, you can use Power BI Desktop to create a composite model *on top of* a Direct Lake on SQL semantic model and extend it with new tables. See [Build a composite model on a semantic model](https://learn.microsoft.com/en-us/power-bi/transform-model/desktop-composite-models#building-a-composite-model-on-a-semantic-model-or-model) for more information. ## Collation @@ -56,7 +68,7 @@ When using **Direct Lake on OneLake**, the collation of the model is the same as For a **Direct Lake on SQL** model, the collation is case-insensitive for queries that do not fallback to DirectQuery. If the query does fallback, the collation depends on the collation of the source. For a Fabric Warehouse, the collation might be case-sensitive, in which case you should specify a [case-sensitive collation on the model](https://data-goblins.com/power-bi/case-specific). > [!NOTE] -> You cannot change the collation of a model once the metadata has been deployed to Analysis Services / Power BI. As such, if you plan to use Direct Lake on SQL with a case-sensitive Fabric Warehouse, you must set the collation on the model metadata before it's deployed: +> You cannot change the collation of a model once the metadata has been deployed to Analysis Services / Power BI. As such, if you plan to use Direct Lake on SQL with a case-sensitive Fabric Warehouse, you must set the collation on the model metadata before it is deployed: > > 1. Create a new model in Tabular Editor 3 (File > New > Model...) > 2. Uncheck "Use workspace database" @@ -105,11 +117,11 @@ This section contains a more technical description on how the TOM objects and pr To manually set up a table for **Direct Lake on OneLake** mode, you need to do the following: -1. **Create Shared Expression**: Direct Lake tables use "Entity" partitions, which much reference a Shared Expression in the model. Start out by creating this shared expression, if you don't have it already. Name it `DatabaseQuery`: +1. **Create Shared Expression**: Direct Lake tables use "Entity" partitions, which must reference a Shared Expression in the model. Start by creating this shared expression, if you do not have it already. Name it `DatabaseQuery`: ![Create Shared Expression](../assets/images/create-shared-expression.png) -2. **Configure Shared Expression**: Set the **Kind** property of the expression you created in step 1 to "M", and set the *Expression** property to the following M query, replacing the IDs in the URL for your Fabric workspace and Lakehouse/Warehouse: +2. **Configure Shared Expression**: Set the **Kind** property of the expression you created in step 1 to "M", and set the **Expression** property to the following M query, replacing the IDs in the URL for your Fabric workspace and Lakehouse/Warehouse: ```m let From 4343bf6b6c8ef6d863ab4b4869ab5653941227ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20L=C3=B8nskov?= Date: Fri, 27 Mar 2026 19:33:35 +0100 Subject: [PATCH 03/11] Fix BOM errors --- content/features/tmdl.md | 2 +- content/features/views/bpa-view.md | 2 +- .../views/tom-explorer-view-reference.md | 2 +- content/references/shortcuts3.md | 342 +++++++++--------- 4 files changed, 174 insertions(+), 174 deletions(-) diff --git a/content/features/tmdl.md b/content/features/tmdl.md index 6f837c8ca..1dc66f885 100644 --- a/content/features/tmdl.md +++ b/content/features/tmdl.md @@ -1,4 +1,4 @@ ---- +--- uid: tmdl title: Tabular Model Definition Language (TMDL) author: Daniel Otykier diff --git a/content/features/views/bpa-view.md b/content/features/views/bpa-view.md index db9c00ec5..f13334c63 100644 --- a/content/features/views/bpa-view.md +++ b/content/features/views/bpa-view.md @@ -1,4 +1,4 @@ ---- +--- uid: bpa-view title: Best Practice Analyzer view author: Daniel Otykier diff --git a/content/getting-started/views/tom-explorer-view-reference.md b/content/getting-started/views/tom-explorer-view-reference.md index 0bee8abd8..664b9f649 100644 --- a/content/getting-started/views/tom-explorer-view-reference.md +++ b/content/getting-started/views/tom-explorer-view-reference.md @@ -1,4 +1,4 @@ ---- +--- uid: tom-explorer-view-reference title: TOM Explorer view author: Morten Lønskov diff --git a/content/references/shortcuts3.md b/content/references/shortcuts3.md index 756ee8306..eee8315f5 100644 --- a/content/references/shortcuts3.md +++ b/content/references/shortcuts3.md @@ -1,171 +1,171 @@ ---- -uid: shortcuts3 -title: Keyboard shortcuts Tabular Editor 3 -author: Daniel Otykier -updated: 2021-09-08 -applies_to: - products: - - product: Tabular Editor 2 - none: true - - product: Tabular Editor 3 - editions: - - edition: Desktop - full: true - - edition: Business - full: true - - edition: Enterprise - full: true ---- -# Keyboard shortcuts - -## General - -|Command|Shortcut| -|---|---| -|New model|Ctrl+N| -|Open file|Ctrl+O| -|Load model from a database|Ctrl+Shift+O| -|Save current item|Ctrl+S| -|Save all|Ctrl+Shift+S| -|Close Document|Ctrl+W| -|Exit|Alt+F4| -|Deployment wizard|Ctrl+Shift+D| -|Switch In-Focus Window|Ctrl+Tab| - -## Edit - -|Command|Shortcut| -|---|---| -|Select All|Ctrl+A| -|Copy|Ctrl+C| -|Cut|Ctrl+X| -|Paste|Ctrl+V| -|Undo|Ctrl+Z| -|Redo|Ctrl+Y| -|Find|Ctrl+F| -|Replace|Ctrl+H| - -## Data modelling - -|Command|Shortcut| -|---|---| -|Properties|F4| -|Edit object name / batch rename|F2| -|Batch rename children|Shift+F2| -|View dependencies|Shift+F12| -|Make invisible|Ctrl+I| -|Make visible|Ctrl+U| -|Create measure|Alt+1| -|Create calculated column|Alt+2| -|Create hierarchy|Alt+3| -|Create data column|Alt+4| -|Create table|Alt+5| -|Create calculated table|Alt+6| -|Create calculation group|Alt+7| -|Accept expression change|F5| - -## TOM Explorer - -|Command|Shortcut| -|---|---| -|Navigate up or down|Up / Down arrow| -|Expand / collapse current node|Right / Left arrow| -|Expand / collapse current node and all subnodes|Ctrl+Right / Left arrow| -|Expand / collapse entire tree|Ctrl+Shift+Right / Left arrow| -|Toggle measures|Ctrl+1| -|Toggle columns|Ctrl+2| -|Toggle hierarchies|Ctrl+3| -|Toggle partitions|Ctrl+4| -|Toggle display folders|Ctrl+5| -|Toggle hidden objects|Ctrl+6| -|Toggle info columns|Ctrl+7| -|Navigate back|Alt+Left arrow| -|Navigate forward|Alt+Right arrow| - -## Text/code editing (general) - -|Command|Shortcut| -|---|---| -|Cut line|Ctrl+L| -|Delete line|Ctrl+Shift+L| -|Copy line|Ctrl+Shift+T| -|Transpose lines|Ctrl+T| -|Duplicate line|Ctrl+D| -|Lowercase line|Ctrl+U| -|Uppercase line|Ctrl+Shift+U| -|Move lines up|Alt+Up arrow| -|Move lines down|Alt+Down arrow| - -## DAX code - -|Command|Shortcut| -|---|---| -|Go to definition|F12| -|Peek definition|Alt+F12| -|Refactor|Ctrl+R| -|Show auto-complete|Ctrl+Space| -|Show calltip|Ctrl+Shift+Space| -|Format DAX|F6| -|Format DAX (Short lines)|Shift+F6| -|Comment lines|Ctrl+K| -|Uncomment lines|Ctrl+U| -|Toggle comments|Ctrl+/| -|Collapse all foldable regions|Ctrl+Alt+[| -|Expand all foldable regions|Ctrl+Alt+]| -|Toggle all foldable regions state|Ctrl+Alt+;| -|Collapse foldable region|Ctrl+Shift+[| -|Expand foldable region|Ctrl+Shift+]| -|Toggle foldable region state|Ctrl+Shift+;| -|Delete reference or words|Ctrl+Backspace or Ctrl+Delete| -|Expand Selection|Ctrl+Shift+E| - -## DAX Query - -|Command|Shortcut| -|---|---| -|Execute query|F5| -|Execute selection|Shift+F5| -|Apply|F7| -|Apply & Sync|Shift+F7| -|Apply Selection|F8| -|Apply Selection & Sync|Shift+F8| -|Show Code Actions|Ctrl+.| - -## DAX Script - -|Command|Shortcut| -|---|---| -|Apply script|F5| -|Apply selection|F8| -|Apply script and save model|Shift+F5| -|Apply selection and save model|Shift+F8| - -## DAX Debugger - -|Command|Shortcut| -|---|---| -|Step over|F10| -|Step back|Shift+F10| -|Step in|F11| -|Step out|Shift+F11| -|Next row (innermost row context)|F9| -|Previous row (innermost row context)|Shift+F9| - -## C# Script - -|Command|Shortcut| -|---|---| -|Run script|F5| - -# Customizing Shortcuts - -Tabular Editor 3 allows for the customization of shortcuts by rebinding existing or adding new shortcuts. - -Setting shortcuts can be done through **Tools -> Preferences -> Keyboard** and locating the command that should have a shortcut binding and setting the binding in the menu. -Shortcuts can be set for many different parts of Tabular Editor 3 including [Macros](xref:creating-macros) to have C# scripts available at the fingertips. - -![Dax Script](~/content/assets/images/SetShortcuts.png) - -1. Keyboard Menu in Preferences -2. Find command that should have a shortcut -3. Set shortcut by holding desired shortcuts key and use "Assign Shortcut" \ No newline at end of file +--- +uid: shortcuts3 +title: Keyboard shortcuts Tabular Editor 3 +author: Daniel Otykier +updated: 2021-09-08 +applies_to: + products: + - product: Tabular Editor 2 + none: true + - product: Tabular Editor 3 + editions: + - edition: Desktop + full: true + - edition: Business + full: true + - edition: Enterprise + full: true +--- +# Keyboard shortcuts + +## General + +|Command|Shortcut| +|---|---| +|New model|Ctrl+N| +|Open file|Ctrl+O| +|Load model from a database|Ctrl+Shift+O| +|Save current item|Ctrl+S| +|Save all|Ctrl+Shift+S| +|Close Document|Ctrl+W| +|Exit|Alt+F4| +|Deployment wizard|Ctrl+Shift+D| +|Switch In-Focus Window|Ctrl+Tab| + +## Edit + +|Command|Shortcut| +|---|---| +|Select All|Ctrl+A| +|Copy|Ctrl+C| +|Cut|Ctrl+X| +|Paste|Ctrl+V| +|Undo|Ctrl+Z| +|Redo|Ctrl+Y| +|Find|Ctrl+F| +|Replace|Ctrl+H| + +## Data modelling + +|Command|Shortcut| +|---|---| +|Properties|F4| +|Edit object name / batch rename|F2| +|Batch rename children|Shift+F2| +|View dependencies|Shift+F12| +|Make invisible|Ctrl+I| +|Make visible|Ctrl+U| +|Create measure|Alt+1| +|Create calculated column|Alt+2| +|Create hierarchy|Alt+3| +|Create data column|Alt+4| +|Create table|Alt+5| +|Create calculated table|Alt+6| +|Create calculation group|Alt+7| +|Accept expression change|F5| + +## TOM Explorer + +|Command|Shortcut| +|---|---| +|Navigate up or down|Up / Down arrow| +|Expand / collapse current node|Right / Left arrow| +|Expand / collapse current node and all subnodes|Ctrl+Right / Left arrow| +|Expand / collapse entire tree|Ctrl+Shift+Right / Left arrow| +|Toggle measures|Ctrl+1| +|Toggle columns|Ctrl+2| +|Toggle hierarchies|Ctrl+3| +|Toggle partitions|Ctrl+4| +|Toggle display folders|Ctrl+5| +|Toggle hidden objects|Ctrl+6| +|Toggle info columns|Ctrl+7| +|Navigate back|Alt+Left arrow| +|Navigate forward|Alt+Right arrow| + +## Text/code editing (general) + +|Command|Shortcut| +|---|---| +|Cut line|Ctrl+L| +|Delete line|Ctrl+Shift+L| +|Copy line|Ctrl+Shift+T| +|Transpose lines|Ctrl+T| +|Duplicate line|Ctrl+D| +|Lowercase line|Ctrl+U| +|Uppercase line|Ctrl+Shift+U| +|Move lines up|Alt+Up arrow| +|Move lines down|Alt+Down arrow| + +## DAX code + +|Command|Shortcut| +|---|---| +|Go to definition|F12| +|Peek definition|Alt+F12| +|Refactor|Ctrl+R| +|Show auto-complete|Ctrl+Space| +|Show calltip|Ctrl+Shift+Space| +|Format DAX|F6| +|Format DAX (Short lines)|Shift+F6| +|Comment lines|Ctrl+K| +|Uncomment lines|Ctrl+U| +|Toggle comments|Ctrl+/| +|Collapse all foldable regions|Ctrl+Alt+[| +|Expand all foldable regions|Ctrl+Alt+]| +|Toggle all foldable regions state|Ctrl+Alt+;| +|Collapse foldable region|Ctrl+Shift+[| +|Expand foldable region|Ctrl+Shift+]| +|Toggle foldable region state|Ctrl+Shift+;| +|Delete reference or words|Ctrl+Backspace or Ctrl+Delete| +|Expand Selection|Ctrl+Shift+E| + +## DAX Query + +|Command|Shortcut| +|---|---| +|Execute query|F5| +|Execute selection|Shift+F5| +|Apply|F7| +|Apply & Sync|Shift+F7| +|Apply Selection|F8| +|Apply Selection & Sync|Shift+F8| +|Show Code Actions|Ctrl+.| + +## DAX Script + +|Command|Shortcut| +|---|---| +|Apply script|F5| +|Apply selection|F8| +|Apply script and save model|Shift+F5| +|Apply selection and save model|Shift+F8| + +## DAX Debugger + +|Command|Shortcut| +|---|---| +|Step over|F10| +|Step back|Shift+F10| +|Step in|F11| +|Step out|Shift+F11| +|Next row (innermost row context)|F9| +|Previous row (innermost row context)|Shift+F9| + +## C# Script + +|Command|Shortcut| +|---|---| +|Run script|F5| + +# Customizing Shortcuts + +Tabular Editor 3 allows for the customization of shortcuts by rebinding existing or adding new shortcuts. + +Setting shortcuts can be done through **Tools -> Preferences -> Keyboard** and locating the command that should have a shortcut binding and setting the binding in the menu. +Shortcuts can be set for many different parts of Tabular Editor 3 including [Macros](xref:creating-macros) to have C# scripts available at the fingertips. + +![Dax Script](~/content/assets/images/SetShortcuts.png) + +1. Keyboard Menu in Preferences +2. Find command that should have a shortcut +3. Set shortcut by holding desired shortcuts key and use "Assign Shortcut" \ No newline at end of file From 5ccb8aea62bb53c622631740b6f9e811e3d86cdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20L=C3=B8nskov?= Date: Fri, 27 Mar 2026 19:34:00 +0100 Subject: [PATCH 04/11] Update on Direct Lake based on newest msft documentation --- .../Semantic-Model/direct-lake-sql-model.md | 17 +++++----- .../Semantic-Model/semantic-model-types.md | 31 +++++++++--------- content/tutorials/direct-lake-guidance.md | 32 +++++++++++++------ 3 files changed, 46 insertions(+), 34 deletions(-) diff --git a/content/features/Semantic-Model/direct-lake-sql-model.md b/content/features/Semantic-Model/direct-lake-sql-model.md index a1d5af2dc..d76ba5741 100644 --- a/content/features/Semantic-Model/direct-lake-sql-model.md +++ b/content/features/Semantic-Model/direct-lake-sql-model.md @@ -2,7 +2,7 @@ uid: direct-lake-sql-model title: Direct Lake on SQL Semantic Models author: Morten Lønskov -updated: 2024-08-22 +updated: 2026-03-27 applies_to: products: - product: Tabular Editor 2 @@ -24,14 +24,13 @@ Direct Lake on SQL semantic models connect directly to data sources stored in [O > As of [Tabular Editor 3.22.0](../../references/release-notes/3_22_0.md), Tabular Editor 3 supports Direct Lake on OneLake, which is recommended in most scenarios. See our [Direct Lake guidance](xref:direct-lake-guidance) article for more information. Tabular Editor 3 can create and connect to this type of model. For a tutorial on this please refer to our blog article: [Direct Lake semantic models: How to use them with Tabular Editor](https://blog.tabulareditor.com/2023/09/26/fabric-direct-lake-with-tabular-editor-part-2-creation/). -Tabular Editor 3 can create direct lake semantic models with both the Lakehouse and Datawarehouse SQL Endpoint. +Tabular Editor 3 can create Direct Lake semantic models with both the Lakehouse and Datawarehouse SQL Endpoint. -Tabular Editor 2 can connect to Direct Lake semantic models, but does not have any built in functionality to create new tables or direct lake semantic models. This needs to be done manually or with a C# script. +Tabular Editor 2 can connect to Direct Lake semantic models, but does not have any built-in functionality to create new tables or Direct Lake semantic models. This needs to be done manually or with a C# script. -
-
Direct Lake limitations
- There are several limitations to the changes that can be made to a Direct Lake model: Direct Lake Known Issues and Limitations We recommend this article by SQLBI for a initial overview of choosing between Direct Lake and Import mode. -
+> [!NOTE] +> **Direct Lake limitations** +> There are several limitations to the changes that can be made to a Direct Lake model. See [Direct Lake Considerations and Limitations](https://learn.microsoft.com/en-us/fabric/fundamentals/direct-lake-overview#considerations-and-limitations) for the full list. See also [this article by SQLBI](https://www.sqlbi.com/blog/marco/2024/04/06/direct-lake-vs-import-mode-in-power-bi/) for an overview of choosing between Direct Lake and Import mode. ## Creating a Direct Lake on SQL model in Tabular Editor 3 @@ -43,7 +42,7 @@ Using the checkbox ensures that Direct Lake specific properties and annotations > [!NOTE] > Direct Lake on SQL models currently use a collation that is different from regular Power BI import semantic models. This may lead to different results when querying the model, or when referencing object names in DAX code. - For more information please see this blog post by Kurt Buhler: [Case-sensitive models in Power BI: consequences & considerations](https://data-goblins.com/power-bi/case-specific) +> For more information, see this blog post by Kurt Buhler: [Case-sensitive models in Power BI: consequences & considerations](https://data-goblins.com/power-bi/case-specific). > [!IMPORTANT] > As of [Tabular Editor 3.22.0](../../references/release-notes/3_22_0.md), the Direct Lake checkbox has been removed from the New Model dialog. You must [manually set the collation on your model to match that of your Fabric Warehouse](xref:direct-lake-guidance#collation) if using Direct Lake on SQL. @@ -62,7 +61,7 @@ The top title bar of Tabular Editor shows which type of model is open in that in ## Converting a Direct Lake model to Import Mode -The below C# script converts and existing model into 'Import Mode'. This can be useful if the data latency requirements of your model does not require Direct Lake or you want to avoid the limitations of a Direct Lake model but have already started building one inside Fabric. +The below C# script converts an existing model into Import mode. This can be useful if the data latency requirements of your model does not require Direct Lake or you want to avoid the limitations of a Direct Lake model but have already started building one inside Fabric. Running the script is possible when Tabular Editor is connected to a semantic model through the XMLA endpoint. However, saving changes directly back to the Power BI/Fabric workspace is not supported by Microsoft. To circumvent this, the recommended approach is to use the "Model > Deploy..." option. This allows for the deployment of the newly converted model as a new entity in a workspace. diff --git a/content/features/Semantic-Model/semantic-model-types.md b/content/features/Semantic-Model/semantic-model-types.md index a9ad7db7f..c88aee94b 100644 --- a/content/features/Semantic-Model/semantic-model-types.md +++ b/content/features/Semantic-Model/semantic-model-types.md @@ -2,7 +2,7 @@ uid: semantic-model-types title: Power BI Semantic model Types author: Morten Lønskov -updated: 2025-06-19 +updated: 2026-03-27 applies_to: products: - product: Tabular Editor 2 @@ -24,54 +24,55 @@ Tabular Editor can work with several different model types. Below is an overview |Model Type|Import|Direct Query|Direct Lake on OneLake|Direct Lake on SQL|.pbix|.pbip| -|---|---|---|---|---| -|Connect in Tabular Editor|✔️|✔️|✔️|✔️|✔️| +|---|---|---|---|---|---|---| +|Connect in Tabular Editor|✔️|✔️|✔️|✔️|✔️| | |Create new model|✔️|✔️|✔️|✔️|✔️|✔️| |Write Measures|✔️|✔️|✔️|✔️|✔️|✔️| |Create & Edit Tables|✔️|✔️|✔️[1](#DirectLake)|✔️[1](#DirectLake)|✔️|✔️| |Create & Edit Partitions|✔️|✔️|✔️[1](#DirectLake)|✔️[1](#DirectLake)|✔️|✔️| |Create & Edit Columns|✔️|✔️|✔️[1](#DirectLake)|✔️[1](#DirectLake)|✔️|✔️| -|Create & Edit Calculated Tables|✔️|✔️|✔️[2](#DirectLakeCalculated)|✔️|✔️|✔️| -|Create & Edit Calculated Columns|✔️|✔️|✔️[2](#DirectLakeCalculated)|✔️|✔️|✔️| -|Create & Edit Calculation Groups|✔️|✔️|✔️|✔️|✔️| -|Create & Edit Relationships|✔️|✔️|✔️|✔️|✔️| +|Create & Edit Calculated Tables|✔️|✔️|✔️[2](#DirectLakeCalculated)|✔️[4](#DirectLakeSQLCalculated)|✔️|✔️| +|Create & Edit Calculated Columns|✔️|✔️|❌|❌|✔️|✔️| +|Create & Edit Calculation Groups|✔️|✔️|✔️|✔️|✔️| | +|Create & Edit Relationships|✔️|✔️|✔️|✔️|✔️| | |Create & Edit Roles|✔️|✔️|✔️|✔️|✔️|✔️| |Create & Edit Perspectives|✔️|✔️|✔️|✔️|✔️|✔️| |Create & Edit Translations|✔️|✔️|✔️|✔️|✔️|✔️| -|Use Best Practice Analyzer|✔️|✔️|✔️|✔️|✔️| +|Use Best Practice Analyzer|✔️|✔️|✔️|✔️|✔️| | |Edit All TOM properties|✔️|✔️|✔️|✔️|✔️|✔️| |Create Diagrams[3](#TE3Prem)|✔️|✔️|✔️|✔️|✔️|✔️| |Use Preview Data[3](#TE3Prem)|✔️|✔️|✔️|✔️|✔️|✔️| |Use Pivot Grids[3](#TE3Prem)|✔️|✔️|✔️|✔️|✔️|✔️| |Use DAX Queries[3](#TE3Prem)|✔️|✔️|✔️|✔️|✔️|✔️| |Use DAX Debugger[3](#TE3Prem)|✔️|✔️|✔️|✔️|✔️|✔️| -|Use Vertipac Analyzer[3](#TE3Prem)|✔️|✔️|✔️|✔️|✔️|✔️| +|Use VertiPaq Analyzer[3](#TE3Prem)|✔️|✔️|✔️|✔️|✔️|✔️| |Process Model and Tables[3](#TE3Prem)|✔️|✔️|✔️|✔️|✔️|✔️| -|Delete Objects|✔️|✔️|✔️|✔️| +|Delete Objects|✔️|✔️|✔️|✔️| | | **Legend:** - ✔️: Supported - ❌: Unsupported -1 - The table partition must be an Entity Partition to work correctly and Direct Lake models can only have one partition. -2 - Calculated Tables and Columns cannot refer to Direct Lake on OneLake tables or columns. +1 - The table partition must be an Entity Partition to work correctly. Direct Lake models can only have one partition per table. +2 - Calculated Tables cannot refer to Direct Lake on OneLake tables or columns. Calculation groups, what-if parameters and field parameters are supported. 3 - Tabular Editor 3 features only. Operations performed through the XMLA endpoint requires a Business or Enterprise license. [More information](xref:editions). +4 - Direct Lake on SQL only supports calculation groups, what-if parameters and field parameters, which implicitly create calculated tables. General calculated tables are not supported. >[!NOTE] -> The June 2025 Release of Power BI Desktop all modeling limitations for third party tools where lifted. Prior to that various modeling operations where not supported. See [Power BI Desktop Limitations](xref:desktop-limitations) +> The June 2025 release of Power BI Desktop lifted all modeling limitations for third-party tools. Prior to that, various modeling operations were not supported. See [Power BI Desktop Limitations](xref:desktop-limitations). >[!TIP] > For further details on restrictions on Direct Lake models refer to Microsoft's [Direct Lake documentation](https://learn.microsoft.com/en-us/fabric/fundamentals/direct-lake-overview) ## Unsupported Semantic Model types -The following semantic model types are unsupported, as they don't support XMLA write operations. +The following semantic model types are unsupported, as they do not support XMLA write operations. - Reports based on a live connection to an Azure Analysis Services or SQL Server Analysis Services model. - Reports based on a live connection to a Power BI dataset. - Models with Push data. - Models stored in Power BI My Workspace. - Models stored in Power BI Pro Workspace. -- Direct Lake Default Semantic Models. (It is possible to connect to a default dataset, but it is not possible to change it through the XMLA endpoint) +- Direct Lake Default Semantic Models. As of September 2025, Power BI no longer automatically creates default semantic models when a warehouse, lakehouse or mirrored item is created. By November 2025, all existing default semantic models were disconnected from their items and became independent semantic models. It is possible to connect to a default semantic model, but it is not possible to change it through the XMLA endpoint. - Excel workbook Semantic Models. \ No newline at end of file diff --git a/content/tutorials/direct-lake-guidance.md b/content/tutorials/direct-lake-guidance.md index 7165f3ad4..db8c41484 100644 --- a/content/tutorials/direct-lake-guidance.md +++ b/content/tutorials/direct-lake-guidance.md @@ -2,7 +2,7 @@ uid: direct-lake-guidance title: Direct Lake Guidance author: Daniel Otykier -updated: 2024-06-18 +updated: 2026-03-27 applies_to: products: - product: Tabular Editor 2 @@ -30,7 +30,7 @@ The following table summarizes the storage modes available in Power BI semantic | Import | Data is imported into the semantic model and stored in the model's in-memory cache (VertiPaq). | When you need fast query performance and can afford to refresh the data periodically. | | DirectQuery | Data is queried directly from the source at query time, without being imported into the model. Supports various sources, such as SQL, KQL and even other semantic models. | When you need real-time data access or when the data volume is too large to fit in memory. | | Dual | A hybrid mode where the engine can choose between returning the imported data or delegating to DirectQuery, depending on the query context. | When your model contains a mix of DirectQuery and Import tables (for example when using aggregations), and you have tables that are related to both. | -| Direct Lake on OneLake | Utilizes the Delta Parquet story format to quickly swap the data into semantic model memory when needed. | When your data is already available as tables or materialized views in a Fabric Warehouse or Lakehouse. | +| Direct Lake on OneLake | Utilizes the Delta Parquet storage format to quickly swap the data into semantic model memory when needed. | When your data is already available as tables or materialized views in a Fabric Warehouse or Lakehouse. | | Direct Lake on SQL | Older version of Direct Lake which utilizes the SQL Analytics Endpoint of Fabric Warehouses or Lakehouses. | Not recommended for new development (use Direct Lake on OneLake instead). | > [!NOTE] @@ -40,14 +40,26 @@ The following table summarizes the storage modes available in Power BI semantic [Direct Lake on OneLake](https://learn.microsoft.com/en-us/fabric/fundamentals/direct-lake-overview#key-concepts-and-terminology) was introduced in March 2025 as an alternative to Direct Lake on SQL. With Direct Lake on OneLake, there is no dependency on the SQL endpoint and no fallback to DirectQuery mode. This also means that the [usual restrictions that apply to DirectQuery models](https://learn.microsoft.com/en-us/power-bi/connect-data/desktop-directquery-about#modeling-limitations) do not apply to Direct Lake on OneLake models. -However, as with Direct Lake on SQL, there are still some [limitations that *do* apply](https://learn.microsoft.com/en-us/fabric/fundamentals/direct-lake-overview#considerations-and-limitations). The most important limitations are listed below. See the link for a full list of limitations: +> [!NOTE] +> Direct Lake on OneLake is currently in public preview. You must enable the tenant setting **User can create Direct Lake on OneLake semantic models (preview)** in the Fabric admin portal before you can create semantic models with this table storage mode. + +However, as with Direct Lake on SQL, there are still some [limitations that *do* apply](https://learn.microsoft.com/en-us/fabric/fundamentals/direct-lake-overview#considerations-and-limitations). Key limitations include: + +- Calculated columns are not supported in either Direct Lake mode. +- Calculated tables cannot reference columns or tables in Direct Lake storage mode. Calculation groups, what-if parameters and field parameters are supported because they create implicit calculated tables that do not reference Direct Lake columns. +- Non-materialized SQL views are not supported as data sources for Direct Lake on OneLake tables. Use materialized views or ensure the source Delta table contains the columns you need. +- Shortcuts in a lakehouse are not supported as data sources during the public preview of Direct Lake on OneLake. -- Calculated columns on Direct Lake tables cannot reference columns that are sourced from OneLake. -- Calculated tables on Direct Lake models cannot refer columns on Direct Lake tables that are sourced from OneLake. +For a full and up-to-date list of limitations, see the [Microsoft documentation on Direct Lake considerations and limitations](https://learn.microsoft.com/en-us/fabric/fundamentals/direct-lake-overview#considerations-and-limitations). -One possible workaround for the above limitation, is to create a **composite model** by combining Direct Lake tables with Import tables. This is allowed with Direct Lake on OneLake, but not with Direct Lake on SQL. In this case, you would typically use Import mode for smaller dimension tables, where you may need to add custom groupings, which calculated columns are ideal for, while keeping the larger fact tables in Direct Lake mode. +### Composite models -Alternatively, ensure that your source contains the columns it needs. If you add columns through a view, please note that the view must be materialized in the Fabric Warehouse or Lakehouse, as Direct Lake on OneLake does not support non-materialized views. +One workaround for the calculated column limitation is to create a **composite model** by combining Direct Lake tables with Import tables. This is supported with Direct Lake on OneLake, but not with Direct Lake on SQL. In a composite model, you typically keep larger fact tables in Direct Lake mode while using Import mode for smaller dimension tables where you need calculated columns or custom groupings. + +Direct Lake on OneLake also supports combining with DirectQuery tables through XMLA-based tools such as Tabular Editor. Import tables can be added through Power BI web modeling, Power BI Desktop (live editing) or through XMLA tools. + +> [!NOTE] +> Direct Lake on SQL does not support composite models. You cannot combine Direct Lake on SQL tables with Import, DirectQuery or Dual storage mode tables in the same semantic model. However, you can use Power BI Desktop to create a composite model *on top of* a Direct Lake on SQL semantic model and extend it with new tables. See [Build a composite model on a semantic model](https://learn.microsoft.com/en-us/power-bi/transform-model/desktop-composite-models#building-a-composite-model-on-a-semantic-model-or-model) for more information. ## Collation @@ -57,7 +69,7 @@ When using **Direct Lake on OneLake**, the collation of the model is the same as For a **Direct Lake on SQL** model, the collation is case-insensitive for queries that do not fallback to DirectQuery. If the query does fallback, the collation depends on the collation of the source. For a Fabric Warehouse, the collation might be case-sensitive, in which case you should specify a [case-sensitive collation on the model](https://data-goblins.com/power-bi/case-specific). > [!NOTE] -> You cannot change the collation of a model once the metadata has been deployed to Analysis Services / Power BI. As such, if you plan to use Direct Lake on SQL with a case-sensitive Fabric Warehouse, you must set the collation on the model metadata before it's deployed: +> You cannot change the collation of a model once the metadata has been deployed to Analysis Services / Power BI. As such, if you plan to use Direct Lake on SQL with a case-sensitive Fabric Warehouse, you must set the collation on the model metadata before it is deployed: > > 1. Create a new model in Tabular Editor 3 (File > New > Model...) > 2. Uncheck "Use workspace database" @@ -106,11 +118,11 @@ This section contains a more technical description on how the TOM objects and pr To manually set up a table for **Direct Lake on OneLake** mode, you need to do the following: -1. **Create Shared Expression**: Direct Lake tables use "Entity" partitions, which much reference a Shared Expression in the model. Start out by creating this shared expression, if you don't have it already. Name it `DatabaseQuery`: +1. **Create Shared Expression**: Direct Lake tables use "Entity" partitions, which must reference a Shared Expression in the model. Start by creating this shared expression, if you do not have it already. Name it `DatabaseQuery`: ![Create Shared Expression](../assets/images/create-shared-expression.png) -2. **Configure Shared Expression**: Set the **Kind** property of the expression you created in step 1 to "M", and set the *Expression** property to the following M query, replacing the IDs in the URL for your Fabric workspace and Lakehouse/Warehouse: +2. **Configure Shared Expression**: Set the **Kind** property of the expression you created in step 1 to "M", and set the **Expression** property to the following M query, replacing the IDs in the URL for your Fabric workspace and Lakehouse/Warehouse: ```m let From 8a1e72e71d383fab07b6bd35902b852c12f648d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20L=C3=B8nskov?= Date: Tue, 31 Mar 2026 21:29:37 +0200 Subject: [PATCH 05/11] added token usage example --- content/features/ai-assistant.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/features/ai-assistant.md b/content/features/ai-assistant.md index e4bdfd9ae..f66d0887f 100644 --- a/content/features/ai-assistant.md +++ b/content/features/ai-assistant.md @@ -298,7 +298,7 @@ Select specific objects in the **TOM Explorer** before asking your question. Whe Other ways to reduce token usage: -- Ask focused questions about specific tables, measures or columns rather than broad questions about the entire model +- Ask focused questions about specific tables, measures or columns rather than broad questions about the entire model. A vague prompt such as *"Set display folders on all measures"* forces the assistant to retrieve metadata for the entire model. A specific prompt such as *"Set display folders on the measures I have selected"* limits the context to the current selection and uses far fewer tokens - Start new conversations when switching topics to avoid accumulating long conversation histories - Use a smaller or less expensive model for exploratory questions From e746970ad300b5163dea080bebdff5666bd82d41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20L=C3=B8nskov?= Date: Tue, 7 Apr 2026 13:30:55 +0200 Subject: [PATCH 06/11] fix a broken grid --- content/getting-started/editions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/getting-started/editions.md b/content/getting-started/editions.md index 4856928cc..0b6beb73a 100644 --- a/content/getting-started/editions.md +++ b/content/getting-started/editions.md @@ -35,7 +35,7 @@ Please refer to the matrix below for the full overview of supported scenarios: |Scenario / Edition|Desktop|Business|Enterprise| |---|---|---|---| -|External Tool for Power BI Desktop|||| +|External Tool for Power BI Desktop|||| |Load/save model metadata to disk**||*|| |Workspace Mode***||*|| |Power BI Premium Per User|||| From 29228646e9323bf98ffbb2123be38b03281cd10d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20L=C3=B8nskov?= Date: Wed, 8 Apr 2026 11:35:29 +0200 Subject: [PATCH 07/11] Include documentation around compatability mode --- .../how-to/change-compatibility-mode.png | Bin 0 -> 133504 bytes content/getting-started/editions.md | 6 +- content/how-tos/change-compatibility-mode.md | 57 ++++++++++++++++++ content/how-tos/toc.md | 1 + content/how-tos/update-compatibility-level.md | 11 ++++ 5 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 content/assets/images/how-to/change-compatibility-mode.png create mode 100644 content/how-tos/change-compatibility-mode.md diff --git a/content/assets/images/how-to/change-compatibility-mode.png b/content/assets/images/how-to/change-compatibility-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..f014da2b2946171338fe570bb6b0bbd8a2342683 GIT binary patch literal 133504 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 z❌|| |Azure AS / SSAS|DirectQuery*||| |Azure AS / SSAS|Direct Lake|N/A|N/A| -|Power BI|Perspectives||| -|Power BI|Multiple partitions||| +|Power BI|Perspectives**||| +|Power BI|Multiple partitions**||| |Power BI|DirectQuery||| |Power BI|Direct Lake||| \***Note:** Analysis Services on SQL Server Standard Edition pre-2019 does not support DirectQuery. Nor does Azure AS Basic Tier. [Learn more](https://learn.microsoft.com/en-us/analysis-services/analysis-services-features-by-edition?view=asallproducts-allversions#tabular-models). +\*\***Note:** Perspectives and multiple partitions are available in Business Edition for Power BI models, but the model's `CompatibilityMode` must be set to `PowerBI`. See [Change compatibility mode](xref:change-compatibility-mode) for instructions. + If you attempt to open a model that uses one or more of the modeling restrictions listed above, while on a TE3 Business Edition license, you will see the error message below: ![This edition of Tabular Editor 3 does not support Enterprise-tier semantic models](https://github.com/TabularEditor/TabularEditorDocs/assets/8976200/7ef69593-ea4b-4a16-a8df-543f5c31ac65) diff --git a/content/how-tos/change-compatibility-mode.md b/content/how-tos/change-compatibility-mode.md new file mode 100644 index 000000000..5e753206f --- /dev/null +++ b/content/how-tos/change-compatibility-mode.md @@ -0,0 +1,57 @@ +--- +uid: change-compatibility-mode +title: Change compatibility mode +author: Morten Lønskov +updated: 2026-04-08 +applies_to: + products: + - product: Tabular Editor 2 + full: true + - product: Tabular Editor 3 + editions: + - edition: Desktop + full: true + - edition: Business + full: true + - edition: Enterprise + full: true +--- + +# Change compatibility mode + +A model's **Compatibility Mode** determines whether Tabular Editor treats it as an Analysis Services model or a Power BI model. This setting controls which edition restrictions apply. It is separate from the [Compatibility Level](xref:update-compatibility-level), which controls which TOM features are available. + +The `Database.CompatibilityMode` property accepts the following values, defined by the [Microsoft.AnalysisServices.CompatibilityMode](https://learn.microsoft.com/dotnet/api/microsoft.analysisservices.compatibilitymode?view=analysisservices-dotnet) enum: + +| Value | Meaning | +|---|---| +| `Unknown` | No specific mode. Default when the mode has not been explicitly set. | +| `AnalysisServices` | Model targets SQL Server Analysis Services or Azure Analysis Services | +| `PowerBI` | Model targets Power BI (Desktop, Premium Per User, Premium Capacity, Fabric) | +| `Excel` | Model originates from an Excel Power Pivot data model | + +> [!IMPORTANT] +> Tabular Editor uses Compatibility Mode to determine edition restrictions. A model set to `AnalysisServices` mode triggers Enterprise-only restrictions for features like perspectives and multiple partitions, even if you deploy to Power BI. + +## When to change compatibility mode + +Change the compatibility mode to `PowerBI` when all of the following are true: + +- The model is deployed to Power BI (Premium Per User, Premium Capacity, or Fabric) +- The `.bim` file was originally created in Visual Studio, SSDT, or another tool that defaults to `AnalysisServices` mode +- You receive an edition error about Enterprise-tier features (such as perspectives) that should be available in your edition for Power BI models + +## Change the compatibility mode + +1. Open your model in Tabular Editor. +2. In the **TOM Explorer**, select the top-level **Model** node. +3. In the **Properties** panel, expand **Database**. +4. Locate `CompatibilityMode`. +5. Change the value from `AnalysisServices` to `PowerBI`. +6. Save the model (**Ctrl+S**). + +[Change Compatability mode](~/content/assets/images/how-to/change-compatibility-mode.png) + +> [!NOTE] +> Changing the compatibility mode affects how the model is validated and which features Tabular Editor permits. Verify that your deployment target matches the selected mode before saving. + diff --git a/content/how-tos/toc.md b/content/how-tos/toc.md index 28fafa4ef..35c1bf854 100644 --- a/content/how-tos/toc.md +++ b/content/how-tos/toc.md @@ -9,6 +9,7 @@ ## [Folder Serialization](folder-serialization.md) ## [Master Model Pattern](Master-model-pattern.md) ## [Update compatibility level](update-compatibility-level.md) +## [Change compatibility mode](change-compatibility-mode.md) # Data Import and Tables ## [Importing Tables (TE2)](Importing-Tables.md) diff --git a/content/how-tos/update-compatibility-level.md b/content/how-tos/update-compatibility-level.md index 64cd53b0d..be0820ca4 100644 --- a/content/how-tos/update-compatibility-level.md +++ b/content/how-tos/update-compatibility-level.md @@ -24,6 +24,17 @@ A model's **Compatibility Level** controls which Tabular Object Model (TOM) feat > [!WARNING] > Compatibility upgrades are one-way. You can upgrade but can't reliably downgrade. Treat this like a schema upgrade and validate your deployment targets first. +## Compatibility level vs. compatibility mode + +Compatibility Level and Compatibility Mode are separate properties that serve different purposes: + +| Property | Controls | Values | +|---|---|---| +| `Database.CompatibilityLevel` | Which TOM features are available (e.g., custom calendars, DAX UDFs) | `1200`, `1500`, `1600`, `1701`, `1702`, etc. | +| `Database.CompatibilityMode` | Which platform the model targets and which edition restrictions apply | `Unknown`, `AnalysisServices`, `PowerBI`, `Excel` | + +If you need to change the platform target rather than unlock new TOM features, see [Change compatibility mode](xref:change-compatibility-mode). + ## When to upgrade Upgrade when: From bbe8fa5260880fe5af3f19f303ab9b4a03963339 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20L=C3=B8nskov?= Date: Thu, 9 Apr 2026 10:46:05 +0200 Subject: [PATCH 08/11] Added new Databricks ODBC driver information --- ...pt-add-databricks-metadata-descriptions.md | 55 +++++++++++++++---- .../script-create-databricks-relationships.md | 55 +++++++++++++++---- .../databricks-column-comments-length.md | 5 +- .../connecting-to-azure-databricks.md | 6 +- 4 files changed, 95 insertions(+), 26 deletions(-) diff --git a/content/features/CSharpScripts/Advanced/script-add-databricks-metadata-descriptions.md b/content/features/CSharpScripts/Advanced/script-add-databricks-metadata-descriptions.md index 583e9730c..9f2f9a595 100644 --- a/content/features/CSharpScripts/Advanced/script-add-databricks-metadata-descriptions.md +++ b/content/features/CSharpScripts/Advanced/script-add-databricks-metadata-descriptions.md @@ -2,7 +2,7 @@ uid: script-add-databricks-metadata-descriptions title: Add Databricks Metadata Descriptions author: Johnny Winter -updated: 2025-09-04 +updated: 2026-04-08 applies_to: products: - product: Tabular Editor 2 @@ -16,7 +16,8 @@ applies_to: This script was created as part of the Tabular Editor x Databricks series. In Unity Catalog it is possible provide descriptive comments for tables and columns. This script can re-use this information to automatically populate table and column descriptions in your semantic model.

> [!NOTE] -> This script requires the Simba Spark ODBC Driver to be installed (download from https://www.databricks.com/spark/odbc-drivers-download) +> This script requires a Databricks ODBC driver. We recommend the new [Databricks ODBC Driver](https://www.databricks.com/spark/odbc-drivers-download), which replaces the legacy Simba Spark ODBC Driver. The script auto-detects which driver is installed and uses it accordingly. + Each run of the script will prompt the user for a Databricks Personal Access Token. This is required to authenticate to Databricks. The script utilises the information_schema tables in Unity Catalog to retrieve relationship information, so you may need to double check with your Databricks administrator to make sure you have permission to query these tables.

@@ -37,7 +38,8 @@ The script utilises the information_schema tables in Unity Catalog to retrieve r * For each table processed, a message box will display the number of descriptions updated. * Click OK to continue to the next table. * Notes: - * - This script requires the Simba Spark ODBC Driver to be installed (download from https://www.databricks.com/spark/odbc-drivers-download) + * - This script requires the Databricks ODBC Driver (recommended) or legacy Simba Spark ODBC Driver to be installed (download from https://www.databricks.com/spark/odbc-drivers-download) + * - The script auto-detects which driver is installed * - Each run of the script will prompt the user for a Databricks Personal Access Token */ #r "Microsoft.VisualBasic" @@ -376,6 +378,37 @@ do // toggle the 'Running Macro' spinbox ScriptHelper.WaitFormVisible = true; +// auto-detect Databricks ODBC driver +string driverPath; +string newDriverPath = @"C:\Program Files\Databricks ODBC Driver"; +string legacyDriverPath = @"C:\Program Files\Simba Spark ODBC Driver"; + +if (System.IO.Directory.Exists(newDriverPath)) +{ + driverPath = newDriverPath; +} +else if (System.IO.Directory.Exists(legacyDriverPath)) +{ + driverPath = legacyDriverPath; +} +else +{ + ScriptHelper.WaitFormVisible = false; + Interaction.MsgBox( + @"No Databricks ODBC driver found. + +Please install the Databricks ODBC Driver from: +https://www.databricks.com/spark/odbc-drivers-download + +Expected installation paths: + " + newDriverPath + @" + " + legacyDriverPath, + MsgBoxStyle.Critical, + "ODBC Driver Not Found" + ); + return; +} + //for each selected table, get the Databricks connection info from the partition info foreach (var t in Selected.Tables) { @@ -391,11 +424,11 @@ foreach (var t in Selected.Tables) string tableName = connectionInfo.TableName; //set DBX connection string var odbcConnStr = - @"DSN=Simba Spark;driver=C:\Program Files\Simba Spark ODBC Driver;host=" + @"Driver=" + driverPath + ";Host=" + serverHostname - + ";port=443;httppath=" + + ";Port=443;HTTPPath=" + httpPath - + ";thrifttransport=2;ssl=1;authmech=3;uid=token;pwd=" + + ";SSL=1;ThriftTransport=2;AuthMech=3;UID=token;PWD=" + dbxPAT; //test connection @@ -409,15 +442,13 @@ foreach (var t in Selected.Tables) // toggle the 'Running Macro' spinbox ScriptHelper.WaitFormVisible = false; Interaction.MsgBox( - @"Connection failed + @"Connection failed (using driver: " + driverPath + @") -Please check the following prequisites: +Please check the following prerequisites: -- you must have the Simba Spark ODBC Driver installed +- you must have the Databricks ODBC Driver installed (download from https://www.databricks.com/spark/odbc-drivers-download) -- the ODBC driver must be installed in the path C:\Program Files\Simba Spark ODBC Driver - - check that the Databricks server name " + serverHostname + @" is correct @@ -557,7 +588,7 @@ Either: } ``` ### Explanation -The script uses WinForms to prompt for a Databricks personal access token, used to authenticate to Databricks. For each selected table, the script retrieves the Databricks connection string information and schema and table name from the M query in the selected table's partition. Using the Spark ODBC driver it then sends a SQL query to Databricks that queries the information_schema tables to return the table description that is defined in Unity Catalog. This is then updated on the table description in the semantic model. A second SQL Query using the DESCRIBE command is also sent to the selected table to get column descriptions. The results of this are looped through, with descriptions added in the model. Once the script has run on each selected table, a dialogue box is displayed to show the number of descriptions updated. +The script uses WinForms to prompt for a Databricks personal access token, used to authenticate to Databricks. It auto-detects whether the new Databricks ODBC Driver or the legacy Simba Spark ODBC Driver is installed. For each selected table, the script retrieves the Databricks connection string information and schema and table name from the M query in the selected table's partition. Using the detected ODBC driver it then sends a SQL query to Databricks that queries the information_schema tables to return the table description that is defined in Unity Catalog. This is then updated on the table description in the semantic model. A second SQL Query using the DESCRIBE command is also sent to the selected table to get column descriptions. The results of this are looped through, with descriptions added in the model. Once the script has run on each selected table, a dialogue box is displayed to show the number of descriptions updated. ## Example Output diff --git a/content/features/CSharpScripts/Advanced/script-create-databricks-relationships.md b/content/features/CSharpScripts/Advanced/script-create-databricks-relationships.md index ae444fad5..73730477e 100644 --- a/content/features/CSharpScripts/Advanced/script-create-databricks-relationships.md +++ b/content/features/CSharpScripts/Advanced/script-create-databricks-relationships.md @@ -2,7 +2,7 @@ uid: script-create-databricks-relationships title: Create Databricks Relationships author: Johnny Winter -updated: 2025-09-04 +updated: 2026-04-08 applies_to: products: - product: Tabular Editor 2 @@ -16,7 +16,8 @@ applies_to: This script was created as part of the Tabular Editor x Databricks series. In Unity Catalog it is possible to define primary and foreign key relationships between tables. This script can re-use this information to automatically detect and create relationships in Tabular Editor. Whilst importing the relationships, the script will also hide primary and foreign keys and set IsAvailableInMDX to false (with the exception of DateTime type primary keys). Primary keys are also marked as IsKey = TRUE in the semantic model.

> [!NOTE] -> This script requires the Simba Spark ODBC Driver to be installed (download from https://www.databricks.com/spark/odbc-drivers-download) +> This script requires a Databricks ODBC driver. We recommend the new [Databricks ODBC Driver](https://www.databricks.com/spark/odbc-drivers-download), which replaces the legacy Simba Spark ODBC Driver. The script auto-detects which driver is installed and uses it accordingly. + Each run of the script will prompt the user for a Databricks Personal Access Token. This is required to authenticate to Databricks. The script utilises the information_schema tables in Unity Catalog to retrieve relationship information, so you may need to double check with your Databricks administrator to make sure you have permission to query these tables.

@@ -41,7 +42,8 @@ The script utilises the information_schema tables in Unity Catalog to retrieve r For each table processed, a message box will display the number of relationships created. * Click OK to continue to the next table. * Notes: - * - This script requires the Simba Spark ODBC Driver to be installed (download from https://www.databricks.com/spark/odbc-drivers-download) + * - This script requires the Databricks ODBC Driver (recommended) or legacy Simba Spark ODBC Driver to be installed (download from https://www.databricks.com/spark/odbc-drivers-download) + * - The script auto-detects which driver is installed * - Each run of the script will prompt the user for a Databricks Personal Access Token */ #r "Microsoft.VisualBasic" @@ -380,6 +382,37 @@ do // toggle the 'Running Macro' spinbox ScriptHelper.WaitFormVisible = true; +// auto-detect Databricks ODBC driver +string driverPath; +string newDriverPath = @"C:\Program Files\Databricks ODBC Driver"; +string legacyDriverPath = @"C:\Program Files\Simba Spark ODBC Driver"; + +if (System.IO.Directory.Exists(newDriverPath)) +{ + driverPath = newDriverPath; +} +else if (System.IO.Directory.Exists(legacyDriverPath)) +{ + driverPath = legacyDriverPath; +} +else +{ + ScriptHelper.WaitFormVisible = false; + Interaction.MsgBox( + @"No Databricks ODBC driver found. + +Please install the Databricks ODBC Driver from: +https://www.databricks.com/spark/odbc-drivers-download + +Expected installation paths: + " + newDriverPath + @" + " + legacyDriverPath, + MsgBoxStyle.Critical, + "ODBC Driver Not Found" + ); + return; +} + //for each selected table, get the Databricks connection info from the partition info foreach (var t in Selected.Tables) { @@ -433,11 +466,11 @@ foreach (var t in Selected.Tables) //set DBX connection string var odbcConnStr = - @"DSN=Simba Spark;driver=C:\Program Files\Simba Spark ODBC Driver;host=" + @"Driver=" + driverPath + ";Host=" + serverHostname - + ";port=443;httppath=" + + ";Port=443;HTTPPath=" + httpPath - + ";thrifttransport=2;ssl=1;authmech=3;uid=token;pwd=" + + ";SSL=1;ThriftTransport=2;AuthMech=3;UID=token;PWD=" + dbxPAT; //test connection @@ -451,15 +484,13 @@ foreach (var t in Selected.Tables) // toggle the 'Running Macro' spinbox ScriptHelper.WaitFormVisible = false; Interaction.MsgBox( - @"Connection failed + @"Connection failed (using driver: " + driverPath + @") -Please check the following prequisites: +Please check the following prerequisites: -- you must have the Simba Spark ODBC Driver installed +- you must have the Databricks ODBC Driver installed (download from https://www.databricks.com/spark/odbc-drivers-download) -- the ODBC driver must be installed in the path C:\Program Files\Simba Spark ODBC Driver - - check that the Databricks server name " + serverHostname + @" is correct @@ -585,7 +616,7 @@ Please check the following prequisites: } ``` ### Explanation -The script uses WinForms to prompt for a Databricks personal access token, used to authenticate to Databricks. For each selected table, the script retrieves the Databricks connection string information and schema and table name from the M query in the selected table's partition. Using the Spark ODBC driver it then sends a SQL query to Databricks that queries the information_schema tables to find any foreign key relationships for the table that are defined in Unity Catalog. For each row returned in the SQL query, the script looks for matching table and column names in the model and where a relationship does not already exist, a new one is created. For role playing dimensions, where the same table might have multiple foreign keys relating to a single table, the first relationship detected will be the active one, and all other subsequent relationships are created as inactive. The script will also hide primary and foreign keys and set IsAvailableInMDX to false (with the exception of DateTime type primary keys). Primary keys are also marked as IsKey = TRUE in the semantic model. After the script has run for each selected table, a dialogue box will appear showing how many new relationships were created. +The script uses WinForms to prompt for a Databricks personal access token, used to authenticate to Databricks. It auto-detects whether the new Databricks ODBC Driver or the legacy Simba Spark ODBC Driver is installed. For each selected table, the script retrieves the Databricks connection string information and schema and table name from the M query in the selected table's partition. Using the detected ODBC driver it then sends a SQL query to Databricks that queries the information_schema tables to find any foreign key relationships for the table that are defined in Unity Catalog. For each row returned in the SQL query, the script looks for matching table and column names in the model and where a relationship does not already exist, a new one is created. For role playing dimensions, where the same table might have multiple foreign keys relating to a single table, the first relationship detected will be the active one, and all other subsequent relationships are created as inactive. The script will also hide primary and foreign keys and set IsAvailableInMDX to false (with the exception of DateTime type primary keys). Primary keys are also marked as IsKey = TRUE in the semantic model. After the script has run for each selected table, a dialogue box will appear showing how many new relationships were created. ## Example Output diff --git a/content/troubleshooting/databricks-column-comments-length.md b/content/troubleshooting/databricks-column-comments-length.md index 7303d1fb3..8384ed411 100644 --- a/content/troubleshooting/databricks-column-comments-length.md +++ b/content/troubleshooting/databricks-column-comments-length.md @@ -2,7 +2,7 @@ uid: databricks-column-comments-length title: Databricks Column Comment Length Error author: Support Team -updated: 2026-02-06 +updated: 2026-04-08 applies_to: products: - product: Tabular Editor 2 @@ -19,6 +19,9 @@ applies_to: # Databricks Column Comment Length Error +> [!TIP] +> Databricks has released a new ODBC driver that replaces the legacy Simba Spark ODBC Driver. The new [Databricks ODBC Driver](https://www.databricks.com/spark/odbc-drivers-download) may not have the `MaxCommentLen` limitation described below. If you experience this issue, consider switching to the new driver, which Tabular Editor 3.26.0 and later supports. + When using the Import Table Wizard to import tables from Databricks, you may encounter a connection error if column comments (descriptions) exceed 512 characters. This limitation exists in the Simba Spark ODBC Driver, even though Databricks Unity Catalog allows longer column comments. A typical error message looks like: diff --git a/content/tutorials/connecting-to-azure-databricks.md b/content/tutorials/connecting-to-azure-databricks.md index baddeba71..e7d89fd8b 100644 --- a/content/tutorials/connecting-to-azure-databricks.md +++ b/content/tutorials/connecting-to-azure-databricks.md @@ -2,7 +2,7 @@ uid: connecting-to-azure-databricks title: Connecting to Azure Databricks author: David Bojsen -updated: 2025-08-05 +updated: 2026-04-08 applies_to: products: - product: Tabular Editor 2 @@ -28,6 +28,10 @@ Before you begin, ensure you have the following: - A valid Azure Databricks workspace - Appropriate permissions to access the Databricks data - Tabular Editor 3 (Desktop, Business, or Enterprise edition) +- The [Databricks ODBC Driver](https://www.databricks.com/spark/odbc-drivers-download) installed on your machine + +> [!IMPORTANT] +> Databricks has released a new ODBC driver that replaces the legacy Simba Spark ODBC Driver. We recommend installing the new [Databricks ODBC Driver](https://www.databricks.com/spark/odbc-drivers-download). Tabular Editor 3.26.0 and later supports both drivers, but the new driver is the recommended option going forward. The legacy Simba driver is available from the [Databricks ODBC driver archive](https://www.databricks.com/spark/odbc-drivers-archive#simba_odbc). ## Authentication Methods From d327aafa166013911cb5cde00dd50fb04b1b4633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20L=C3=B8nskov?= Date: Thu, 9 Apr 2026 11:33:44 +0200 Subject: [PATCH 09/11] Fixes to compatability mode --- content/how-tos/change-compatibility-mode.md | 24 +++++++++++++------ content/how-tos/update-compatibility-level.md | 2 +- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/content/how-tos/change-compatibility-mode.md b/content/how-tos/change-compatibility-mode.md index 5e753206f..82a38c6be 100644 --- a/content/how-tos/change-compatibility-mode.md +++ b/content/how-tos/change-compatibility-mode.md @@ -19,16 +19,25 @@ applies_to: # Change compatibility mode -A model's **Compatibility Mode** determines whether Tabular Editor treats it as an Analysis Services model or a Power BI model. This setting controls which edition restrictions apply. It is separate from the [Compatibility Level](xref:update-compatibility-level), which controls which TOM features are available. +A model's **Compatibility Mode** controls which platform the model targets. This property determines: + +- Which Tabular Object Model (TOM) objects and properties are available +- Which edition restrictions Tabular Editor applies + +Compatibility Mode is separate from the [Compatibility Level](xref:update-compatibility-level), which gates features behind version numbers. + +## Compatibility mode values The `Database.CompatibilityMode` property accepts the following values, defined by the [Microsoft.AnalysisServices.CompatibilityMode](https://learn.microsoft.com/dotnet/api/microsoft.analysisservices.compatibilitymode?view=analysisservices-dotnet) enum: | Value | Meaning | |---|---| -| `Unknown` | No specific mode. Default when the mode has not been explicitly set. | -| `AnalysisServices` | Model targets SQL Server Analysis Services or Azure Analysis Services | -| `PowerBI` | Model targets Power BI (Desktop, Premium Per User, Premium Capacity, Fabric) | -| `Excel` | Model originates from an Excel Power Pivot data model | +| `Unknown` | No specific mode. Default when the mode has not been explicitly set. The AS client library automatically detects the actual mode based on which TOM features are used (for example, if any Power BI-specific features are present). | +| `AnalysisServices` | Model targets SQL Server Analysis Services or Azure Analysis Services. | +| `PowerBI` | Model targets Power BI (Desktop, Premium Per User, Premium Capacity, Fabric). Certain TOM properties are only available in this mode. See the Remarks section of each property in the [Microsoft.AnalysisServices.Tabular namespace reference](https://learn.microsoft.com/dotnet/api/microsoft.analysisservices.tabular?view=analysisservices-dotnet) for details. | +| `Excel` | Model originates from an Excel Power Pivot data model. Tabular Editor does not support Power Pivot models. | + +Azure Analysis Services and SQL Server Analysis Services only support `AnalysisServices` mode. Power BI and Fabric support both `AnalysisServices` and `PowerBI` modes. > [!IMPORTANT] > Tabular Editor uses Compatibility Mode to determine edition restrictions. A model set to `AnalysisServices` mode triggers Enterprise-only restrictions for features like perspectives and multiple partitions, even if you deploy to Power BI. @@ -38,6 +47,7 @@ The `Database.CompatibilityMode` property accepts the following values, defined Change the compatibility mode to `PowerBI` when all of the following are true: - The model is deployed to Power BI (Premium Per User, Premium Capacity, or Fabric) +- The model will **not** be deployed to SSAS or Azure Analysis Services - The `.bim` file was originally created in Visual Studio, SSDT, or another tool that defaults to `AnalysisServices` mode - You receive an edition error about Enterprise-tier features (such as perspectives) that should be available in your edition for Power BI models @@ -50,8 +60,8 @@ Change the compatibility mode to `PowerBI` when all of the following are true: 5. Change the value from `AnalysisServices` to `PowerBI`. 6. Save the model (**Ctrl+S**). -[Change Compatability mode](~/content/assets/images/how-to/change-compatibility-mode.png) +![Change Compatibility mode](~/content/assets/images/how-to/change-compatibility-mode.png) > [!NOTE] -> Changing the compatibility mode affects how the model is validated and which features Tabular Editor permits. Verify that your deployment target matches the selected mode before saving. +> Changing the compatibility mode affects which TOM properties are available and how the model is validated. Verify that your deployment target matches the selected mode before saving. diff --git a/content/how-tos/update-compatibility-level.md b/content/how-tos/update-compatibility-level.md index be0820ca4..382dca9b2 100644 --- a/content/how-tos/update-compatibility-level.md +++ b/content/how-tos/update-compatibility-level.md @@ -31,7 +31,7 @@ Compatibility Level and Compatibility Mode are separate properties that serve di | Property | Controls | Values | |---|---|---| | `Database.CompatibilityLevel` | Which TOM features are available (e.g., custom calendars, DAX UDFs) | `1200`, `1500`, `1600`, `1701`, `1702`, etc. | -| `Database.CompatibilityMode` | Which platform the model targets and which edition restrictions apply | `Unknown`, `AnalysisServices`, `PowerBI`, `Excel` | +| `Database.CompatibilityMode` | Which platform the model targets, which TOM objects and properties are available, and which edition restrictions apply | `Unknown`, `AnalysisServices`, `PowerBI`, `Excel` | If you need to change the platform target rather than unlock new TOM features, see [Change compatibility mode](xref:change-compatibility-mode). From c599fcdc83b11387516523db01134a5a1b089ccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20L=C3=B8nskov?= Date: Thu, 9 Apr 2026 13:45:10 +0200 Subject: [PATCH 10/11] Fix power bi workaround to include te2 --- content/how-tos/powerbi-xmla-pbix-workaround.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/how-tos/powerbi-xmla-pbix-workaround.md b/content/how-tos/powerbi-xmla-pbix-workaround.md index 5acb1b93f..0552f101d 100644 --- a/content/how-tos/powerbi-xmla-pbix-workaround.md +++ b/content/how-tos/powerbi-xmla-pbix-workaround.md @@ -6,7 +6,7 @@ updated: 2023-10-18 applies_to: products: - product: Tabular Editor 2 - none: true + full: true - product: Tabular Editor 3 editions: - edition: Desktop From d41aa779ba0d668f948be13722b04e381cf747d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20L=C3=B8nskov?= Date: Wed, 15 Apr 2026 13:13:18 +0200 Subject: [PATCH 11/11] Better documentation and troubleshooting for azure openai ai assistant. --- content/features/ai-assistant.md | 28 ++++++- .../azure-openai-connection-errors.md | 73 +++++++++++++++++++ content/troubleshooting/index.md | 1 + content/troubleshooting/toc.md | 4 +- 4 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 content/troubleshooting/azure-openai-connection-errors.md diff --git a/content/features/ai-assistant.md b/content/features/ai-assistant.md index f66d0887f..d7b9e3cc5 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-03-19 +updated: 2026-04-15 applies_to: products: - product: Tabular Editor 2 @@ -72,7 +72,31 @@ Select **Anthropic** as the provider and enter your API key. The default model i ### Azure OpenAI -Select **Azure OpenAI** as the provider. Enter your API key and the service endpoint URL for your Azure OpenAI resource. Set the model name to match your deployment name. +Select **Azure OpenAI** as the provider and configure three fields: + +- **API key** — the access key for your Azure OpenAI resource +- **Service endpoint** — the endpoint URL for your resource, for example `https://your-resource.openai.azure.com`. Use the resource URL, not the `privatelink` alias; the SSL certificate is issued for `*.openai.azure.com` and connecting directly to `*.privatelink.openai.azure.com` fails certificate validation +- **Model name** — the **deployment name**, not the underlying model name and not the resource name + +Azure OpenAI requires the deployment name in every API call. A deployment name is chosen when the deployment is created, so it can be any string. Deployments are often named after the model they serve (for example `gpt-4o`), but that is a convention, not a requirement. If you enter the resource name or a raw model name that does not exist as a deployment, the request fails. + +#### Finding your deployment name + +In the [Azure AI Foundry portal](https://ai.azure.com): + +1. Sign in and select your Azure OpenAI resource +2. Open **Deployments** (or **Models + endpoints** if the resource has been upgraded to Foundry) +3. Copy the value from the **Name** column + +Deployments created before your organization adopted Azure AI Foundry may not appear in the portal. List them from the Azure CLI: + +```bash +az cognitiveservices account deployment list --name "" --resource-group "" --output table +``` + +See [Create and deploy an Azure OpenAI resource](https://learn.microsoft.com/azure/ai-foundry/openai/how-to/create-resource#deploy-a-model) for more details. + +For 403 errors, SSL failures or "DeploymentNotFound" responses, see @azure-openai-connection-errors. ### Custom (OpenAI-compatible) diff --git a/content/troubleshooting/azure-openai-connection-errors.md b/content/troubleshooting/azure-openai-connection-errors.md new file mode 100644 index 000000000..62dc40b0b --- /dev/null +++ b/content/troubleshooting/azure-openai-connection-errors.md @@ -0,0 +1,73 @@ +--- +uid: azure-openai-connection-errors +title: Azure OpenAI connection errors +author: Morten Lønskov +updated: 2026-04-15 +applies_to: + products: + - product: Tabular Editor 2 + none: true + - product: Tabular Editor 3 + since: 3.26.0 + editions: + - edition: Desktop + full: true + - edition: Business + full: true + - edition: Enterprise + full: true +--- + +# Azure OpenAI connection errors + +This page covers common connection failures when using Azure OpenAI as the provider for the @ai-assistant. See the [Azure OpenAI configuration section](xref:ai-assistant#azure-openai) for setup details. + +## 403 "Public access is disabled. Please configure private endpoint" + +This 403 comes from Azure OpenAI itself, which means the HTTP request reached the public endpoint rather than your private endpoint. Azure rejects it because public access is disabled on the resource. + +The typical cause is a system proxy that resolves DNS outside your VPN tunnel. Your workstation resolves the Azure OpenAI hostname to the private IP via Azure Private DNS, but the proxy server uses its own resolver, reaches the public IP, and gets rejected. + +To confirm DNS on your workstation is resolving correctly: + +```text +nslookup yourresource.openai.azure.com +``` + +A result pointing to a private IP range (for example `10.x.x.x`) confirms that your workstation side is correct and that the issue is on the proxy path. + +Options to resolve: + +- Add your Azure OpenAI hostname to the bypass list under **Tools > Preferences > Proxy Settings** so the request skips the proxy and goes directly through the VPN tunnel. Separate multiple hostnames with semicolons +- Ask your network team to update the proxy PAC file to bypass `*.openai.azure.com`, or to configure the proxy server to resolve Azure Private DNS zones +- Use split tunneling so Azure private endpoint IP ranges route directly rather than via the proxy + +See @proxy-settings for general Tabular Editor proxy configuration. + +## SSL connection errors + +If the **Service endpoint** uses the `privatelink` alias (for example `https://your-resource.privatelink.openai.azure.com`), SSL validation fails because the Azure OpenAI certificate is issued for `*.openai.azure.com`, not `*.privatelink.openai.azure.com`. + +Use the standard resource hostname in the service endpoint field and let DNS resolve it to the private IP: + +```text +https://your-resource.openai.azure.com +``` + +## "Error getting AI response" with 404 or DeploymentNotFound + +The value in the **Model name** field does not match a deployment in your Azure OpenAI resource. Azure OpenAI requires the **deployment name** in every API call, not the underlying model name and not the resource name. + +Verify the deployment name: + +1. Sign in to the [Azure AI Foundry portal](https://ai.azure.com) and select your resource +2. Open **Deployments** (or **Models + endpoints** if the resource has been upgraded to Foundry) +3. Copy the value from the **Name** column + +Deployments created before your organization adopted Azure AI Foundry may not appear in the portal. List them from the Azure CLI: + +```bash +az cognitiveservices account deployment list --name "" --resource-group "" --output table +``` + +The model name field is case-sensitive. diff --git a/content/troubleshooting/index.md b/content/troubleshooting/index.md index ab996285f..4d74a6018 100644 --- a/content/troubleshooting/index.md +++ b/content/troubleshooting/index.md @@ -9,6 +9,7 @@ This section contains troubleshooting guides and solutions for common issues. - @locale-not-supported - Locale Not Supported - @calendar-blank-value - Calendar function blank date error - @direct-lake-entity-updates-reverting - Entity Name Changes Revert in Direct Lake Models +- @azure-openai-connection-errors - AI Assistant connection failures when using Azure OpenAI --- diff --git a/content/troubleshooting/toc.md b/content/troubleshooting/toc.md index c4e7b7572..666a3e9ea 100644 --- a/content/troubleshooting/toc.md +++ b/content/troubleshooting/toc.md @@ -6,4 +6,6 @@ # @calendar-blank-value -# @direct-lake-entity-updates-reverting \ No newline at end of file +# @direct-lake-entity-updates-reverting + +# @azure-openai-connection-errors \ No newline at end of file