diff --git a/content/assets/images/basic-ui.png b/content/assets/images/basic-ui.png index 4725ab576..71754b7a5 100644 Binary files a/content/assets/images/basic-ui.png and b/content/assets/images/basic-ui.png differ diff --git a/content/assets/images/common/OpenModelPinDeleteOption.png b/content/assets/images/common/OpenModelPinDeleteOption.png new file mode 100644 index 000000000..22bd62965 Binary files /dev/null and b/content/assets/images/common/OpenModelPinDeleteOption.png differ diff --git a/content/assets/images/deployment-options.png b/content/assets/images/deployment-options.png index 561cd6835..a3034c60b 100644 Binary files a/content/assets/images/deployment-options.png and b/content/assets/images/deployment-options.png differ diff --git a/content/assets/images/messages-view-copy.png b/content/assets/images/messages-view-copy.png index b93346d17..7ffbc5957 100644 Binary files a/content/assets/images/messages-view-copy.png and b/content/assets/images/messages-view-copy.png differ diff --git a/content/assets/images/te-messages.png b/content/assets/images/te-messages.png index 75e30f7cf..24fcf55ca 100644 Binary files a/content/assets/images/te-messages.png and b/content/assets/images/te-messages.png differ diff --git a/content/assets/images/te3-diagram-view.png b/content/assets/images/te3-diagram-view.png index 0137e9011..9a457f5b7 100644 Binary files a/content/assets/images/te3-diagram-view.png and b/content/assets/images/te3-diagram-view.png differ diff --git a/content/assets/images/te3-table-preview.png b/content/assets/images/te3-table-preview.png index 219d7d4e7..f1bd1005b 100644 Binary files a/content/assets/images/te3-table-preview.png and b/content/assets/images/te3-table-preview.png differ diff --git a/content/assets/images/tom-explorer.png b/content/assets/images/tom-explorer.png index 8672c9613..7c4a0703c 100644 Binary files a/content/assets/images/tom-explorer.png and b/content/assets/images/tom-explorer.png differ diff --git a/content/assets/images/tutorials/incremental-refresh-deploy-partitions.png b/content/assets/images/tutorials/incremental-refresh-deploy-partitions.png index 67adee4f8..6f9a4bb64 100644 Binary files a/content/assets/images/tutorials/incremental-refresh-deploy-partitions.png and b/content/assets/images/tutorials/incremental-refresh-deploy-partitions.png differ diff --git a/content/assets/images/user-interface/messages-view.png b/content/assets/images/user-interface/messages-view.png index 4e0935a5d..55471939e 100644 Binary files a/content/assets/images/user-interface/messages-view.png and b/content/assets/images/user-interface/messages-view.png differ diff --git a/content/features/Semantic-Model/direct-lake-sql-model.md b/content/features/Semantic-Model/direct-lake-sql-model.md index ea02d4a24..edb9a44d9 100644 --- a/content/features/Semantic-Model/direct-lake-sql-model.md +++ b/content/features/Semantic-Model/direct-lake-sql-model.md @@ -56,7 +56,7 @@ Additionally, on import of new tables Tabular Editor 3 (3.15.0 or higher) frames ## Identifying a Direct Lake model -The top title bar of Tabular Editor shows which type of model is open in that instance of Tabular Editor. Additionally, the TOM Explorer displays the type and mode of every table (Import, DirectQuery, Dual or Direct Lake). If a model contains a mix of table modes, the title bar will show "Hybrid". Currently, it is not possible for a Direct Lake on SQL model to contain tables in Import, DirectQuery or Dual mode. +The Tabular Editor 3 title bar shows the storage mode of the open model after the model name, such as **(Direct Lake)**, **(DirectQuery)** or **(Import)**. If a model contains a mix of table modes, the title bar shows **(Composite)**. The TOM Explorer displays the type and mode of every table (Import, DirectQuery, Dual or Direct Lake). A Direct Lake on SQL model can't contain tables in Import, DirectQuery or Dual mode. ## Converting a Direct Lake model to Import Mode diff --git a/content/features/ai-assistant.md b/content/features/ai-assistant.md index bddd06ecd..ae4a00bea 100644 --- a/content/features/ai-assistant.md +++ b/content/features/ai-assistant.md @@ -19,7 +19,7 @@ applies_to: --- # AI Assistant -The AI Assistant is a chat panel for semantic model development. It explores your model metadata, writes and runs DAX queries, generates C# scripts, runs Best Practice Analyzer checks, queries VertiPaq Analyzer statistics and searches the Tabular Editor knowledge base. [Permission settings](#permissions-and-consent) control what it sends to your AI provider. The AI Assistant has undergone independent penetration testing; see the [Tabular Editor Trust Center](https://trust.tabulareditor.com). +The AI Assistant is a chat panel for semantic model development. It explores your model metadata, writes and runs DAX queries, generates C# scripts, explains and fixes the errors in your model and open documents, runs Best Practice Analyzer checks, queries VertiPaq Analyzer statistics and searches the Tabular Editor knowledge base. [Permission settings](#permissions-and-consent) control what it sends to your AI provider. The AI Assistant has undergone independent penetration testing; see the [Tabular Editor Trust Center](https://trust.tabulareditor.com). The AI Assistant uses a bring-your-own-key model, where you provide an API key from one of the supported providers and the assistant runs directly against that provider's API. @@ -193,7 +193,8 @@ Within your [permission grants](#permissions-and-consent), the AI Assistant work - **C# script generation**: creates C# scripts for model changes. Depending on your settings, the assistant opens the script in an editor window for you to run, or runs it itself; see [Letting the assistant change your model](#letting-the-assistant-change-your-model) - **Best Practice Analyzer**: runs BPA analysis, lists rule violations and creates or modifies BPA rules - **VertiPaq Analyzer**: queries memory usage statistics and column cardinality -- **Document access**: reads and modifies open documents: DAX queries, C# scripts and DAX scripts +- **Model errors**: lists the model's errors, warnings and Analysis Services messages, the same ones the [Messages view](xref:messages-view) shows, with root causes first. The assistant is told when the model's errors change. +- **Document access**: reads and modifies open DAX queries, C# scripts and DAX scripts, and reads the errors and warnings of every open document, Pivot Grids included. The active document is part of the assistant's context, so you can ask "why am I seeing this error in this query?". It can't read or change a Pivot Grid's layout - **Knowledge base search**: searches the embedded Tabular Editor documentation - **UI navigation**: generates `te3://` action links that open specific Tabular Editor dialogs and features @@ -213,6 +214,7 @@ The setting is off by default and unavailable until **Model metadata** is set to - If **Preview changes** is on (the default), the [preview dialog](xref:csharp-scripts#run-c-scripts-with-preview) appears before the changes are applied. **Cancel** reverts them and reports the rejection to the assistant. If **Preview changes** is off, the changes are applied without a dialog. - The script's changes are one undo entry, **C# script (AI Assistant)**. Focus stays in the chat box, where **Ctrl+Z** doesn't undo model changes. To undo the whole script, click the TOM Explorer and press **Ctrl+Z**, or select **Undo C# script (AI Assistant)** in the **Edit** menu. - If the script fails part-way through, the model is left unchanged and the assistant reports the error. +- If the script succeeds and introduces or resolves DAX errors, the assistant receives a list of those errors, grouped by root cause. - A script that accesses files, the network or external assemblies doesn't run. It opens as a script artifact with an **Unsafe** badge and **Execute** disabled, and the assistant's reply names what the script used. If you ask for a script, for example "Write me a script that renames every measure to sentence case", the assistant opens it as a script document that you run yourself, even with this setting on. @@ -329,10 +331,10 @@ Set an access level for each resource to control what the AI Assistant can acces | Resource | What it covers | Levels | Default | | -- | -- | -- | -- | -| **Model metadata** | Table, column and measure names, expressions, descriptions and similar. Read also covers VertiPaq Analyzer statistics | Deny / Read / Write | **Read** | -| **Model data** | Data values from your model, such as DAX query results. Requires a live connection | Deny / Read | **Deny** | +| **Model metadata** | Table, column and measure names, expressions, descriptions and similar. Read also covers VertiPaq Analyzer statistics and the model's error and warning messages | Deny / Read / Write | **Read** | +| **Model data** | Data values from your model, such as DAX query results, and the text of errors returned by Analysis Services, which can contain data values. DAX queries require a live connection | Deny / Read | **Deny** | | **Best Practice Analyzer** | Read lists rules and runs the analysis; Write adds or modifies rules | Deny / Read / Write | **Read** | -| **Documents** | Your open documents: DAX queries, C# scripts and DAX scripts. Read is their contents; Write is needed to create or modify them | Deny / Read / Write | **Write** | +| **Documents** | Your open documents: DAX queries, C# scripts, DAX scripts and Pivot Grids. Read is their contents and their errors and warnings; Write is needed to create or modify them. Pivot Grid layouts can't be read or modified | Deny / Read / Write | **Write** | | **Macros** | Your macro library. Read lists and reads macros; Write is reserved for future macro-editing tools | Deny / Read / Write | **Write** | **Write** (labeled **Read/Write** in the dropdowns) includes Read. diff --git a/content/features/auto-reload.md b/content/features/auto-reload.md index f3813a79c..8f30acf06 100644 --- a/content/features/auto-reload.md +++ b/content/features/auto-reload.md @@ -2,7 +2,7 @@ uid: auto-reload title: Auto-reload from disk author: Morten Lønskov -updated: 2026-09-23 +updated: 2026-10-11 applies_to: products: - product: Tabular Editor 2 @@ -25,7 +25,7 @@ When the metadata files of a model you loaded from a file or folder change on di ![Diagram: File > Save writes the model in Tabular Editor to the files on disk; another tool writes to the files; an automatic reload loads the changed files back into Tabular Editor](~/content/assets/images/features/auto-reload-sync.png) > [!NOTE] -> Auto-reload monitors files and is independent of **Track external model changes** and **Refresh local Tabular Object Model metadata automatically** under [Tools > Preferences > Tabular Editor > Miscellaneous](xref:preferences#miscellaneous). Those settings use an Analysis Services trace to detect changes to a connected database. +> Auto-reload monitors files and is independent of **Track external model changes** and **Refresh local Tabular Object Model metadata automatically** under [Tools > Preferences > Tabular Editor > Miscellaneous](xref:preferences#tabular-editor--miscellaneous). Those settings use an Analysis Services trace to detect changes to a connected database. ## Monitored files @@ -77,4 +77,4 @@ Auto-reload is enabled by default, and you turn it off by clearing **Automatical Turn it off if a continuously running process also writes to the model folder, such as a file sync client or a CI checkout that refreshes in the background. Each change triggers a reload, or the modal prompt when you have unsaved changes. -With the setting cleared, use **File > Reload from disk** to load external changes, or **File > Save** to overwrite them with the model in Tabular Editor. See [Preferences](xref:preferences#miscellaneous) for the other settings on that page. +With the setting cleared, use **File > Reload from disk** to load external changes, or **File > Save** to overwrite them with the model in Tabular Editor. See [Preferences](xref:preferences#tabular-editor--miscellaneous) for the other settings on that page. diff --git a/content/features/dax-debugger.md b/content/features/dax-debugger.md index daa9f9eb4..581d686e5 100644 --- a/content/features/dax-debugger.md +++ b/content/features/dax-debugger.md @@ -53,7 +53,7 @@ Once the debugger is started, you are presented with a number of new views that - Drag a measure from the TOM Explorer, or - Right-click on a measure in the TOM Explorer and choose **Add to pivot grid**, or - Select the measure from the Pivot Grid field list (**Pivot Grid > Show fields**) -3. (Optional) Add one or more columns to the Pivot Grid in the Filter area, Columns area or Row area. +3. (Optional) Add one or more columns or hierarchies to the Pivot Grid in the Filter area, Columns area or Row area. 4. Right-click on the value cell within the Pivot Grid and choose **Debug this value**. ![Debug From Pivot](~/content/assets/images/features/debug-from-pivot.png) diff --git a/content/features/dax-editor.md b/content/features/dax-editor.md index b6dbdb572..27ac4f70c 100644 --- a/content/features/dax-editor.md +++ b/content/features/dax-editor.md @@ -2,7 +2,7 @@ uid: dax-editor title: DAX Editor author: Daniel Otykier -updated: 2026-09-14 +updated: 2026-10-11 applies_to: products: - product: Tabular Editor 2 @@ -42,7 +42,7 @@ DAX calltips update as you cycle syntax alternatives using the Up/Down arrows. ![Dax Code Assist](~/content/assets/images/dax-code-assist.png) -Most aspects of code assist can be configured under [**Tools > Preferences > Text Editors > DAX Editor > Code Assist**](xref:preferences#dax-editor--code-assist). +Most aspects of code assist can be configured under [**Tools > Preferences > Text Editors > DAX Editor > Code Assist**](xref:preferences#text-editors--dax-editor--code-assist). ## Peek Definition @@ -86,7 +86,7 @@ If the measure's expression cannot be analyzed, the wrap is added, on the princi ## Format DAX -The DAX Editor in Tabular Editor 3 automatically formats your code as you type, i.e. fixing casing of functions and object references, adding proper indentation and spaces between parentheses, etc. All of this can be configured under [**Tools > Preferences > Text Editors > DAX Editor > Auto Formatting**](xref:preferences#dax-editor--auto-formatting). +The DAX Editor in Tabular Editor 3 automatically formats your code as you type, i.e. fixing casing of functions and object references, adding proper indentation and spaces between parentheses, etc. All of this can be configured under [**Tools > Preferences > Text Editors > DAX Editor > Auto Formatting**](xref:preferences#text-editors--dax-editor--auto-formatting). However, sometimes it is necessary to format the entire document. This can be done by hitting [F6] or [Shift+F6] if you prefer more frequent line breaks. For DAX Queries, you may also use [Alt+F6] to reformat the code to always add commas at the front of a line, which is useful when debugging. diff --git a/content/features/dax-optimizer-integration.md b/content/features/dax-optimizer-integration.md index 187aca039..1cdc9e7c4 100644 --- a/content/features/dax-optimizer-integration.md +++ b/content/features/dax-optimizer-integration.md @@ -2,7 +2,7 @@ uid: dax-optimizer-integration title: DAX Optimizer Integration author: Daniel Otykier -updated: 2024-10-30 +updated: 2026-10-11 applies_to: products: - product: Tabular Editor 2 @@ -95,7 +95,7 @@ Here, you can choose whether the VPAX should be uploaded as a new model within t Once you click the **OK** button, the VPAX file will be uploaded to DAX Optimizer, and you will be able to start analyzing the model. > [!NOTE] -> If no VertiPaq Analyzer statistics are available in Tabular Editor 3, these statistics will be collected for the current model before the VPAX file is uploaded. We will also automatically re-collect statistics if the last statistics collection is older than or equal to the statistics of the last VPAX file upload, for the specific model. +> If no VertiPaq Analyzer statistics are available in Tabular Editor 3, statistics are collected for the current model before the VPAX file is uploaded. Statistics are also re-collected if the last collection is older than or equal to the last VPAX upload for the model. Statistics for an upload are always read from the model's data. If they can't be read, the upload doesn't start. ### Obfuscation diff --git a/content/features/dax-query.md b/content/features/dax-query.md index 8c8f8290b..0a500de09 100644 --- a/content/features/dax-query.md +++ b/content/features/dax-query.md @@ -2,7 +2,7 @@ uid: dax-query title: DAX Queries author: Morten Lønskov -updated: 2026-09-14 +updated: 2026-10-11 applies_to: products: - product: Tabular Editor 2 @@ -49,7 +49,13 @@ The DAX query window has six different query options. - **When query is modified**: Sorting and filtering reset only when the query structure changes. - **Always**: Sorting and filtering persist as long as columns remain in the new query. -The default values of "Auto Execute Query" and "Keep Sorting and Filtering" preferences can be set up in the Preferences dialog: **Tools > Preferences... > Data browsing > DAX Query** > Basic. +The default values of "Auto Execute Query" and "Keep Sorting and Filtering" preferences can be set up in the Preferences dialog: **Tools > Preferences... > Data browsing > DAX Query** > Basic. The **Keep documents open when switching models** section on the same page controls what happens to open DAX queries when you open a different model. See [Switching models](#switching-models). + +### Switching models + +When you open a different model, open DAX queries stay open and connect to the new model. If **Automatically execute DAX queries by default** is selected, the query runs again against the new model; otherwise, it runs against the new model the next time you execute it. If the new model has no database to run against, such as a model loaded from a file without a workspace database, the query stays open and can't be executed. + +To close DAX queries when you open a different model, clear **Keep DAX Queries open when a different model is opened** under **Tools > Preferences > Data Browsing > DAX Query**. The option is selected by default. ### Adding or Updating Measures, Columns and Tables with DAX Queries diff --git a/content/features/deployment.md b/content/features/deployment.md index e8b2cef8f..210d672a6 100644 --- a/content/features/deployment.md +++ b/content/features/deployment.md @@ -1,6 +1,8 @@ --- uid: deployment title: Model deployment +author: Morten Lønskov +updated: 2026-10-11 applies_to: products: - product: Tabular Editor 2 @@ -24,6 +26,10 @@ To perform a deployment, launch the **Deployment Wizard** through the **Model > > [!NOTE] > Tabular Editor 3 Business Edition has certain [limitations](xref:editions) regarding what type of Analysis Services instance, or Power BI / Fabric workspace is supported for XMLA connectivity. This applies to deployment as well. +## Destination server + +On the **Destination Server** page, enter a server name or pick one from the **Server** list of recent servers. Right-click a server in the list to pin it to the top of the list or delete it. The list is shared with **File > Open > Model from DB...**. For details, see [Recent and pinned servers](xref:xmla-as-connectivity#recent-and-pinned-servers). + ## Deployment options After selecting the destination server and database to deploy, you are presented with a list of **Deployment options**, as shown in the screenshot below. @@ -36,8 +42,15 @@ These are: - **Deploy Data Sources**: For models that use *explicit* data sources, this option indicates whether any such data sources will be included in the deployment. Unchecking this option may be useful, if one or more properties on a data source has been modified, and you do not intend to deploy these modifications. For example, if you are deploying model metadata from a Development environment to a Test environment, you may want to retain any connection strings, etc. on the destination environment as-is. Note that this option is typically not enabled for Power BI / Fabric semantic models, because such models use *implicit* data sources, where credentials are managed by the Power BI service, and connection details are stored in the M queries on partitions or shared expressions in the model. - **Deploy Table Partitions**: This option indicates whether table partitions should be deployed. In some cases, the destination database may contain partitions that are not present in the model metadata. Unchecking this option will prevent the deployment from modifying any existing partitions on the destination server. If this option is checked, Tabular Editor will synchronize the partitions on the destination server with the model metadata. If any partitions are present on the destination server, but not in the model metadata, they will be removed (including the data contained in them). - **Deploy partitions governed by Incremental Refresh Policies**: When the **Deploy Table Partitions** option is enabled, you will have an option to avoid deploying partitions that are governed by Incremental Refresh Policies. This is useful when you have a model with partitions that created automatically by the [Incremental Refresh Policy](xref:incremental-refresh-about), and you want to deploy all partitions except those governed by the policy. +- **Deploy Shared Expressions**: Deploys the model's shared expressions, such as Power Query parameters and shared queries. Clear it to keep the shared expressions that exist on the destination database. - **Deploy Model Roles**: This option indicates whether roles defined in the model should be deployed. Unchecking this option will retain existing roles on the model as-is. If you are deploying changes to tables or columns in the model, you may have to revisit [RLS or OLS settings](xref:data-security-about), to ensure that they are still valid. - **Deploy Model Role Members**: This option indicates whether role members should be deployed. It is common to manage role members directly on the server, rather than in the model metadata. Unchecking this option will prevent the deployment from modifying any existing role members on the destination server. +- **Deploy Linguistic Metadata (Q&A Synonyms, AI Instructions and AI Data Schema)**: Deploys the linguistic metadata of each culture in the model. In Power BI, a culture's linguistic metadata holds its Q&A synonyms and the AI instructions and AI data schema set up with **Prep data for AI** in the Power BI service. The option is selected by default. Clear it to keep the linguistic metadata on the destination semantic model when you redeploy over it: + - a culture in both models gets the model's translations and keeps the destination's linguistic metadata + - a culture that exists only on the destination is kept with its linguistic metadata and without its translations + - a culture that exists only in the model is deployed without linguistic metadata + +Tabular Editor doesn't update the kept linguistic metadata, so a kept AI data schema can list tables or columns that the deployed model no longer contains. ## Data source credentials @@ -57,9 +70,8 @@ Power BI and Fabric semantic models don't store credentials in the model. You se During deployment, Tabular Editor generates a [CreateOrReplace TMSL script](https://learn.microsoft.com/analysis-services/tmsl/createorreplace-command-tmsl?view=asallproducts-allversions), which is then executed against the Analysis Services engine. The CreateOrReplace script contains all the metadata required to recreate the model, including tables, columns, measures, relationships, perspectives, translations, etc. If the model does not already exist on the target server, it will be created. If the model already exists, existing objects will be replaced with the new metadata specified in the script. -If any of the options on the **Deployment options** page were deselected, Tabular Editor will use the original metadata definition of those objects in the generated TMSL script, thus retaining their definitions as-is on the server. - -The last page of the deployment wizard lets you export the generated script, so you can review the changes before executing them. +If you clear an option on the **Deployment options** page, the generated TMSL script keeps the destination's existing definition of those objects. +The last page of the deployment wizard, **Deployment Summary**, lists the selected options. Click **TMSL script** to review the generated script before you deploy. **Export build...** ignores the **Deploy Shared Expressions** and **Deploy Linguistic Metadata** options. ## Deployment impact diff --git a/content/features/mcp-server.md b/content/features/mcp-server.md index 1915106ad..f79360305 100644 --- a/content/features/mcp-server.md +++ b/content/features/mcp-server.md @@ -133,6 +133,8 @@ Ask your agent: The agent answers with the model name, how the model is loaded, whether it has unsaved changes and its compatibility level, or reports that no model is open. No prompt appears in Tabular Editor. +The model name the agent receives follows the **Model source detail** setting under **Tools > Preferences > Tabular Editor > User Interface**. With **Name only**, the agent receives no file paths or server names, and with **Hidden**, it receives `Model loaded` in place of the model name. + ## Set agent permissions Permissions control which tools an agent gets, and the [AI Assistant](xref:ai-assistant) uses the same permissions. Set them in the **Tools > MCP Server...** dialog or under **Tools > Preferences > AI Features > Permissions**, which both edit the same setting. @@ -145,10 +147,10 @@ Each resource has an access level: | Resource | Default | What the agent gets | | -- | -- | -- | -| **Model metadata** | Read | Read: tables, columns, measures, expressions, descriptions, relationships and VertiPaq Analyzer statistics. Write: the ability to change the model through C# scripts | -| **Model data** | Deny | Read: DAX query results (data values from your model). Needs a live connection | +| **Model metadata** | Read | Read: tables, columns, measures, expressions, descriptions, relationships, VertiPaq Analyzer statistics and the model's error and warning messages. Write: the ability to change the model through C# scripts | +| **Model data** | Deny | Read: DAX query results (data values from your model) and the text of errors returned by Analysis Services, which can contain data values. DAX queries need a live connection | | **Best Practice Analyzer** | Read | Read: the rule set and the analysis results. Write: adding and modifying rules | -| **Documents** | Write | Read: the contents of your open DAX queries, C# scripts and DAX scripts. Write: modifying them, and creating C# scripts and DAX queries | +| **Documents** | Write | Read: the contents of your open DAX queries, C# scripts and DAX scripts, and the errors and warnings of every open document, Pivot Grids included. Write: modifying them, and creating C# scripts and DAX queries. Pivot Grid layouts can't be read or modified | | **Macros** | Write | Read: your macro library, with names, descriptions and code. Write: no additional tools in this version | **Write** (labeled **Read/Write** in the dropdowns) includes Read, and **Model data** has no Write level. @@ -181,13 +183,15 @@ The agent's tools depend on your grants, and the following table lists what you | List the effective [Best Practice Analyzer](xref:best-practice-analyzer) rules, your own included, and run the analysis | **Best Practice Analyzer > Read** | | Add or change rules in your local collection | **Best Practice Analyzer > Write** | | Run a DAX query and get rows back. A query returns 100 rows by default and at most 500 | **Model data > Read** and **Model metadata > Read** | -| List your open DAX queries, C# scripts and DAX scripts | **Model metadata > Read** | -| Read the contents of open tabs | **Documents > Read** | -| Edit a tab, or open a new C# script or DAX query for review | **Documents > Write** | +| List the model's errors, warnings and Analysis Services messages, root causes first | **Model metadata > Read**. The text of Analysis Services errors also needs **Model data > Read** | +| List your open DAX queries, C# scripts, DAX scripts and Pivot Grids, with the active document and each document's error and warning counts | **Model metadata > Read** | +| Read the contents of an open DAX query, C# script or DAX script | **Documents > Read** | +| Read the errors and warnings of one open document, including the errors the server returned when it last ran | **Documents > Read**. The text of server errors also needs **Model data > Read** | +| Edit an open DAX query, C# script or DAX script, or open a new C# script or DAX query for review | **Documents > Write** | | Read your macro library | **Macros > Read** | | Change the model. See [How an agent changes your model](#how-an-agent-changes-your-model) | **Model metadata > Write** | -Select objects in the TOM Explorer before you refer to them in a prompt, for example before asking "format these consistently". +Select objects in the TOM Explorer before you refer to them in a prompt, for example before asking "format these consistently". To ask about an error in a query or script, make its tab the active document first, for example before asking "why am I seeing this error in this query?". Before a C# script or DAX query from the agent opens as a document, Tabular Editor compiles the script or validates the query against the open model, and returns any errors to the agent. DAX query validation needs Tabular Editor connected to Analysis Services or Power BI. @@ -202,7 +206,7 @@ A script can do anything the C# scripting API supports, for example add measures - its changes are one undo entry, **C# script (MCP)**, and **Ctrl+Z** undoes the whole script. If a document has focus, **Ctrl+Z** undoes typing in the document. Click the TOM Explorer first, or select **Undo C# script (MCP)** in the **Edit** menu. See [Undo in text editors](xref:undo-redo#undo-in-text-editors). - if the script throws an exception part-way through, all its changes are rolled back. -- the agent receives a list of every object the script added, changed or removed, plus anything the script printed. +- the agent receives a list of every object the script added, changed or removed, plus anything the script printed. If the script introduced or resolved DAX errors, the result also lists them, grouped by root cause. - messages from `Output`, `Info`, `Warning` or `Error` are returned to the agent as part of the result, and no dialog opens. - while a long call runs, a **Please wait** indicator appears and clicks in Tabular Editor are discarded. - changed objects and properties are marked in the [TOM Explorer and the Properties view](xref:unsaved-changes) until you save. **Show changes** filters both views to the changes, and right-click **Revert** undoes a single property, a single object or a whole branch. @@ -281,7 +285,7 @@ Select **Regenerate token** (the refresh button beside the token) to issue a new When you use the MCP server, Tabular Editor doesn't contact an AI provider and only answers tool calls from processes on your machine, over a loopback connection. The knowledge base the agent searches is a local database that ships with Tabular Editor and is updated from Tabular Editor's service. -Your agent sends data to its provider under your subscription and that provider's terms, and your agent's settings control what is sent. With **Model data** at its default, **Deny**, the agent receives no DAX query results from Tabular Editor. Values typed into the model definition, such as a `DATATABLE` expression or an **Enter data** table, are model metadata and reach the agent under **Model metadata > Read**. +Your agent sends data to its provider under your subscription and that provider's terms, and your agent's settings control what is sent. With **Model data** at its default, **Deny**, the agent receives no data values from Tabular Editor, and the text of Analysis Services errors is replaced with a fixed sentence. To keep file paths and server names out of what the agent receives, set **Model source detail** under **Tools > Preferences > Tabular Editor > User Interface** to **Name only** or **Hidden**. See @security-privacy for the wider picture, including the [AI Assistant](xref:ai-assistant), which calls a provider directly and is configured separately. diff --git a/content/features/metadata-translation-editor.md b/content/features/metadata-translation-editor.md index 0aadd2b69..c9aa989cd 100644 --- a/content/features/metadata-translation-editor.md +++ b/content/features/metadata-translation-editor.md @@ -1,8 +1,8 @@ --- uid: metadata-translation-editor title: Metadata Translation Editor -author: Šarūnas Jučius -updated: 2023-04-18 +author: Morten Lønskov +updated: 2026-10-11 applies_to: products: - product: Tabular Editor 2 @@ -24,11 +24,13 @@ The **Metadata Translation Editor** provides an overview of the translated names Use the input fields in the metadata translation editor to quickly add/remove or edit translations of object names, descriptions and display folder names for the corresponding language. The first three columns in the editor allow you to change the default names, descriptions and display folder names of objects. You can use Undo (Ctrl+Z) and Redo (Ctrl+Y) the usual way. +To remove a translation, clear its cell and press **Enter**. Clearing the default **Description** or **Display folder** cell empties that property. The default **Name** can't be cleared. The **Display folder** cells of the model, tables, hierarchy levels and perspectives are read-only. + ## Metadata Translation Editor toolbar While the Metadata Translation Editor is active, the accompanying toolbar provides the following options: -- ![Metadata Translation Editor New Translation](~/content/assets/images/metadata-translation-editor-add-translation.png) **New translation**: This button adds a new translation to the model. The translation will be displayed in the Metadata Translation Editor. +- ![Metadata Translation Editor New Translation](~/content/assets/images/metadata-translation-editor-add-translation.png) **New translation**: This button adds a new translation to the model. The translation appears in the Metadata Translation Editor. - ![Metadata Translation Editor Hide Members](~/content/assets/images/perspective-editor-hide-members.png) **Show/Hide hidden objects**: Enable this option if you want to see all objects in the Metadata Translation Editor, including hidden objects. - ![Metadata Translation Editor Hide Names](~/content/assets/images/metadata-translation-editor-name.png) **Show/Hide names**: Disable this option if you don't want to see the name translation columns in Metadata Translation Editor. - ![Metadata Translation Editor Hide Descriptions](~/content/assets/images/metadata-translation-editor-description.png) **Show/Hide descriptions**: Disable this option if you don't want to see the description translation columns in Metadata Translation Editor @@ -38,4 +40,5 @@ While the Metadata Translation Editor is active, the accompanying toolbar provid If you're working on a model with many translations, it may be impractical to display all of them at once. You can rearrange the display order of translations in the Metadata Translation Editor, by dragging the column headers around, making it easier to compare translations side-by-side. Moreover, you can add/remove translations from the editor at any time, through the right-click context menu: + ![Metadata Translation Editor Columns](~/content/assets/images/metadata-translation-editor-columns-bands.png) \ No newline at end of file diff --git a/content/features/pivot-grid.md b/content/features/pivot-grid.md index 2ec2cc595..3d6d836ed 100644 --- a/content/features/pivot-grid.md +++ b/content/features/pivot-grid.md @@ -2,7 +2,7 @@ uid: pivot-grid title: Pivot Grids author: Daniel Otykier -updated: 2026-05-27 +updated: 2026-10-11 applies_to: products: - product: Tabular Editor 2 @@ -70,7 +70,7 @@ These actions are: - **Impersonation...**: Displays a dialog that allows you to specify a role or user to impersonate through the Pivot Grid. This is useful when you want to test the behavior of your model for different users or roles, such as when [RLS or OLS](xref:data-security-about) has been applied to the model. - **Refresh**: Re-execute the query generated by the Pivot Grid. This is useful when auto-refresh is disabled, or if changes have been made to the model outside of Tabular Editor 3. -- **Auto Refresh**: Toggles auto-refresh on or off. When auto-refresh is enabled, the Pivot Grid will automatically refresh every time you save changes to the model, or when a [Data Refresh operation](xref:data-refresh-view) completes. +- **Auto-refresh**: Toggles auto-refresh on or off. When auto-refresh is enabled, the Pivot Grid will automatically refresh every time you save changes to the model, or when a [Data Refresh operation](xref:data-refresh-view) completes. - **Clear filters**: Clears all filters from the Pivot Grid. - **Clear**: Removes all fields from the Pivot Grid. - **Show empty values on columns**: Toggles whether empty values should be shown in the Pivot Grid, for fields that are added to the Pivot Grids Column Area. @@ -130,7 +130,7 @@ After fields have been added to the Pivot Grid, you can adjust the width of colu To apply a "Best Fit" or set a specific pixel width for all columns in the Pivot Grid simultaneously, right-click on the "Values" header and select the desired option from the context menu. -By default, field headers will expand vertically to fit the content of the field name. If you would like to limit the height of field headers to one row, you can disable the **Word wrap field headers**-option under **Tools > Preferences > Pivot Grid > Field Headers**. +By default, field headers expand vertically to fit the field name. To limit field headers to one row, clear **Word wrap field headers** under **Tools > Preferences > Data Browsing > Pivot Grid > Field Headers**. To change the order of fields in the Pivot Grid, you can drag fields between the different areas of the Pivot Grid. You can also drag fields within the same area to change their order. To remove a field from the Pivot Grid, drag it back to the Field List or right-click on the field and choose **Remove from Pivot Grid** from the context menu. @@ -149,7 +149,23 @@ When you close a Pivot Grid, Tabular Editor will prompt you to save the layout o The file extension used for saving Pivot Grid layouts is `.te3pivot`. This is a simple json file that specifies which model objects are shown in the Pivot Grid, and in which areas they are placed. Objects are referenced by name and lineage tag (if present), so the Pivot Grid layout can generally be restored even if the model has been modified since the layout was saved. > [!NOTE] -> It is possible to open a Pivot Grid layout that was created in a different model, but be aware that the fields in the layout may not exist in the model you are currently connected to. In such cases, the Pivot Grid will show a warning message, and any fields that do not exist in the model will be removed from the layout. The warning message may be toggled off under **Tools > Preferences > Data Browsing > Pivot Grid > Show warning if Pivot Grid doesn't match model**. +> You can open a Pivot Grid layout that was created in a different model. If the layout uses fields that don't exist in the model you're connected to, a warning appears and those fields are removed from the layout. The same happens when an open Pivot Grid is kept open and connected to a different model, as described in [Switching models](#switching-models). To turn off the warning, clear **Show warning if Pivot Grid doesn't match model** under **Tools > Preferences > Data Browsing > Pivot Grid**. + +## Switching models + +When you open a different model, open Pivot Grids stay open and connect to the new model. Each Pivot Grid keeps its field layout, and any field the new model doesn't contain is dropped from the layout. When fields are dropped, a warning appears: "The model that was just opened does not contain all the fields used by this Pivot Grid. The missing fields have been dropped from the layout." If the new model has no data to browse, such as a model loaded from a file without a workspace database, the Pivot Grid is emptied. + +If **Auto-refresh** is off for a Pivot Grid, the grid keeps its previous layout and values until you click **Refresh** or open its Field List. At that point, it connects to the new model and drops any missing fields. + +If an open Pivot Grid has fields in its layout, a **Pivot Grids will be rebound to the new model** confirmation appears before the new model opens: + +- **Yes** opens the new model. +- **Yes, don't ask again** opens the new model and clears the **Show warning if Pivot Grid doesn't match model** preference, which turns off both this confirmation and the warning about dropped fields. +- **Cancel** keeps the current model loaded with every document unchanged. + +To keep the original layout, click **Cancel** and save a copy of the Pivot Grid with **File > Save As** before you switch models. + +Clear **Keep Pivot Grids open when a different model is opened** under **Tools > Preferences > Data Browsing > Pivot Grid** to close Pivot Grids when you open a different model. The option is selected by default. ## Additional features @@ -164,6 +180,6 @@ The Pivot Grid has a few more features that are useful to know about: Below is a list of known limitations and issues with Pivot Grids in Tabular Editor 3.16.0, which we are working to address in future releases: - Format rules (such as icon sets, data bars, etc.) are not properly persisted when saving a Pivot Grid layout as a `.te3pivot` file. -- If you open a .te3pivot file on a model different from the one the layout was saved from, fields that do not exist in the current model will be removed from the layout. Hitting Save (Ctrl+S) will save the layout with the removed fields removed. We may change this behavior in a future release so that the .te3pivot file is not overwritten without explicit confirmation. +- If you open a `.te3pivot` file on a different model from the one the layout was saved from, or switch models while a saved Pivot Grid is open, fields that don't exist in the current model are removed from the layout. If you then save (**Ctrl+S**), the `.te3pivot` file is overwritten without those fields. - Columns that use the **Group By Columns** property (including field parameter columns) cannot be added to the Row Area or Column Area on their own. Doing so produces the error *"Column X is part of a composite key, but not all columns of the composite key are included in the expression or its dependent expression"*. This is a general limitation of MDX clients and also occurs when using such a column in an Excel PivotTable. To work around it, add the related Group By Column to the Pivot Grid *before* adding the dependent column. For example, if `[ProductKey]` is configured as the Group By Column of `[ProductName]`, add `[ProductKey]` to the Row Area or Column Area first, then add `[ProductName]`. - Applying an explicit ascending or descending sort to a column in the Row Area or Column Area sorts values alphabetically as strings, regardless of the column data type. Dates formatted as long date (for example "May 4, 2024") and integers are sorted lexicographically rather than chronologically or numerically. This is a limitation of how MDX clients sort and the same behavior occurs in an Excel PivotTable connected to the model. To get chronological or numerical ordering, rely on the column's natural sort (do not apply an explicit sort) or use the **Sort By Column** property on the model column to point at a column with a sortable underlying value. \ No newline at end of file diff --git a/content/features/unsaved-changes.md b/content/features/unsaved-changes.md index 01f50b550..8759535c7 100644 --- a/content/features/unsaved-changes.md +++ b/content/features/unsaved-changes.md @@ -2,7 +2,7 @@ uid: unsaved-changes title: Unsaved change indicators author: Daniel Otykier -updated: 2026-09-23 +updated: 2026-10-11 applies_to: products: - product: Tabular Editor 2 diff --git a/content/features/views/messages-view.md b/content/features/views/messages-view.md index a48bd92d4..bcd2bd684 100644 --- a/content/features/views/messages-view.md +++ b/content/features/views/messages-view.md @@ -2,7 +2,7 @@ uid: messages-view title: Messages view author: Daniel Otykier -updated: 2021-09-08 +updated: 2026-10-11 applies_to: products: - product: Tabular Editor 2 @@ -29,19 +29,41 @@ The Messages view in Tabular Editor 3 is a tool window that displays various typ -The Messages view will tell you the Source and the object from which the message is being generated. +Messages are grouped by **Source**, such as the semantic analyzer, the expression editor or Analysis Services. Each row has these columns: + +| Column | Shows | +| -- | -- | +| **Object** | The object or document the message belongs to. | +| **Type** | The severity of the message: error, warning or information. | +| **Message** | The message text. | +| **Caused by** | For a cascading error, the object whose error causes it. For a root error, the number of dependent errors it causes. | +| **Line** and **Column** | The position of the message in the expression or document. | + +Errors are expressions or structures that Analysis Services rejects, such as an invalid expression in a calculation item or a circular dependency. Warnings flag expressions that work but don't follow recommended practice, such as fully qualified measure references. + +## Cascading errors and root causes + +When an expression has an error, every expression that references it also gets an error, such as a measure that fails only because a measure it references fails. These are *cascading errors*, and the error they trace back to is the *root error*. + +The **Caused by** column shows a different value for each kind of error: + +- on a cascading error, it names the object with the root error, followed by **+N** when the error traces back to more than one root error +- on a root error, it shows **+N dependent errors**, counting the errors it causes directly and indirectly + +To work with cascading errors, right-click a row in the Messages view: + +- **Go to Root Cause** opens the root error in the expression editor with the error highlighted. The command appears only on cascading errors. +- **Show Cascading Errors** shows or hides the cascading errors. Clear it to list only the root errors you need to fix. The setting is on by default and is saved between sessions. + +An object with an error of its own and a reference to a broken object shows two rows: a root error and a cascading error. Analysis Services errors and errors in DAX queries, DAX scripts and Pivot Grids are never cascading. -There are two types of messages displayed Errors and Warnings -- Errors: This tab shows any errors that prevent your model from being deployed or saved. For example, if you have an invalid expression in a calculation item or a circular dependency in a relationship. -- Warnings: This tab shows any warnings that does not concur with standards but does not prevent your model from being usable. This is for example having fully qualified measure references. -- ## Copying Messages The message view allows for copying out the error message using Ctrl+C. From Tabular Editor 3.23.0 Ctrl+C copies the selected cell by default. Use Ctrl+Shift+C (or Copy Row in right-click menu) for row-level copy. > [!TIP] -> Right-click a cell to choose Copy Cell / Copy Row. +> Right-click a cell to choose **Copy Cell** or **Copy Row**. The same menu has **Go to Root Cause** and **Show Cascading Errors**. ![Message View Copy](~/content/assets/images/messages-view-copy.png) diff --git a/content/features/views/user-interface.md b/content/features/views/user-interface.md index 10005d97d..bd883639c 100644 --- a/content/features/views/user-interface.md +++ b/content/features/views/user-interface.md @@ -26,14 +26,14 @@ With a semantic model loaded, Tabular Editor 3 shows the default layout below. ![Basic user interface](~/content/assets/images/basic-ui.png) -1. **Title bar**: This shows the name or the currently loaded file and Analysis Services database or Power BI dataset if connected. -2. **Menu bar**: The menu bar provides access to all of the various features of Tabular Editor 3. See [Menus](#menus) for a detailed walkthrough of all menu items. -3. **Toolbars**: The toolbars provide quick access to the most commonly used features. All features accessible through the toolbar can also be accessed through the menus. You may customize the toolbars and their buttons under **Tools > Customize...** -4. **TOM Explorer view**: A hierarchical view of your data model, with all objects available . of the metadata from the [Tabular Object Model (TOM)](https://docs.microsoft.com/analysis-services/tom/introduction-to-the-tabular-object-model-tom-in-analysis-services-amo?view=asallproducts-allversions) metadata that represents your data model. The toggle buttons at the top allow you to filter which objects are displayed. The search box allows you to filter objects by names. -5. **Expression Editor**: The expression editor provides a quick way to edit any DAX, SQL or M expressions of the currently selected object in the TOM Explorer. If you close the expression editor, you can bring it back up by double-clicking on an object in the TOM Explorer. The dropdown at the top allows you to switch between different expression properties, in case the currently selected object has more than one such property (for example, KPIs have Target Expressions, Status Expressions and Trend Expressions, which are 3 different DAX expressions belonging to the same KPI object). -6. **Properties view**: A detailed view of all TOM properties available on the currently selected object(s) in the TOM Explorer. Most properties can be edited through the grid, even when multiple objects are selected. Some properties (such as "Format String", "Connection String", "Role Members") have popup dialogs or collection editors that can be brought up by clicking on the ellipsis button within the property value cell. -7. **Messages view**: Tabular Editor 3 continuously analyzes the DAX expressions on your model for semantic errors. Any such errors are outputted here. In addition, messages shown in this view, can originate from C# scripts or from error messages reported by Analysis Services. -8. **Status bar**: The status bar provides various contextual information about the current selection, Best Practice Analyzer findings, etc. When the [MCP server](xref:mcp-server) is available, an indicator at the right-hand end reads **MCP Started** or **MCP Stopped**, with the address the server is listening on in its tooltip. Click it to open the MCP Server dialog, or right-click it to start and stop the server, copy a registration configuration for your agent or jump to the preferences page. +1. **Title bar**: the name of the loaded file, or of the Analysis Services database or Power BI semantic model you're connected to. +2. **Menu bar**: all features of Tabular Editor 3. See [Menus](#menus) for each menu. +3. **Toolbars**: the most used features. Every toolbar command is also in the menus. Customize the toolbars and their buttons under **Tools > Customize...**. +4. **TOM Explorer view**: a tree of the model's objects, built from the [Tabular Object Model (TOM)](https://docs.microsoft.com/analysis-services/tom/introduction-to-the-tabular-object-model-tom-in-analysis-services-amo?view=asallproducts-allversions) metadata. The toggle buttons at the top filter which object types are shown, and the search box filters objects by name. +5. **Expression Editor**: edits the DAX, SQL or M expressions of the object selected in the TOM Explorer. If you close it, double-click an object in the TOM Explorer to open it again. If the object has more than one expression property, the dropdown at the top switches between them. For example, a KPI has a target, a status and a trend expression. +6. **Properties view**: all TOM properties of the objects selected in the TOM Explorer. You can edit most properties in the grid, also with several objects selected. Some properties, such as **Format String**, **Connection String** and **Role Members**, open a dialog or collection editor from the ellipsis button in the value cell. +7. **Messages view**: semantic errors found by the continuous analysis of the model's DAX expressions, plus messages from C# scripts and errors reported by Analysis Services. +8. **Status bar**: information about the current selection, Best Practice Analyzer findings and more. The connection item shows the database and server you're connected to as `@`, or `:` for Power BI Desktop, and **(No connection)** for a model loaded without a connection. When the [MCP server](xref:mcp-server) is available, an indicator at the right-hand end reads **MCP Started** or **MCP Stopped**, and its tooltip shows the address the server listens on. Click the indicator to open the **MCP Server** dialog, or right-click it to start or stop the server, copy a registration configuration for your agent or open the preferences page. The [View menu](#view) opens the other views. @@ -89,6 +89,7 @@ The *active document* is the document that has the cursor, such as the Expressio > [!NOTE] > Menus and toolbars are locked in place by default. To unlock them, clear **Lock menus and toolbars** under **Tools > Customize... > Options**. + ![Active Document](~/content/assets/images/active-document.png) ### File @@ -109,7 +110,7 @@ The **File** menu loads and saves model metadata, supporting files and documents ![File Menu Open](~/content/assets/images/file-menu-open.png) - **Model from file...** opens model metadata from a file such as a .bim or .pbit file. - - **Model from DB...** loads the metadata of a deployed model. Enter Analysis Services or Power BI XMLA connection details, or connect to a local instance such as Visual Studio's Integrated Workspace server or Power BI Desktop. + - **Model from DB...** loads the metadata of a deployed model. Enter Analysis Services or Power BI XMLA connection details, or connect to a local instance such as Visual Studio's Integrated Workspace server or Power BI Desktop. Right-click a server in the **Server** list to pin it to the top of the list or delete it. See @xmla-as-connectivity. - **Model from folder...** opens model metadata from a folder structure saved by any version of Tabular Editor. - **File...** opens any file type Tabular Editor 3 supports, by file name extension. See [Supported file types](xref:supported-files). - **Import from Metric View YAML...** imports model metadata from a Databricks Metric View YAML file. @@ -119,9 +120,9 @@ The **File** menu loads and saves model metadata, supporting files and documents > [!IMPORTANT] > In Tabular Editor 3 Desktop Edition, **Open > Model from file...** and **Open > Model from folder...** aren't available, and **Open > File...** opens only [supporting files](xref:supported-files#supported-file-types). -- **Reload from disk** / **Reload from server**: reloads the model metadata from its source and discards all unsaved changes. The command reads **Reload from disk** for a model loaded from a file or folder, and **Reload from server** for a model opened from Analysis Services or Power BI. If Tabular Editor 3 runs as an External Tool for Power BI Desktop and the model changes in Power BI Desktop, use this command to reload the model metadata without reconnecting. Models loaded from a file or folder reload automatically when the files change. See [Auto-reload from disk](xref:auto-reload). +- **Reload from disk** / **Reload from server**: reloads the model metadata from its source and discards all unsaved changes. The command reads **Reload from disk** for a model loaded from a file or folder, and **Reload from server** for a model opened from Analysis Services or Power BI. If Tabular Editor 3 runs as an External Tool for Power BI Desktop and the model changes in Power BI Desktop, use this command to reload the model metadata without reconnecting. Models loaded from a file or folder reload automatically when the files change. See [Auto-reload from disk](xref:auto-reload). Open DAX Query and Pivot Grid documents stay open during a reload and connect to the reloaded model. - **Close Document** (**Ctrl+W**): closes the active document or panel in the main area, such as a DAX query, a C# script or a diagram. If the document has unsaved changes, a prompt to save them appears. -- **Close model**: unloads the model metadata. If you changed the metadata, a prompt to save the changes appears. +- **Close Model**: unloads the model metadata. If you changed the metadata, a prompt to save the changes appears. Open DAX Query and Pivot Grid documents close with the model, and a save prompt appears for each one with unsaved changes. - **Save**: saves the active document to its source file. If no document is active, it saves the model metadata to its source: a Model.bim file, a Database.json folder structure, an Analysis Services instance (including Power BI Desktop) or the Power BI XMLA endpoint. - **Save as...** saves the active document as a new file. If no document is active, it saves the model metadata as a new .bim (JSON) file. - **Save to folder...** saves the model metadata as a [folder structure](xref:save-to-folder). @@ -129,6 +130,8 @@ The **File** menu loads and saves model metadata, supporting files and documents - **Recent files**: lists recently used supporting files. - **Recent tabular models**: lists recently used model metadata files and folders. +With **Model source detail** set to **Name only** or **Hidden**, the hover text of the recent files and models menus shows file names without directories. + > [!IMPORTANT] > In Tabular Editor 3 Desktop Edition, **Save to folder** and **Recent tabular models** are disabled, and **Save as** is enabled only for [supporting files](xref:supported-files#supported-file-types). @@ -161,39 +164,39 @@ The **View** menu opens and focuses the views of Tabular Editor 3, including hid ![View Menu](~/content/assets/images/view-menu.png) -- **TOM Explorer**: The TOM Explorer presents a hierarchical view of the entire [Tabular Object Model (TOM)](https://docs.microsoft.com/analysis-services/tom/introduction-to-the-tabular-object-model-tom-in-analysis-services-amo?view=asallproducts-allversions) of the currently loaded model metadata. See @tom-explorer-view for more information. -- **AI Assistant**: The AI Assistant view lets you interact with an AI assistant that can help you with modeling tasks. -- **DAX Package Manager**: The DAX Package Manager view lets you browse and install DAX user-defined function packages into your model. -- **Best Practice Analyzer**: The Best Practice Analyzer helps improve the quality of your model by letting you specify rules for best practice validation. See @bpa-view for more information. -- **Messages**: The Messages view displays errors, warnings and informational messages from various sources, such as the Tabular Editor 3 Semantic Analyzer. See @messages-view for more information. -- **Data Refresh**: The Data Refresh view allows you to track data refresh operations that are running in the background. See @data-refresh-view for more information. -- **Expression Editor**: This is the "quick editor" that lets you edit DAX, M or SQL expressions on whichever object is currently selected in the TOM Explorer. See @dax-editor for more information. -- **Macros**: The Macros view allows you to manage any macros you have created. Macros can be created from @csharp-scripts. See @creating-macros for more information. -- **VertiPaq Analyzer**: The VertiPaq Analyzer view allows you to collect, import and export detailed statistics about the data in your model, to help improve and debug DAX performance. VertiPaq Analyzer is created and maintained by [Marco Russo](https://twitter.com/marcorus) of [SQLBI](https://sqlbi.com) under MIT license. More information on the [GitHub project page](https://github.com/sql-bi/VertiPaq-Analyzer). -- **Dependencies**: The [**DAX Dependencies** view](xref:creating-and-testing-dax#dax-dependencies) visualizes dependencies between the currently selected object and other objects in the model. Tick **Track TOM Explorer** to have it follow the tree selection. -- **DAX Optimizer**: The DAX Optimizer view integrates with [DAX Optimizer](https://www.daxoptimizer.com) to analyze your model for DAX performance issues. -- **Calendar Editor**: The Calendar Editor view lets you define and manage calendars in models using the modern time intelligence feature. -- **Perspective Editor**: The Perspective Editor view provides a matrix overview of which objects are included in each perspective of the model. -- **Metadata Translation Editor**: The Metadata Translation Editor view provides a grid for editing metadata translations (cultures) of model objects. -- **Toolbars / Properties**: The remaining items let you toggle the visibility of toolbars and bring up the Properties view (F4). - -## Model - -The **Model** menu displays actions that can be performed at the level of the Model object (the root object of the TOM Explorer). +- **TOM Explorer**: a tree of the [Tabular Object Model (TOM)](https://docs.microsoft.com/analysis-services/tom/introduction-to-the-tabular-object-model-tom-in-analysis-services-amo?view=asallproducts-allversions) of the loaded model. See @tom-explorer-view. +- **AI Assistant**: a chat with an AI assistant for modeling tasks. +- **DAX Package Manager**: browses DAX user-defined function packages and installs them into the model. +- **Best Practice Analyzer**: validates the model against best practice rules that you define. See @bpa-view. +- **Messages**: errors, warnings and informational messages from sources such as the Tabular Editor 3 Semantic Analyzer. See @messages-view. +- **Data Refresh**: tracks refresh operations running in the background. See @data-refresh-view. +- **Expression Editor**: edits the DAX, M or SQL expressions of the object selected in the TOM Explorer. See @dax-editor. +- **Macros**: manages the macros you created from @csharp-scripts. See @creating-macros. +- **VertiPaq Analyzer**: collects, imports and exports statistics about the data in the model, for DAX performance tuning. VertiPaq Analyzer is created and maintained by [Marco Russo](https://twitter.com/marcorus) of [SQLBI](https://sqlbi.com) under MIT license. See the [GitHub project page](https://github.com/sql-bi/VertiPaq-Analyzer). +- **Dependencies**: the [**DAX Dependencies** view](xref:creating-and-testing-dax#dax-dependencies) shows the dependencies between the selected object and other objects in the model. Select **Track TOM Explorer** to make it follow the TOM Explorer selection. +- **DAX Optimizer**: analyzes the model for DAX performance issues with [DAX Optimizer](https://www.daxoptimizer.com). +- **Calendar Editor**: defines and manages calendars for the modern time intelligence feature. +- **Perspective Editor**: a matrix of which objects each perspective of the model includes. +- **Metadata Translation Editor**: a grid for editing the metadata translations (cultures) of model objects. +- **Toolbars / Properties**: toggles toolbar visibility and opens the Properties view (**F4**). + +### Model + +The **Model** menu has actions on the Model object, the root of the TOM Explorer. ![View Menu](~/content/assets/images/model-menu.png) - **Deploy...**: opens the Tabular Editor Deployment wizard. See [Model deployment](xref:deployment). > [!IMPORTANT] -> The **Deploy** option is not available in Tabular Editor 3 Desktop Edition. For more information see @editions. - -- **Serialization options...** Lets you configure how model metadata is serialized when saving to disk (file or folder structure). -- **Import tables...** Launches the Tabular Editor 3 Import Table Wizard. For more information, see @importing-tables. -- **Update schema (all tables)...** Detects schema changes in the data source(s) for all tables of the model compared to the currently imported columns. See [Updating table schema](xref:importing-tables#updating-table-schema) for more information. -- **Script DAX**: Generates a DAX script for the currently selected object(s) (or all DAX objects in the model, if nothing is selected). See @dax-scripts for more information. -- **Refresh model**: When Tabular Editor is connected to an instance of Analysis Services, this submenu contains options for starting a background refresh operation at the model level. The submenu has the options below. For more information, see [Refresh command (TMSL)](https://docs.microsoft.com/analysis-services/tmsl/refresh-command-tmsl?view=asallproducts-allversions#request). - - **Automatic (model)**: Analysis Services determines which objects to refresh (only objects that are not in the "Ready" state). +> **Deploy** isn't available in Tabular Editor 3 Desktop Edition. See @editions. + +- **Serialization options...** sets how model metadata is serialized when saved to a file or folder structure. +- **Import tables...** opens the Tabular Editor 3 Import Table Wizard. See @importing-tables. +- **Update schema (all tables)...** compares the columns of all tables with their data sources and detects schema changes. See [Updating table schema](xref:importing-tables#updating-table-schema). +- **Script DAX**: generates a DAX script for the selected objects, or for all DAX objects in the model if nothing is selected. See @dax-scripts. +- **Refresh model**: starts a background refresh of the model when Tabular Editor is connected to Analysis Services. See [Refresh command (TMSL)](https://docs.microsoft.com/analysis-services/tmsl/refresh-command-tmsl?view=asallproducts-allversions#request). The submenu has these options: + - **Automatic (model)**: Analysis Services refreshes only the objects that aren't in the "Ready" state. - **Full refresh (model)**: Analysis Services performs a full refresh of the model. - **Calculate (model)**: Analysis Services recalculates all calculated tables, calculated columns, calculation groups and relationships. No data is read from the data sources. - **Add [object type]**: the remaining items create model child objects, such as tables, data sources and perspectives. diff --git a/content/getting-started/creating-and-testing-dax.md b/content/getting-started/creating-and-testing-dax.md index dab9ba65e..71eba75fd 100644 --- a/content/getting-started/creating-and-testing-dax.md +++ b/content/getting-started/creating-and-testing-dax.md @@ -85,7 +85,7 @@ To add a [calculation group](https://docs.microsoft.com/analysis-services/tabula To add calculation items, right-click on the newly created calculation group and choose **Create > Calculation Item**. Give the Calculation Item a name and edit its DAX expression using the **Expression Editor** similar to how we did for measures above. -You can arrange the display order of Calculation Items by dragging them around in the TOM Explorer, or by setting the `Ordinal` property within the **Properties** view. +You can arrange the display order of Calculation Items by dragging them around in the TOM Explorer, or by setting the `Ordinal` property within the **Properties** view. Setting `Ordinal` moves the item to that position, and a value beyond the last position moves the item to the end. > [!NOTE] > When Calculation Items are added, renamed or removed from a Calculation Group, the Calculation Group has to be refreshed before it can be used in a report. See for more information. diff --git a/content/getting-started/refresh-preview-query.md b/content/getting-started/refresh-preview-query.md index 013c21f02..169bd1e40 100644 --- a/content/getting-started/refresh-preview-query.md +++ b/content/getting-started/refresh-preview-query.md @@ -169,6 +169,8 @@ With Tabular Editor 3, you can collect VertiPaq Analyzer statistics while you ar To collect statistics, simply hit the **Collect stats** button in the **VertiPaq Analyzer** view. +If statistics can't be read from the model's data, for example when a high-cardinality column exceeds a Power BI capacity's per-query memory limit, the statistics are collected from model metadata only. A **Stats collected without reading data** warning appears with the server error, and cardinalities can be missing or inaccurate. To skip reading statistics from the data, clear **Read statistics from data** under **Tools > Preferences > File Formats > VertiPaq Analyzer**. + ![Vertipaq Analyzer Collect Stats](~/content/assets/images/vertipaq-analyzer-collect-stats.png) Once statistics are collected, VertiPaq Analyzer displays a summary of the model size, number of tables, etc. You can find more detailed statistics on the **Tables**, **Columns**, **Relationships** and **Partitions** tabs. diff --git a/content/how-tos/deploy-current-model.md b/content/how-tos/deploy-current-model.md index 94011f3b3..b9836d962 100644 --- a/content/how-tos/deploy-current-model.md +++ b/content/how-tos/deploy-current-model.md @@ -2,7 +2,7 @@ uid: deploy-current-model title: Deploy the loaded model author: Morten Lønskov -updated: 2026-09-15 +updated: 2026-10-11 applies_to: products: - product: Tabular Editor 2 @@ -25,8 +25,10 @@ The wizard's value is in what it lets you *leave alone* on the destination. Each - **Deploy Data Sources** sends explicit data sources. Clear it to keep the destination's own connection strings and credentials, which is usually what you want when promoting from development to test. - **Deploy Table Partitions** synchronizes partitions with the model metadata. Clear it to leave existing partitions, and the data in them, untouched. With it enabled, partitions on the destination that aren't in the model are removed along with their data. - **Deploy partitions governed by Incremental Refresh Policies** appears when the option above is enabled, and lets you deploy every partition *except* those an incremental refresh policy generates. +- **Deploy Shared Expressions** sends the model's shared expressions. Clear it to keep the destination's own shared expressions. This option is available in Tabular Editor 3. - **Deploy Model Roles** sends the roles defined in the model. Clear it to keep the destination's roles as they are. - **Deploy Model Role Members** sends role membership. Role members are commonly managed on the server rather than in the metadata, so clearing this is normal. +- **Deploy Linguistic Metadata (Q&A Synonyms, AI Instructions and AI Data Schema)** sends each culture's linguistic metadata. Clear it to keep the Q&A synonyms, AI instructions and AI data schema set up in the Power BI service. @deployment covers all of this in detail, along with the TMSL script the wizard generates, what a deployment does to data already in the destination, and how to deploy from the command line or a pipeline. diff --git a/content/how-tos/drag-drop.md b/content/how-tos/drag-drop.md index fc043489d..f20123e21 100644 --- a/content/how-tos/drag-drop.md +++ b/content/how-tos/drag-drop.md @@ -2,7 +2,7 @@ uid: drag-drop title: Drag and drop objects author: Morten Lønskov -updated: 2026-09-23 +updated: 2026-10-11 applies_to: products: - product: Tabular Editor 2 @@ -56,7 +56,7 @@ In Tabular Editor 3, the move keeps the object's: > > Press **Ctrl+Z** to undo the move and all of these changes in one step. -DAX that refers to the column by its old table, such as `'Reseller Sales'[Margin]`, isn't rewritten and returns an error. Measure references are written as `[Measure]` without a table and aren't affected. After a move, run the [Best Practice Analyzer](xref:using-bpa) or check the @messages-view to find the broken references. +DAX that refers to the column by its old table, such as `'Reseller Sales'[Margin]`, isn't rewritten and keeps pointing at the table the column has left. Measure references are written as `[Measure]` without a table, so they're unaffected. Run @using-bpa or check the @messages-view after a move to catch what broke. In the Messages view, clear **Show Cascading Errors** to list only the expressions you need to fix. ## Build hierarchies and order calculation items diff --git a/content/how-tos/duplicate-batchrename.md b/content/how-tos/duplicate-batchrename.md index ba58dd3f3..fb03d331e 100644 --- a/content/how-tos/duplicate-batchrename.md +++ b/content/how-tos/duplicate-batchrename.md @@ -2,7 +2,7 @@ uid: duplicate-and-batch title: Duplicating Objects and Batch Rename author: Morten Lønskov -updated: 2026-09-14 +updated: 2026-10-11 applies_to: products: - product: Tabular Editor 2 @@ -18,4 +18,6 @@ The right-click context menu in the Explorer Tree lets you duplicate measures an You may use RegEx for your renamings, and optionally choose whether translations should be renamed as well. -A duplicated object keeps whatever error and warning indicators the original carried, so a copy of an object with an invalid expression is marked as invalid straight away. \ No newline at end of file +A duplicated object keeps whatever error and warning indicators the original carried, so a copy of an object with an invalid expression is marked as invalid straight away. + +If the original is shown in more than one display folder, the copy appears in every one of them and is selected after it's created. This also applies when you copy and paste an object. diff --git a/content/how-tos/load-save.md b/content/how-tos/load-save.md index 4fa5c3c68..e6d2d7ff2 100644 --- a/content/how-tos/load-save.md +++ b/content/how-tos/load-save.md @@ -2,7 +2,7 @@ uid: load-save-model title: Load and save model metadata author: Morten Lønskov -updated: 2026-09-23 +updated: 2026-10-11 applies_to: products: - product: Tabular Editor 2 @@ -69,6 +69,8 @@ In Tabular Editor 3.26 and earlier, and in Tabular Editor 2, the command is call In Tabular Editor 3.27.0 and later, when an agent, a script or a `git pull` changes the metadata files of the open model, the model is reloaded, after a prompt if you have unsaved changes. See [Auto-reload from disk](xref:auto-reload). +Open DAX Query and Pivot Grid documents stay open through a manual or automatic reload and connect to the reloaded model. + > [!WARNING] > Back up your model metadata before you let any tool write to it, Tabular Editor included. A save overwrites the source, and reloading can't bring back changes you've already saved. diff --git a/content/how-tos/perspectives-translations.md b/content/how-tos/perspectives-translations.md index 87113757d..c9efc4899 100644 --- a/content/how-tos/perspectives-translations.md +++ b/content/how-tos/perspectives-translations.md @@ -1,6 +1,8 @@ --- uid: perspectives-translations title: Perspectives and Translations +author: Morten Lønskov +updated: 2026-10-11 applies_to: products: - product: Tabular Editor 2 diff --git a/content/how-tos/xmla-as-connectivity.md b/content/how-tos/xmla-as-connectivity.md index 788ba0078..7b4d47f02 100644 --- a/content/how-tos/xmla-as-connectivity.md +++ b/content/how-tos/xmla-as-connectivity.md @@ -37,12 +37,25 @@ This will open the **Load Semantic Model from Database** dialog, where you can s ### Status bar color -**Advanced Options** includes a **Status bar color** picker. The color you choose is remembered with the connection, and Tabular Editor paints the status bar with it whenever a model is open on that server. +**Advanced Options** includes a **Status bar color** picker. The color you choose is saved with the server in the recent servers list, and Tabular Editor paints the status bar with it whenever a model is open on that server. No particular color means anything in itself; assigning one is what matters. Giving production a color you would not choose for anything else makes it obvious, at a glance and without reading the server name, which environment the window in front of you is connected to. Leave it on **Default** to keep the theme's own status bar. Closing the model restores the status bar to the active theme. +### Recent and pinned servers + +The **Server** list holds the servers you've connected to. When you select a server in the list, its authentication type, user name, **Mode** and **Status bar color** are filled in. Passwords aren't saved. A change to any of these settings is saved for the selected server when you select another server or connect. + +In Tabular Editor 3, right-click a server in the list to manage it: + +- **Pin** moves the server to the top of the list and marks it with a pin icon. +- **Unpin** returns a pinned server to the ordinary list. +- **Delete** removes the server and its saved settings from the list. + +![Open model from DB allows for pinning and deleting entries through its right click menu](~/content/assets/images/common/OpenModelPinDeleteOption.png) +**Number of recent servers displayed** under **Tools > Preferences > Tabular Editor > User Interface** limits only the unpinned servers, and **Clear recent servers** on the same page leaves pinned servers in place. The same list and menu are available on the **Destination Server** page of the [deployment wizard](xref:deployment). + ## Select database After you click "OK", Tabular Editor will connect to the semantic model server and retrieve a list of databases that you have access to. Select the database you want to work with, and click "OK". diff --git a/content/references/downloads.md b/content/references/downloads.md index fd0cccde3..551ccb2d3 100644 --- a/content/references/downloads.md +++ b/content/references/downloads.md @@ -2,7 +2,7 @@ uid: downloads title: All downloads author: Daniel Otykier -updated: 2026-09-22 +updated: 2026-10-11 applies_to: products: - product: Tabular Editor 2 @@ -22,25 +22,25 @@ This page provides download and installation instructions for Tabular Editor 3. ## Latest version -Tabular Editor 3.27.0.0 (*[Release notes](release-notes/3_27_0_0.md)*) is published as two builds, one on .NET 10 and one on .NET 8. The two builds are *functionally identical*, and they can be installed side by side. +Tabular Editor 3.27.1.0 (*[Release notes](release-notes/3_27_1_0.md)*) is published as two builds, one on .NET 10 and one on .NET 8. The two builds are *functionally identical*, and they can be installed side by side. ### On .NET 10 (recommended) Requires the [.NET Desktop Runtime 10](https://dotnet.microsoft.com/download/dotnet/10.0). The `.exe` installer offers to download and install it for you; the portable `.zip` is self-contained and needs no runtime at all. -- Download [Tabular Editor 3.27.0.0 (64 bit)](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.Installer.x64.Net10.exe) *(recommended)* -- Download [Tabular Editor 3.27.0.0 (ARM64)](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.Installer.ARM64.Net10.exe) -- Portable versions: [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.x64.Net10.zip), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.ARM64.Net10.zip) -- MSI version: [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.x64.Net10.msi), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.ARM64.Net10.msi) +- Download [Tabular Editor 3.27.1.0 (64 bit)](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.x64.Net10.exe) *(recommended)* +- Download [Tabular Editor 3.27.1.0 (ARM64)](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.ARM64.Net10.exe) +- Portable versions: [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net10.zip), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net10.zip) +- MSI version: [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net10.msi), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net10.msi) ### On .NET 8 For machines that cannot yet run the .NET 10 desktop runtime. Requires the [.NET Desktop Runtime 8](https://dotnet.microsoft.com/download/dotnet/8.0). -- Download [Tabular Editor 3.27.0.0 (64 bit)](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.Installer.x64.Net8.exe) -- Download [Tabular Editor 3.27.0.0 (ARM64)](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.Installer.ARM64.Net8.exe) -- Portable versions: [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.x64.Net8.zip), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.ARM64.Net8.zip) -- MSI version: [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.x64.Net8.msi), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.ARM64.Net8.msi) +- Download [Tabular Editor 3.27.1.0 (64 bit)](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.x64.Net8.exe) +- Download [Tabular Editor 3.27.1.0 (ARM64)](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.ARM64.Net8.exe) +- Portable versions: [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net8.zip), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net8.zip) +- MSI version: [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net8.msi), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net8.msi) > [!TIP] > Unsure which to take? Take the .NET 10 x64 installer. Choose ARM64 only on an ARM-based PC, and choose .NET 8 only if your organization cannot install the .NET 10 desktop runtime. @@ -57,6 +57,13 @@ It is not necessary to remove previous installations when upgrading to a newer v ## History +- 2026-10-15 **Tabular Editor 3.27.1.0** (*[Release notes](release-notes/3_27_1_0.md)*) + - .NET 10 installer (.exe): [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.x64.Net10.exe), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.ARM64.Net10.exe) + - .NET 10 portable (.zip): [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net10.zip), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net10.zip) + - .NET 10 installer (.msi): [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net10.msi), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net10.msi) + - .NET 8 installer (.exe): [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.x64.Net8.exe), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.ARM64.Net8.exe) + - .NET 8 portable (.zip): [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net8.zip), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net8.zip) + - .NET 8 installer (.msi): [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net8.msi), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net8.msi) - 2026-09-22 **Tabular Editor 3.27.0.0** (*[Release notes](release-notes/3_27_0_0.md)*) - .NET 10 installer (.exe): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.Installer.x64.Net10.exe), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.Installer.ARM64.Net10.exe) - .NET 10 portable (.zip): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.x64.Net10.zip), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.ARM64.Net10.zip) diff --git a/content/references/preferences.md b/content/references/preferences.md index 561866a18..ca0739d2a 100644 --- a/content/references/preferences.md +++ b/content/references/preferences.md @@ -1,8 +1,8 @@ --- uid: preferences title: Controlling preferences -author: Daniel Otykier -updated: 2026-10-12 +author: Morten Lønskov +updated: 2026-10-19 applies_to: products: - product: Tabular Editor 2 @@ -18,7 +18,7 @@ applies_to: --- # Tabular Editor 3 Preferences -Tabular data model development processes and workflows differ greatly from organization to organization. To ensure that the tool can fit into as many of these workflows as possible, Tabular Editor 3 is highly customizable - not just in terms of the user interface's look and feel, but also on more advanced topics such as web proxies, updates and feedback, row limits, timeouts, schema compare preferences, etc. +The Preferences dialog controls Tabular Editor 3's user interface, file formats, connectivity, data browsing, AI features and editor behavior. This article describes the Tabular Editor 3 Preferences dialogs and the settings that you can control through it. @@ -36,57 +36,31 @@ To access the preferences dialog, go to **Tools > Preferences**. ### Power BI -##### *Allow unsupported editing* (disabled) +**Allow unsupported editing** (disabled): applies only to Power BI Desktop versions older than June 2025, which restrict the modeling operations an external tool can make. When checked, all TOM properties are available for editing while Tabular Editor 3 is connected to such a version, including changes that [Power BI Desktop doesn't support](xref:desktop-limitations). The setting has no effect on Power BI Desktop June 2025 or later. -This option is only relevant when Tabular Editor 3 is used as an external tool for Power BI Desktop. When checked, all TOM data modeling properties are available for editing when connected to an instance of Power BI Desktop. It's generally recommended to leave this unchecked, to make sure that you do not accidentally make changes to your Power BI file, [that are not supported by Power BI Desktop](xref:desktop-limitations). +**Hide auto date/time warnings** (disabled): When checked, hides warnings about Power BI auto date/time tables. These warnings appear when the "Auto date/time" setting in Power BI Desktop is enabled, which creates calculated tables that trigger warnings in Tabular Editor 3's built-in DAX analyzer. -##### *Hide auto date/time warnings* (disabled) +**Line break on first line of DAX** (disabled): In Power BI Desktop it is common to insert a line break on the first line of a DAX expression, due to the way the formula bar displays the DAX code. If you often switch back and forth between Tabular Editor and Power BI Desktop, consider enabling this option to have Tabular Editor 3 insert the line break automatically. -When checked, warnings about Power BI auto date/time tables will be suppressed. These warnings appear when the "Auto date/time" setting in Power BI Desktop is enabled, which creates calculated tables that trigger warnings in Tabular Editor 3's built-in DAX analyzer. +**Only for multi-line DAX expressions** (enabled): When "Line break on first line of DAX" is enabled, this sub-setting controls whether the line break is added only for multi-line DAX expressions. When checked, single-line expressions are left unchanged. -##### *Line break on first line of DAX* (disabled) - -In Power BI Desktop it is common to insert a line break on the first line of a DAX expression, due to the way the formula bar displays the DAX code. If you often switch back and forth between Tabular Editor and Power BI Desktop, consider enabling this option to have Tabular Editor 3 insert the line break automatically. - -##### *Only for multi-line DAX expressions* (enabled) - -When "Line break on first line of DAX" is enabled, this sub-setting controls whether the line break is added only for multi-line DAX expressions. When checked, single-line expressions are left unchanged. - -##### *Default Power BI authentication mode* (Integrated) - -Select the default authentication method (Integrated, ServicePrincipal, or MasterUser) to use when connecting to Power BI datasets. +**Default Power BI authentication mode** (Integrated): Select the default authentication method (Integrated, ServicePrincipal, or MasterUser) to use when connecting to Power BI datasets. ### Best Practice Analyzer -##### *Scan for Best Practice violations in the background* (enabled) - -If unchecked, you will have to explicitly run a Best Practice Analysis from inside the Best Practice Analyzer tool window, to view if there are any violations. If checked, the scan happens continuously on a background thread whenever changes are made. For very large models, or models with very complex Best Practice rules, this may cause issues. - -##### *Built-in BPA rules* (enabled for new users) +**Scan for Best Practice violations in the background** (enabled): Runs the Best Practice Analyzer on a background thread whenever the model changes. If you clear it, run the analysis from the **Best Practice Analyzer** window. On large models or with complex rules, background scanning slows down editing. -Choose whether to enable, disable, or be prompted about using Tabular Editor's built-in Best Practice Analyzer rules. The built-in rules cover key best practices across formatting, metadata, model layout, DAX expressions, and translations. New installations will have built-in rules enabled by default. +**Built-in BPA rules** (enabled for new users): Choose whether to enable, disable, or be prompted about using Tabular Editor's built-in Best Practice Analyzer rules. The built-in rules cover key best practices across formatting, metadata, model layout, DAX expressions, and translations. New installations will have built-in rules enabled by default. ### Notifications -##### *Data refresh notification* (enabled) - -When checked, a notification is displayed when a data refresh operation completes. +**Data refresh notification** (enabled): When checked, a notification is displayed when a data refresh operation completes. ### DAX Formula Fix-up -##### *Enable formula fix-up* (enabled) - -Automatically adjusts references in DAX expressions when objects are renamed or moved. This feature ensures that your DAX code remains valid when you reorganize your model. - -##### *Enable formula fix-up on paste* (enabled) - -Automatically adjusts references in DAX expressions when pasting objects. This is useful when copying measures or calculated columns between tables or models. - -### Direct Lake - -##### *Auto-refresh on save* (enabled) +**Enable formula fix-up** (enabled): Automatically adjusts references in DAX expressions when objects are renamed or moved. This feature ensures that your DAX code remains valid when you reorganize your model. -Automatically refresh Direct Lake tables when saving changes to ensure data is current. This ensures that your Direct Lake model stays in sync with the underlying data source. +**Enable formula fix-up on paste** (enabled): Automatically adjusts references in DAX expressions when pasting objects. This is useful when copying measures or calculated columns between tables or models. ## Tabular Editor > Updates and Feedback @@ -94,17 +68,11 @@ Automatically refresh Direct Lake tables when saving changes to ensure data is c ### Updates -##### *Show "Get Started" page on updates* (enabled) - -When checked, the **Get Started** page opens automatically the first time you run Tabular Editor after it has been updated. It appears **on updates**, not on every start-up. You can open it at any time from **Help > Get Started**. - -##### *Check for updates on start-up* (enabled) - -When checked, Tabular Editor will check for new versions when the application starts. This ensures you stay up to date with the latest features and bug fixes. +**Show "Get Started" page on updates** (enabled): When checked, the **Get Started** page opens automatically the first time you run Tabular Editor after it has been updated. It appears **on updates**, not on every start-up. You can open it at any time from **Help > Get Started**. -##### *Major updates only* (disabled) +**Check for updates on start-up** (enabled): Checks for a new version when the application starts. -When checked, only major version updates trigger notifications. Minor and patch updates are ignored. This setting is only available while *Check for updates on start-up* is checked. +**Major updates only** (disabled): When checked, only major version updates trigger notifications. Minor and patch updates are ignored. This setting is only available while **Check for updates on start-up** is checked. The version you are running is shown below these settings, along with a **Check for updates** button that runs the check immediately. @@ -118,114 +86,98 @@ The section is absent when no policy applies. Settings that a policy locks or li ### Usage Data and Feedback -##### *Help improve Tabular Editor by collecting anonymous usage data* (enabled) - -Data does not contain any personally identifiable information, nor any information about the structure or content of your data models. If you would still like to opt out of telemetry, uncheck this. - -##### *Send error reports* (enabled) - -In cases of crashes, Tabular Editor displays an option for sending a crash report when this is checked. Crash reports are very helpful when debugging, so please leave this checked if you don't mind! +**Help improve Tabular Editor by collecting anonymous usage data** (enabled): Data does not contain any personally identifiable information, nor any information about the structure or content of your data models. Clear it to opt out of telemetry. -## Tabular Editor > Deployment +**Send error reports** (enabled): In cases of crashes, Tabular Editor displays an option for sending a crash report when this is checked. -![Model Deployment preferences](~/content/assets/images/pref-model-deployment.png) - -Configure which types of objects are deployed by default when using the deployment wizard: - -##### *Deploy data sources* (disabled) +## Tabular Editor > Defaults -Include data source definitions when deploying. Enable this if you want data source connection strings and settings to be deployed along with your model changes. + -##### *Deploy partitions* (disabled) +**New model compatibility level** (1600): Set the default compatibility level for newly created models. The choices are the same as in the **New Model** dialog: -Include partition definitions when deploying. Enable this if you want partition configurations to be deployed along with your model changes. +| Level | Target | +|---|---| +| 1200 | Azure Analysis Services / SQL Server 2016+ | +| 1400 | Azure Analysis Services / SQL Server 2017+ | +| 1500 | Azure Analysis Services / SQL Server 2019+ | +| 1600 | Azure Analysis Services / SQL Server 2022+ | +| 1700 | Azure Analysis Services / SQL Server 2025+ | +| 1706 | Power BI / Fabric | -##### *Deploy refresh policy partitions* (disabled) +1700 is the highest level Analysis Services supports; 1706 is the highest overall and is Power BI and Fabric only. -Include incremental refresh policy partitions when deploying. This controls whether partitions created by incremental refresh policies are deployed. +**Use latest compatibility level as default** (enabled): Automatically use the latest available compatibility level for new models. When enabled, this overrides the specific compatibility level setting above, and the dropdown is disabled. -##### *Deploy model roles* (disabled) +**New models use workspace database** (enabled): When creating a new model, automatically create a workspace database on Analysis Services. This allows you to immediately test and query your model during development. -Include role definitions when deploying. Enable this if you want Row-Level Security (RLS) and Object-Level Security (OLS) roles to be deployed. +**Default save mode** (AlwaysAsk): Choose whether to always save as a file (.bim), folder (multiple JSON files), TMDL (Tabular Model Definition Language), or always ask when saving. Options: AlwaysAsk, File, Folder, TMDL. -##### *Deploy model role members* (disabled) +**Use PBIX file name when saving to disk** (enabled): When saving a model loaded from a PBIX file, use the PBIX filename as the default. This maintains naming consistency between Power BI files and saved model metadata. -Include role member assignments when deploying. Enable this if you want user and group assignments to security roles to be deployed. +**Create user options for new models** (enabled): Automatically create .tmuo (Tabular Model User Options) files for new models. These files store user-specific settings like diagram layouts and window positions. -##### *Deploy shared expressions* (disabled) +## Tabular Editor > Keyboard -Include shared expressions (M expressions) when deploying. Enable this if you want Power Query shared expressions to be deployed. +![Keyboard mappings](~/content/assets/images/keyboard-mappings.png) -### Deployment Metadata +Configure keyboard shortcuts for all Tabular Editor commands. Use the search functionality to quickly find specific commands and assign or modify their keyboard shortcuts to match your preferred workflow. -##### *Annotate deployment metadata* (disabled) +## Tabular Editor > User Interface -Add deployment timestamp and user information as annotations on deployed objects. This can be useful for tracking when and by whom model changes were deployed. +Control toolbars and menus, how much of the model's source location is shown, window layout, language, accessibility and the recent items lists. -### Backup Settings + -##### *Backup on save* (enabled) +### Toolbars and menus -Create a backup of the model when saving changes locally. This provides a safety net in case you need to revert changes. +**Show toolbars in floating windows** (enabled): Show toolbars in documents and views that you undock into floating windows. -##### *Save backup location* +**Hide inactive toolbars** (enabled): Hide toolbars that don't apply to the active document or view. -Specify the folder where save backups are stored. By default, backups are not created unless a location is specified. +**Hide inactive menus** (enabled): Hide the [dynamic menus](xref:user-interface#dynamic-menus-context-dependent) that don't apply to the active document or view. -##### *Backup on deploy* (enabled) +**Hide version number** (disabled): Hide the Tabular Editor 3 build and version number from the title bar. -Create a backup of the target model before deploying changes. This allows you to restore the previous version if needed. +**Model source detail** (Full path): Set how much of the loaded model's source location appears in the title bar, the status bar connection item, document tab tooltips and the hover text of the recent files and models menus: -##### *Backup location* +- **Full path**: the model name with its full path, server or workspace location +- **Name only**: the file name, folder name or database name, without paths or server names +- **Hidden**: neither the model name nor its location. The title bar shows **Model loaded** and the status bar shows **Connected** when you're connected to a server. -Specify the folder where deployment backups are stored. By default, backups are not created unless a location is specified. +Agents connected through the @mcp-server receive the model title at the same level. If you selected **Hide model source details** in an earlier version, this setting is **Hidden**. -## Tabular Editor > Defaults +### Search and replace - +**Dialog opacity when inactive** (70%): Opacity of the **Find and replace** dialog when it doesn't have focus. -##### *New model compatibility level* (1600) +### Layout -Set the default compatibility level for newly created models. The choices are the same as in the **New Model** dialog: +**Remember whether window is maximized** (enabled): Restore the main window's maximized state when Tabular Editor 3 starts. -| Level | Target | -|---|---| -| 1200 | Azure Analysis Services / SQL Server 2016+ | -| 1400 | Azure Analysis Services / SQL Server 2017+ | -| 1500 | Azure Analysis Services / SQL Server 2019+ | -| 1600 | Azure Analysis Services / SQL Server 2022+ | -| 1700 | Azure Analysis Services / SQL Server 2025+ | -| 1706 | Power BI / Fabric | +**Remember window position and size** (enabled): Restore the main window's position and size when Tabular Editor 3 starts. -1700 is the highest level Analysis Services supports; 1706 is the highest overall and is Power BI and Fabric only. +### Language -##### *Use latest compatibility level as default* (enabled) +**User interface language** (English): The language of the user interface. Restart Tabular Editor 3 to apply a change. -Automatically use the latest available compatibility level for new models. When enabled, this overrides the specific compatibility level setting above, and the dropdown is disabled. +### Accessibility -##### *New models use workspace database* (enabled) +**Color blindness mode** (disabled): Mark objects added since the last save in teal where they'd otherwise be green, in the **TOM Explorer** change indicators and the model comparison view. See @accessibility. -When creating a new model, automatically create a workspace database on Analysis Services. This allows you to immediately test and query your model during development. +### Recent Items -##### *Default save mode* (AlwaysAsk) +**Use compact file paths** (enabled): Shorten long file paths in the recent files and models menus. With **Model source detail** set to **Full path**, the location part of the title bar is shortened too. -Choose whether to always save as a file (.bim), folder (multiple JSON files), TMDL (Tabular Model Definition Language), or always ask when saving. Options: AlwaysAsk, File, Folder, TMDL. +**Number of recent files displayed** (10): The maximum number of files in the recent files menu, up to 50. -##### *Use PBIX file name when saving to disk* (enabled) +**Number of recent models displayed** (10): The maximum number of models in the recent models menu, up to 50. -When saving a model loaded from a PBIX file, use the PBIX filename as the default. This maintains naming consistency between Power BI files and saved model metadata. +**Number of recent servers displayed** (10): The maximum number of servers in the **Server** list when you connect to a semantic model, up to 50. Pinned servers aren't counted and always stay in the list. See @xmla-as-connectivity. -##### *Create user options for new models* (enabled) - -Automatically create .tmuo (Tabular Model User Options) files for new models. These files store user-specific settings like diagram layouts and window positions. - -## Tabular Editor > Keyboard - -![Keyboard mappings](~/content/assets/images/keyboard-mappings.png) - -Configure keyboard shortcuts for all Tabular Editor commands. Use the search functionality to quickly find specific commands and assign or modify their keyboard shortcuts to match your preferred workflow. +**Clear recent files**, **Clear recent models**, **Clear recent servers** and **Clear all recent items**: Clear the corresponding lists. **Clear recent servers** and **Clear all recent items** keep pinned servers and their saved settings. ## Tabular Editor > TOM Explorer @@ -237,74 +189,48 @@ The toggles that decide which object types appear in the tree, such as measures, ### Display and filtering -##### *Use table groups* (enabled) +**Use table groups** (enabled): Group your tables in the TOM Explorer, for example to keep calculation groups, dimensions and fact tables apart. Tabular Editor records a table's group in an annotation on the table itself, so the grouping travels with the model. It is internal to Tabular Editor: no other client tool, Power BI Desktop included, shows it. See @table-groups. -Group your tables in the TOM Explorer, for example to keep calculation groups, dimensions and fact tables apart. Tabular Editor records a table's group in an annotation on the table itself, so the grouping travels with the model. It is internal to Tabular Editor: no other client tool, Power BI Desktop included, shows it. See @table-groups. +**Show full branch** (disabled): When you filter the tree, Tabular Editor shows the objects that match your filter string together with their parents. Enable this to also show every child of a match, whether or not the children match the string themselves. -##### *Show full branch* (disabled) - -When you filter the tree, Tabular Editor shows the objects that match your filter string together with their parents. Enable this to also show every child of a match, whether or not the children match the string themselves. - -##### *Highlight relationships* (enabled) - -Highlight the relationships that involve the table or column you have selected, so you can see at a glance what a column is joined to. +**Highlight relationships** (enabled): Highlight the relationships that involve the table or column you have selected, so you can see at a glance what a column is joined to. ### Unsaved changes These settings control how [unsaved changes](xref:unsaved-changes) are indicated in the TOM Explorer and the Properties view. -##### *Mark objects with unsaved changes* (enabled) +**Mark objects with unsaved changes** (enabled): Highlight objects in the TOM Explorer that differ from the last saved version of the model, using a tinted row and a badge on the object's icon: orange for edited objects, green for added objects and red for deleted objects. Tables, folders and groups that contain changed objects get a hatched fill. When disabled, deleted objects still stay visible according to the setting below, and the **Show changes** toolbar filter still works. Use **Color blindness mode** under **User Interface > Accessibility** to mark added objects in teal instead of green. -Highlight objects in the TOM Explorer that differ from the last saved version of the model, using a tinted row and a badge on the object's icon: orange for edited objects, green for added objects and red for deleted objects. Tables, folders and groups that contain changed objects get a hatched fill. When disabled, deleted objects still stay visible according to the setting below, and the **Show changes** toolbar filter still works. Use **Color blindness mode** under **User Interface > Accessibility** to mark added objects in teal instead of green. - -##### *Keep deleted objects visible* (Until the model is saved) - -How long deleted objects remain visible in the TOM Explorer, struck through, where they used to be. Right-click a deleted object and choose **Restore** to bring it back. Options: +**Keep deleted objects visible** (Until the model is saved): How long deleted objects remain visible in the TOM Explorer, struck through, where they used to be. Right-click a deleted object and choose **Restore** to bring it back. Options: - **Never**: Deleted objects disappear from the TOM Explorer at once. - **Until the model is saved**: Deleted objects are treated as unsaved changes and disappear when the model is saved. - **Until the model is closed**: Deleted objects stay visible, and restorable, for the whole editing session, even across saves. -##### *Gather deleted objects under a "Deleted objects" node* (disabled) - -Show the deleted objects of a table, hierarchy, role or table group together under a single **Deleted objects** node at the end of their container, instead of each where it used to be. Right-click the node and choose **Restore** to bring back all of them at once. +**Gather deleted objects under a "Deleted objects" node** (disabled): Show the deleted objects of a table, hierarchy, role or table group together under a single **Deleted objects** node at the end of their container, instead of each where it used to be. Right-click the node and choose **Restore** to bring back all of them at once. -##### *Mark properties with unsaved changes in the Properties pane* (enabled) - -Highlight properties in the Properties view that differ from the last saved version of the model, using a tinted row. When disabled, the **Show changes** toolbar filter in the Properties view still works. +**Mark properties with unsaved changes in the Properties pane** (enabled): Highlight properties in the Properties view that differ from the last saved version of the model, using a tinted row. When disabled, the **Show changes** toolbar filter in the Properties view still works. ### Delete -##### *Always show delete warnings* (disabled) - -If you prefer Tabular Editor 3 to prompt you to confirm all object deletions, enable this setting. Otherwise, Tabular Editor 3 will only prompt you to confirm multi-object deletions, or deletions of objects that are referenced by other objects. +**Always show delete warnings** (disabled): Asks you to confirm every object deletion. When cleared, a confirmation appears only for multi-object deletions and for objects that other objects reference. > [!NOTE] > All delete operations in Tabular Editor 3 can be undone by hitting CTRL+Z. ### Localization -These settings decide the format string Tabular Editor writes when you pick the *Currency* number format for an object in the Properties pane. - -##### *Default currency* (English (United States)) - -The formatting convention to base the currency format string on. Pick the locale whose currency symbol, decimal separator and digit grouping you want. - -##### *Use a custom currency symbol* (disabled) - -Supply your own symbol instead of taking one from the locale above. The three settings below apply only while this is checked. - -##### *Custom currency symbol* +These settings decide the format string Tabular Editor writes when you pick the **Currency** number format for an object in the Properties pane. -The symbol to use. Enter the symbol on its own, without the number; whitespace is ignored. +**Default currency** (English (United States)): The formatting convention to base the currency format string on. Pick the locale whose currency symbol, decimal separator and digit grouping you want. -##### *Custom currency symbol position* (Before number) +**Use a custom currency symbol** (disabled): Supply your own symbol instead of taking one from the locale above. The three settings below apply only while this is checked. -Whether the symbol goes before or after the numeric value. +**Custom currency symbol**: The symbol to use. Enter the symbol on its own, without the number; whitespace is ignored. -##### *Put a space between the number and symbol* (disabled) +**Custom currency symbol position** (Before number): Whether the symbol goes before or after the numeric value. -Separate the symbol from the numeric value with a space. +**Put a space between the number and symbol** (disabled): Separate the symbol from the numeric value with a space. ## Tabular Editor > Copy/Paste @@ -314,21 +240,13 @@ Separate the symbol from the numeric value with a space. Control what metadata is included when copying objects: -##### *Include translations* (enabled) +**Include translations** (enabled): Copy translation metadata with objects. When enabled, any translations defined for the copied object will also be copied. -Copy translation metadata with objects. When enabled, any translations defined for the copied object will also be copied. +**Include perspectives** (enabled): Copy perspective membership with objects. When enabled, the copied object will belong to the same perspectives as the original. -##### *Include perspectives* (enabled) +**Include RLS** (enabled): Copy Row-Level Security expressions with objects. This applies when copying tables that have RLS rules defined. -Copy perspective membership with objects. When enabled, the copied object will belong to the same perspectives as the original. - -##### *Include RLS* (enabled) - -Copy Row-Level Security expressions with objects. This applies when copying tables that have RLS rules defined. - -##### *Include OLS* (enabled) - -Copy Object-Level Security settings with objects. This applies when copying objects that have OLS restrictions. +**Include OLS** (enabled): Copy Object-Level Security settings with objects. This applies when copying objects that have OLS restrictions. ## Tabular Editor > Perspectives @@ -338,21 +256,13 @@ Copy Object-Level Security settings with objects. This applies when copying obje Control how perspective membership is handled: -##### *Inherit perspective membership for new objects* (disabled) - -Newly created objects automatically inherit perspective membership from their parent. For example, a new measure would automatically be added to the same perspectives as its parent table. - -##### *Inherit perspective membership for relocated objects* (disabled) +**Inherit perspective membership for new objects** (disabled): Newly created objects automatically inherit perspective membership from their parent. For example, a new measure would automatically be added to the same perspectives as its parent table. -Objects that are moved inherit perspective membership from their new parent. This is useful when reorganizing your model structure. +**Inherit perspective membership for relocated objects** (disabled): Objects that are moved inherit perspective membership from their new parent. This is useful when reorganizing your model structure. -##### *Inherit when adding table to perspective* (enabled) +**Inherit when adding table to perspective** (enabled): Automatically add all table objects (columns, measures, hierarchies) when a table is added to a perspective. -Automatically add all table objects (columns, measures, hierarchies) when a table is added to a perspective. - -##### *Inherit when removing table from perspective* (enabled) - -Automatically remove all table objects when a table is removed from a perspective. +**Inherit when removing table from perspective** (enabled): Automatically remove all table objects when a table is removed from a perspective. ## Tabular Editor > Schema Compare @@ -360,25 +270,15 @@ Automatically remove all table objects when a table is removed from a perspectiv Configure which changes are ignored during schema comparison when updating table schemas: -##### *Ignore Import mode changes* (disabled) - -Don't flag changes to Import mode properties. Enable this if you want to ignore changes between Import, DirectQuery, and Dual modes during schema comparison. - -##### *Ignore data type changes* (disabled) - -Don't flag column data type changes. Enable this if you want to ignore data type changes during schema comparison. - -##### *Ignore description changes* (disabled) - -Don't flag changes to object descriptions. Enable this if you don't want to see description changes in the schema comparison. +**Ignore Import mode changes** (disabled): Don't flag changes to Import mode properties. Enable this if you want to ignore changes between Import, DirectQuery, and Dual modes during schema comparison. -##### *Ignore decimal to double changes* (disabled) +**Ignore data type changes** (disabled): Don't flag column data type changes. Enable this if you want to ignore data type changes during schema comparison. -Don't flag changes between decimal and double data types. This is useful when working with data sources that don't distinguish between these types. +**Ignore description changes** (disabled): Don't flag changes to object descriptions. Enable this if you don't want to see description changes in the schema comparison. -##### *Prioritize Analysis Services schema detector* (disabled) +**Ignore decimal to double changes** (disabled): Don't flag changes between decimal and double data types. This is useful when working with data sources that don't distinguish between these types. -Use Analysis Services metadata as the source of truth for schema detection. When enabled, Tabular Editor will query the Analysis Services instance directly instead of using the data source provider's schema information. +**Prioritize Analysis Services schema detector** (disabled): Use Analysis Services metadata as the source of truth for schema detection. When enabled, schema detection queries the Analysis Services instance directly. ## Tabular Editor > Save to Folder/File @@ -386,119 +286,67 @@ Use Analysis Services metadata as the source of truth for schema detection. When ### Serialization Mode -##### *Use TMDL format* (disabled) +**Use TMDL format** (disabled): Save model metadata using the Tabular Model Definition Language (TMDL) format instead of JSON. TMDL is the modern format recommended for version control and collaboration. -Save model metadata using the Tabular Model Definition Language (TMDL) format instead of JSON. TMDL is the modern format recommended for version control and collaboration. - -##### *Use recommended serialization settings* (enabled) - -Apply recommended settings for folder-based serialization (overrides custom settings). When enabled, Tabular Editor uses best practices for saving models to folders, optimized for version control. +**Use recommended serialization settings** (enabled): Apply recommended settings for folder-based serialization (overrides custom settings). When enabled, Tabular Editor uses best practices for saving models to folders, optimized for version control. ### Legacy (JSON) Serialization Settings -##### *Prefix filenames* (disabled) - -Add numeric prefixes to filenames for ordering. This can help maintain a consistent file order in file explorers. - -##### *Local relationships* (enabled) - -Store relationship definitions with individual tables instead of in a central location. This makes it easier to see which relationships belong to each table when using version control. - -##### *Local perspectives* (enabled) +**Prefix filenames** (disabled): Add numeric prefixes to filenames for ordering. This can help maintain a consistent file order in file explorers. -Store perspective membership with individual objects instead of in a central location. This reduces merge conflicts in version control. +**Local relationships** (enabled): Store relationship definitions with individual tables instead of in a central location. This makes it easier to see which relationships belong to each table when using version control. -##### *Local translations* (enabled) +**Local perspectives** (enabled): Store perspective membership with individual objects instead of in a central location. This reduces merge conflicts in version control. -Store translations with individual objects instead of in a central location. This reduces merge conflicts in version control. +**Local translations** (enabled): Store translations with individual objects instead of in a central location. This reduces merge conflicts in version control. -##### *Levels* +**Levels**: Select which object types to serialize at different folder levels. This allows you to organize your model files into a hierarchical structure. The available levels are Data Sources, User Defined Functions (UDFs), Shared Expressions, Perspectives, Relationships, Roles, Tables, Columns, Hierarchies, Measures, Partitions, Calculation Items and Translations. -Select which object types to serialize at different folder levels. This allows you to organize your model files into a hierarchical structure. The available levels are Data Sources, User Defined Functions (UDFs), Shared Expressions, Perspectives, Relationships, Roles, Tables, Columns, Hierarchies, Measures, Partitions, Calculation Items and Translations. +**Ignore inferred objects** (enabled): Don't serialize objects that are automatically inferred by the engine. This reduces clutter in saved metadata. -##### *Ignore inferred objects* (enabled) +**Ignore inferred properties** (enabled): Don't serialize properties that are automatically inferred by the engine. This keeps saved metadata clean and focused on explicitly set values. -Don't serialize objects that are automatically inferred by the engine. This reduces clutter in saved metadata. +**Ignore timestamps** (enabled): Don't serialize timestamp metadata. This is highly recommended for version control as it prevents unnecessary changes in every commit. -##### *Ignore inferred properties* (enabled) +**Ignore lineage tags** (disabled): Don't serialize Power BI lineage tag metadata. Enable this if you don't want lineage information in your saved metadata. -Don't serialize properties that are automatically inferred by the engine. This keeps saved metadata clean and focused on explicitly set values. +**Ignore privacy settings** (disabled): Don't serialize data source privacy settings. Enable this if you manage privacy settings separately. -##### *Ignore timestamps* (enabled) +**Include sensitive data** (disabled): Include sensitive information like passwords in serialized metadata. This is not recommended for security reasons. -Don't serialize timestamp metadata. This is highly recommended for version control as it prevents unnecessary changes in every commit. +**Ignore incremental refresh partitions** (disabled): Don't serialize partitions created by incremental refresh policies. Enable this if you want incremental refresh to be managed separately from your saved metadata. -##### *Ignore lineage tags* (disabled) +**Split multiline strings** (enabled): Split long string values across multiple lines for better readability in version control. This makes it easier to see changes in DAX expressions and other long text properties. -Don't serialize Power BI lineage tag metadata. Enable this if you don't want lineage information in your saved metadata. - -##### *Ignore privacy settings* (disabled) - -Don't serialize data source privacy settings. Enable this if you manage privacy settings separately. - -##### *Include sensitive data* (disabled) - -Include sensitive information like passwords in serialized metadata. This is not recommended for security reasons. - -##### *Ignore incremental refresh partitions* (disabled) - -Don't serialize partitions created by incremental refresh policies. Enable this if you want incremental refresh to be managed separately from your saved metadata. - -##### *Split multiline strings* (enabled) - -Split long string values across multiple lines for better readability in version control. This makes it easier to see changes in DAX expressions and other long text properties. - -##### *Sort arrays* (disabled) - -Sort array elements alphabetically for consistent serialization. This can reduce meaningless differences in version control, but may change the logical order of some elements. +**Sort arrays** (disabled): Sort array elements alphabetically for consistent serialization. Reduces ordering differences in version control and changes the order of some elements. ### TMDL Serialization Settings -##### *Indentation mode* (tabs) - -Choose between tabs or spaces for indentation in TMDL files. Tabs are the default and recommended option. - -##### *Indentation spaces* (4) +**Indentation mode** (tabs): Choose between tabs or spaces for indentation in TMDL files. Tabs are the default and recommended option. -When using spaces, specify the number of spaces per indentation level. - - +**Indentation spaces** (4): When using spaces, specify the number of spaces per indentation level. ## AI Features The parent page carries the two settings that apply to every AI feature, the chat and the [MCP server](xref:mcp-server) alike. -##### *Check for knowledge base updates on startup* (enabled) - -The AI Assistant searches a local copy of the Tabular Editor documentation. When checked, Tabular Editor looks for a newer copy at start-up and downloads it if one is available. This is the only outbound request any AI feature makes on its own. - -##### Audit log +**Check for knowledge base updates on startup** (enabled): The AI Assistant searches a local copy of the Tabular Editor documentation. When checked, Tabular Editor looks for a newer copy at start-up and downloads it if one is available. This is the only outbound request any AI feature makes on its own. -**Open audit folder** opens this computer's record of what the AI Assistant and the MCP server did: permission decisions, which tools were called and how each one ended, and the full text of any script that was run or handed over for review. Prompts, replies and data values are never recorded. The record is an Enterprise Edition feature: on Desktop and Business nothing is recorded and the button is not shown. See @ai-audit-log. +**Audit log**: **Open audit folder** opens this computer's record of what the AI Assistant and the MCP server did: permission decisions, which tools were called and how each one ended, and the full text of any script that was run or handed over for review. Prompts, replies and data values are never recorded. The record is an Enterprise Edition feature: on Desktop and Business nothing is recorded and the button is not shown. See @ai-audit-log. ## AI Features > AI Assistant Connection settings for the AI Assistant chat. The **AI Provider** child page renders here. See @ai-assistant for what each provider needs. -##### *Choose provider* (None) - -Which AI provider the chat talks to: **OpenAI**, **Anthropic**, **Azure OpenAI** or **Custom (OpenAI-compatible)**. The fields below change with your choice. An administrator can lock this to a single provider, or narrow the list, by policy. - -##### *Base URL* / *Service endpoint* - -Where requests are sent. OpenAI and Anthropic supply a default and the field is optional. Azure OpenAI and Custom have no default, so an endpoint is required. +**Choose provider** (None): Which AI provider the chat talks to: **OpenAI**, **Anthropic**, **Azure OpenAI** or **Custom (OpenAI-compatible)**. The fields below change with your choice. An administrator can lock this to a single provider, or narrow the list, by policy. -##### *API Key* +**Base URL** / **Service endpoint**: Where requests are sent. OpenAI and Anthropic supply a default and the field is optional. Azure OpenAI and Custom have no default, so an endpoint is required. -Your own key for the chosen provider. It is stored encrypted on this machine in `Preferences.json`. Tabular Editor ships no built-in key and never proxies your requests. +**API Key**: Your own key for the chosen provider. It is stored encrypted on this machine in `Preferences.json`. Tabular Editor ships no built-in key and never proxies your requests. -##### *OpenAI Organization ID* and *OpenAI Project ID* +**OpenAI Organization ID** and **OpenAI Project ID**: Optional, and shown for the OpenAI provider only. Use them where your OpenAI account bills or scopes usage per organization or project. -Optional, and shown for the OpenAI provider only. Use them where your OpenAI account bills or scopes usage per organization or project. - -##### *Model name* (*Deployment* for Azure OpenAI) - -Which model to use. For OpenAI and Anthropic this is a dropdown filled from an online catalog, so it is empty until the catalog has been fetched once on this machine. For Azure OpenAI the field is labelled **Deployment** and takes the name you gave the deployment, which is not necessarily the name of the underlying model. Leaving it blank uses the provider's default, except for Azure OpenAI and Custom, which have none. +**Model name** (**Deployment** for Azure OpenAI): Which model to use. For OpenAI and Anthropic this is a dropdown filled from an online catalog, so it is empty until the catalog has been fetched once on this machine. For Azure OpenAI the field is labelled **Deployment** and takes the name you gave the deployment, which is not necessarily the name of the underlying model. Leaving it blank uses the provider's default, except for Azure OpenAI and Custom, which have none. ## AI Features > AI Assistant > Preferences @@ -506,39 +354,25 @@ How the chat behaves. See @ai-assistant for the detail behind each group. ### Chat Display -##### *Show selection context indicator* (enabled) - -Show which model object is currently selected above the chat, so you can see what the assistant will treat as context. +**Show selection context indicator** (enabled): Show which model object is currently selected above the chat, so you can see what the assistant will treat as context. -##### *Show custom instructions indicator* (enabled) +**Show custom instructions indicator** (enabled): Show which [Custom Instructions](xref:ai-assistant#custom-instructions) were applied above each reply. -Show which [Custom Instructions](xref:ai-assistant#custom-instructions) were applied above each reply. - -##### *Show knowledge base search indicator* (enabled) - -Show progress while the assistant searches the knowledge base. +**Show knowledge base search indicator** (enabled): Show progress while the assistant searches the knowledge base. ### Context Compaction -##### *Auto compact* (enabled) - -Summarize the older part of a conversation automatically as it approaches the model's context limit, so a long conversation can carry on. +**Auto compact** (enabled): Summarize the older part of a conversation automatically as it approaches the model's context limit, so a long conversation can carry on. -##### *Auto compact threshold %* (80) - -How full the context window gets before compaction runs, as a percentage of the *model's own* window rather than a fixed number of tokens. Values outside 50 to 100 have no further effect. +**Auto compact threshold %** (80): How full the context window gets before compaction runs, as a percentage of the selected model's context window. Values outside 50 to 100 have no further effect. ### C# Script -##### *Allow AI assistant to run C# scripts directly* (disabled) - -Let the assistant carry out the model change you asked for, instead of writing a script and opening it for you to run. Only scripts the safety analysis considers safe are run this way, meaning scripts that touch model objects and nothing else; anything reaching for files, the network or an external assembly is still handed to you for review. Each run lands as a single undo step. +**Allow AI assistant to run C# scripts directly** (disabled): Let the assistant carry out the model change you asked for, instead of writing a script and opening it for you to run. Only scripts the safety analysis considers safe are run this way, meaning scripts that touch model objects and nothing else; anything reaching for files, the network or an external assembly is still handed to you for review. Each run lands as a single undo step. This setting is unavailable until **Model metadata** is set to **Write** on the [Permissions](#ai-features--permissions) page, and it becomes available as soon as you change that dropdown, without closing the dialog. It is also unavailable, with a tooltip saying so, where an administrator has set the `DisableCSharpScripts` [policy](xref:policies). It is off by default deliberately: **Model metadata > Write** is also what an agent needs over the MCP server, and granting it there must not silently change what the chat does. See [Letting the assistant change your model](xref:ai-assistant#letting-the-assistant-change-your-model). -##### *Preview changes* (enabled) - -Show the script preview dialog before a change the assistant made stands, so you can see every model metadata change and accept or cancel it. Cancelling puts the model back and tells the assistant you rejected the change. +**Preview changes** (enabled): Show the script preview dialog before a change the assistant made stands, so you can see every model metadata change and accept or cancel it. Cancelling puts the model back and tells the assistant you rejected the change. ## AI Features > MCP Server @@ -546,21 +380,13 @@ Settings for the [MCP server](xref:mcp-server), which lets an external agent suc ![MCP Server preferences](~/content/assets/images/pref-mcp-server.png) -##### *Enable MCP Server* (enabled) - -Whether the MCP server is available at all. Clearing it stops a running server and removes both the **Tools > MCP Server...** menu item and the status bar indicator. - -##### *Start MCP server automatically* (disabled) - -Start the server when Tabular Editor starts, so an agent can connect without you starting it by hand. If the port is in use at start-up, the server does not start and no prompt is shown. - -##### *Require access token* (disabled) +**Enable MCP Server** (enabled): Whether the MCP server is available at all. Clearing it stops a running server and removes both the **Tools > MCP Server...** menu item and the status bar indicator. -Make agents present a bearer token, shown in the **Tools > MCP Server...** dialog. The server listens on the loopback interface only, so this matters most on a machine where several people are signed in at once, such as a Remote Desktop or Citrix host, where every session can reach `127.0.0.1`. Administrators can enforce it with the `RequireMcpAccessToken` [policy](xref:policies). +**Start MCP server automatically** (disabled): Start the server when Tabular Editor starts, so an agent can connect without you starting it by hand. If the port is in use at start-up, the server does not start and no prompt is shown. -##### *Port* (42100) +**Require access token** (disabled): Make agents present a bearer token, shown in the **Tools > MCP Server...** dialog. The server listens on the loopback interface only, so this matters most on a machine where several people are signed in at once, such as a Remote Desktop or Citrix host, where every session can reach `127.0.0.1`. Administrators can enforce it with the `RequireMcpAccessToken` [policy](xref:policies). -The loopback port the server listens on, from 1024 to 49151. Changing it invalidates existing agent registrations, which point at a fixed address. If the port is taken when you start the server by hand, Tabular Editor offers the next free port it finds. +**Port** (42100): The loopback port the server listens on, from 1024 to 49151. Changing it invalidates existing agent registrations, which point at a fixed address. If the port is taken when you start the server by hand, Tabular Editor offers the next free port it finds. ## AI Features > Permissions @@ -576,10 +402,12 @@ One standing grant per resource, governing both the AI Assistant chat and any ag | **Documents** | Deny / Read / Write | Write | Your open C# script and DAX query tabs. Read is their contents; Write creates or modifies them | | **Macros** | Deny / Read / Write | Write | Your macro library | -**Write** covers Read, so there is no need to grant both. **Model data** is the one resource denied by default, because metadata describes your model while data *is* its contents. +**Write** covers Read, so there is no need to grant both. **Model data** is the one resource denied by default. In the Enterprise, Consultancy and Trial editions an administrator can cap any of these by [policy](xref:policies), separately for the chat and for the MCP server. A capped dropdown is shown read-only. See @ai-assistant for how the chat asks for what a grant does not cover, and @mcp-server for what an agent sees. + + ## Tabular Editor > Miscellaneous ![Miscellaneous preferences](~/content/assets/images/pref-miscellaneous.png) @@ -588,100 +416,103 @@ In the Enterprise, Consultancy and Trial editions an administrator can cap any o These settings control how Tabular Editor 3 deals with model metadata that changes outside the application. The first three cover a model loaded from a database on an instance of Analysis Services and rely on an Analysis Services trace. **Automatically reload from disk** covers a model loaded from a file or a folder, and watches those files directly. -##### *Warn when local metadata is out-of-sync with deployed model* (enabled) +**Warn when local metadata is out-of-sync with deployed model** (enabled): When checked, an information bar is displayed inside Tabular Editor, whenever you have made local changes to the model that have not yet been saved to Analysis Services. The bar disappears when you save (**Ctrl+S**). -When checked, an information bar is displayed inside Tabular Editor, whenever you have made local changes to the model that have not yet been saved to Analysis Services. For example, if you're wondering why a DAX query or a Pivot Grid does not produce the expected result, this could be due to a measure expression being changed in Tabular Editor without saving the change to Analysis Services. The bar disappears when you hit save (Ctrl+S). +**Track external model changes** (enabled): Just like Power BI Desktop can detect when an external tool makes a change to the data model, so too can Tabular Editor. This option is only relevant for local instances of Analysis Services (i.e. msmdsrv.exe processes running on the same machine as Tabular Editor). When checked, Tabular Editor starts a trace on Analysis Services and notifies you if external changes are made. -##### *Track external model changes* (enabled) +**Refresh local Tabular Object Model metadata automatically** (enabled): When the tracing mechanism as described above is enabled, this option allows Tabular Editor to automatically refresh the model metadata when an external change is detected. This is useful if you often switch back and forth between Power BI Desktop and Tabular Editor 3. -Just like Power BI Desktop can detect when an external tool makes a change to the data model, so too can Tabular Editor. This option is only relevant for local instances of Analysis Services (i.e. msmdsrv.exe processes running on the same machine as Tabular Editor). When checked, Tabular Editor starts a trace on Analysis Services and notifies you if external changes are made. +**Automatically reload from disk** (enabled): When checked, Tabular Editor watches the metadata files the model was loaded from and reloads the model when another application changes them. Unlike the two settings above, this doesn't involve an Analysis Services trace: it watches the files themselves, so it covers a model loaded from a `.bim` file or from a folder, whether or not a server is involved. If the model has unsaved changes, Tabular Editor asks you which copy to keep. See [Auto-reload from disk](xref:auto-reload). -##### *Refresh local Tabular Object Model metadata automatically* (enabled) +**Cleanup orphaned Tabular Editor traces**: Removes every Analysis Services trace started by any instance of Tabular Editor. Use it when traces remain after Tabular Editor 3 closed unexpectedly. -When the tracing mechanism as described above is enabled, this option allows Tabular Editor to automatically refresh the model metadata when an external change is detected. This is useful if you often switch back and forth between Power BI Desktop and Tabular Editor 3. +> [!NOTE] +> The cleanup button is only available when Tabular Editor is connected to an instance of Analysis Services. -##### *Automatically reload from disk* (enabled) +## Model Deployment > General -When checked, Tabular Editor watches the metadata files the model was loaded from and reloads the model when another application changes them. Unlike the two settings above, this doesn't involve an Analysis Services trace: it watches the files themselves, so it covers a model loaded from a `.bim` file or from a folder, whether or not a server is involved. If the model has unsaved changes, Tabular Editor asks you which copy to keep. See [Auto-reload from disk](xref:auto-reload). +![Model Deployment preferences](~/content/assets/images/pref-model-deployment.png) -##### *Cleanup orphaned Tabular Editor traces* +### Deployment Options -Normally, Tabular Editor 3 should automatically stop and remove any AS traces started due to the settings above. However, if the application was shut down prematurely, the traces may never be stopped. By clicking this button, all AS traces started by any instance of Tabular Editor will be removed. +**Add metadata annotation upon deployment** (disabled): Adds deployment details to the deployed model: the user, the client machine, the time, the Tabular Editor build and the deployment mode. -> [!NOTE] -> The cleanup button is only available when Tabular Editor is connected to an instance of Analysis Services. +**Save Model.bim backup on deployment** (enabled): Saves a compressed copy of the model's `Model.bim` to the **Backup location** folder on every deployment. No backup is saved while **Backup location** is empty. + +**Backup location**: The folder for deployment backups. Available when **Save Model.bim backup on deployment** is selected. + +### Model Saving Options + +**Save Model.bim backup on model save** (enabled): Saves a compressed copy of the model's `Model.bim` to the **Backup location** folder every time you save the model. No backup is saved while **Backup location** is empty. + +**Backup location**: The folder for save backups. Available when **Save Model.bim backup on model save** is selected. + +## Model Deployment > Data Refresh + +### Direct Lake + +**Auto-refresh when saving new tables** (enabled): Refreshes a Direct Lake model when you save it with new tables. If you clear it, new tables stay unprocessed until you refresh the model, and queries against them fall back to DirectQuery mode. ## Data Browsing > Pivot Grid + ![Pivot Grid preferences](~/content/assets/images/pref-pivot-grid.png) ### Basic -##### *Auto-refresh pivot grid* (enabled) - -Automatically refresh pivot grids when model changes are saved. Just like with DAX queries, this allows you to immediately see the impact of changes to measures. +**Automatically refresh Pivot Grids by default** (enabled): Automatically refresh pivot grids when model changes are saved. Just like with DAX queries, this allows you to immediately see the impact of changes to measures. -##### *Warn if pivot grid fields mismatch* (enabled) - -Show a warning when pivot grid field definitions don't match the current model. This can happen if you've deleted or renamed fields used in a saved pivot grid. +**Show warning if Pivot Grid doesn't match model** (enabled): Show a warning when a Pivot Grid layout uses fields that the current model doesn't have, for example after you delete or rename a field, open a layout saved from a different model or keep a Pivot Grid open while you open a different model. The setting also controls the confirmation that appears before a different model opens while Pivot Grids with fields in their layout are kept open. ### Field Headers -##### *Pivot header word wrap* (enabled) - -Enable word wrapping in pivot grid headers. This makes long field names more readable. +**Word wrap field headers** (enabled): Field headers wrap to multiple lines when the header text doesn't fit on one line. ### Field List -##### *Always show pivot grid field list* (enabled) +**Always show field list** (enabled): Shows the field list when a new Pivot Grid is created. -Keep the pivot grid field list visible by default. Disable this if you prefer more screen space for the pivot grid itself. +**Keep fields visible** (enabled): Keeps a field in the Fields section of the field list after you add it to the Pivot Grid. -##### *Show all fields in pivot customization* (enabled) +**Layout** (Fields Section and Areas Section Stacked): The default layout of the field list: -Display all available fields in the pivot grid field list by default, including hidden fields. +- **Fields Section and Areas Section Stacked** +- **Fields Section and Areas Section Side-By-Side** +- **Fields Section Only** +- **Areas Section Only (2 by 2)** +- **Areas Section Only (1 by 4)** -##### *Pivot grid customization default layout* (StackedDefault) +### Keep documents open when switching models -Choose the default layout for the pivot grid field list. Options include: -- **StackedDefault**: Fields and areas in a single stacked panel -- **StackedSideBySide**: Fields and areas in side-by-side panels -- **TopPanelOnly**: Field list at the top only -- **BottomPanelOnly2by2**: Field list in a 2x2 grid at the bottom -- **BottomPanelOnly1by4**: Field list in a 1x4 layout at the bottom +**Keep Pivot Grids open when a different model is opened** (enabled): Keep Pivot Grid documents open when you open a different model, and connect them to the new model. The field layout is kept, and fields that the new model doesn't have are dropped from it. When disabled, Pivot Grids close along with the previous model. See @pivot-grid. ## Data Browsing > DAX Query + ![DAX Query preferences](~/content/assets/images/pref-dax-query.png) ### Basic -##### *Automatically execute DAX queries by default* (enabled) - -New DAX queries open with **Auto-execute** enabled, so the query re-runs whenever changes are made to the deployed semantic model. Turn it off if you would rather execute each query yourself. +**Automatically execute DAX queries by default** (enabled): New DAX queries open with **Auto-execute** enabled, so the query re-runs whenever changes are made to the deployed semantic model. Turn it off if you would rather execute each query yourself. -##### *Keep existing sorting and filtering in the result grid* (WhenQueryUnchanged) - -Control whether to preserve grid filters and sorting when re-executing queries: +**Keep existing sorting and filtering in the result grid** (WhenQueryUnchanged): Control whether to preserve grid filters and sorting when re-executing queries: - **Never**: sorting and filtering are always reset when a query is executed - **WhenQueryUnchanged**: sorting and filtering are reset only when the query is modified - **Always**: sorting and filtering are never reset if the columns still exist ### Query settings -##### *Smart selection* (enabled) - -When you execute part of a query, Tabular Editor turns that selection into a valid DAX query on your behalf, wrapping a scalar expression in curly braces and adding the `DEFINE` section or the `EVALUATE` keyword when they are not part of the selection. - -##### *Row limit* (1,000) +**Smart selection** (enabled): When you execute part of a query, Tabular Editor turns that selection into a valid DAX query on your behalf, wrapping a scalar expression in curly braces and adding the `DEFINE` section or the `EVALUATE` keyword when they are not part of the selection. In a document with several `DEFINE ... EVALUATE` queries, the added `DEFINE` section is the one that belongs to the selected query. A selected column reference, including one in an `ORDER BY` clause, returns the column's distinct values. -Wraps every `EVALUATE` statement in a `TOPN` call, to keep an accidental query over a large table from running for a long time or exhausting memory. Set it to `0` to remove the limit entirely. +**Row limit** (1,000): Wraps every `EVALUATE` statement in a `TOPN` call, to keep an accidental query over a large table from running for a long time or exhausting memory. Set it to `0` to remove the limit entirely. ### Code Generation -##### *Use comments as separators* (enabled) +**Use comments as separators** (enabled): Insert comments into generated object definitions, for example the `DEFINE` block produced by **Define object in query**, to make them easier to read. -Insert comments into generated object definitions, for example the `DEFINE` block produced by **Define object in query**, to make them easier to read. +### Keep documents open when switching models + +**Keep DAX Queries open when a different model is opened** (enabled): Keep DAX Query documents open when you open a different model. The query text is kept, previous results are cleared and the query runs against the newly opened model. When disabled, DAX Query documents close along with the previous model. See @dax-query. ## Data Browsing > Table Preview @@ -689,109 +520,69 @@ Insert comments into generated object definitions, for example the `DEFINE` bloc ### Basic -##### *Automatically refresh table previews by default* (enabled) - -New table previews open with **Auto-refresh** enabled, so the preview refreshes whenever changes are made to the deployed semantic model. This is useful when debugging: update an expression in one window while a preview of the same table is open in another. - -##### *Sort table preview columns alphabetically* (disabled) +**Automatically refresh table previews by default** (enabled): New table previews open with **Auto-refresh** enabled, so the preview refreshes whenever changes are made to the deployed semantic model. This is useful when debugging: update an expression in one window while a preview of the same table is open in another. -When checked, table preview columns are sorted alphabetically by name, matching the order the @tom-explorer-view lists a table's columns in. When unchecked (the default), columns appear in the order the engine returns them, which is roughly internal column order and can look arbitrary. +**Sort table preview columns alphabetically** (disabled): When checked, table preview columns are sorted alphabetically by name, matching the order the @tom-explorer-view lists a table's columns in. When unchecked (the default), columns appear in the order the engine returns them, which is roughly internal column order and can look arbitrary. -##### *Max. values in filter dropdown* (5,000) +**Max. values in filter dropdown** (5,000): Maximum number of distinct values listed in a column's filter dropdown. On a column with more distinct values than this, the values beyond the limit are not listed and cannot be ticked directly. Raising it lists more values at the cost of a heavier query each time the dropdown is opened. Accepts 100 to 1,000,000. -Maximum number of distinct values listed in a column's filter dropdown. On a column with more distinct values than this, the values beyond the limit are not listed and cannot be ticked directly. Raising it lists more values at the cost of a heavier query each time the dropdown is opened. Accepts 100 to 1,000,000. - -##### *Max. rows to sort without an attribute hierarchy* (100,000) - -Upper bound on the number of rows Tabular Editor sorts by a column that has no attribute hierarchy to sort on. +**Max. rows to sort without an attribute hierarchy** (100,000): Upper bound on the number of rows Tabular Editor sorts by a column that has no attribute hierarchy to sort on. ### DirectQuery -##### *Row limit* (100) - -Maximum number of rows to retrieve for a table preview in DirectQuery mode. Raise it if you need to see more data, bearing in mind that every row is fetched from the underlying source. +**Row limit** (100): Maximum number of rows to retrieve for a table preview in DirectQuery mode. Raise it if you need to see more data, bearing in mind that every row is fetched from the underlying source. ### Behavior -##### *Track selected column in TOM Explorer* (enabled) +**Track selected column in TOM Explorer** (enabled): When you select a column in the @tom-explorer-view, the open table preview scrolls that column into view and highlights it, which is the quickest way to find one column of a very wide table. The same setting can be turned on and off for a single preview with **Track selected column** on the Table Preview toolbar. -When you select a column in the @tom-explorer-view, the open table preview scrolls that column into view and highlights it, which is the quickest way to find one column of a very wide table. The same setting can be turned on and off for a single preview with **Track selected column** on the Table Preview toolbar. - -## DAX Editor > General +## Text Editors > DAX Editor > General ![Dax Editor General](~/content/assets/images/dax-editor-general.png) Tabular Editor 3's DAX editor is highly configurable. This page provides settings for general configuration of the DAX editor: -##### *Line numbers* (enabled) - -Display line numbers in the left margin of the editor. - -##### *Code folding* (enabled) +**Line numbers** (enabled): Display line numbers in the left margin of the editor. -Enable collapsible regions in DAX code for better readability. Make sure you try out this feature! +**Code folding** (enabled): Enable collapsible regions in DAX code for better readability. Make sure you try out this feature! -##### *Visible whitespace* (disabled) +**Visible whitespace** (disabled): Show dots for spaces and arrows for tabs. This can be helpful when diagnosing indentation issues. -Show dots for spaces and arrows for tabs. This can be helpful when diagnosing indentation issues. +**Indentation guides** (enabled): Display vertical lines to show indentation levels. -##### *Indentation guides* (enabled) +**Use tabs** (disabled): When checked, a tab character (`\t`) is inserted whenever the TAB button is hit. Otherwise, a number of spaces corresponding to the **Indent width** setting is inserted. -Display vertical lines to show indentation levels. +**Comment style** (slashes): DAX supports line comments that use slashes (`//`) or hyphens (`--`). This setting determines which style of comment is used when Tabular Editor 3 generates DAX code. -##### *Use tabs* (disabled) - -When checked, a tab character (`\t`) is inserted whenever the TAB button is hit. Otherwise, a number of spaces corresponding to the *Indent width* setting is inserted. - -##### *Comment style* (slashes) - -DAX supports line comments that use slashes (`//`) or hyphens (`--`). This setting determines which style of comment is used when Tabular Editor 3 generates DAX code. - -##### *DAX function documentation* - -Use this setting to specify which URL to launch in the default web browser, whenever you hit F12 while the cursor is on a DAX function. Options include https://dax.guide (recommended) and Microsoft's official documentation. +**DAX function documentation**: Use this setting to specify which URL to launch in the default web browser, whenever you hit F12 while the cursor is on a DAX function. Options include https://dax.guide (recommended) and Microsoft's official documentation. ### DAX Settings -##### *Locale* - -Specify the locale for DAX functions and formatting. - -##### *Analysis Services version settings* +**Locale**: Specify the locale for DAX functions and formatting. -These settings are relevant only when Tabular Editor 3 cannot determine the version of Analysis Services used, as is the case when a Model.bim file is loaded directly. In this case, Tabular Editor tries to guess which version the model will be deployed to, based on the compatibility level. If Tabular Editor reports incorrect semantic/syntax errors, you may need to tweak these settings. +**Analysis Services version settings**: These settings are relevant only when Tabular Editor 3 cannot determine the version of Analysis Services used, as is the case when a Model.bim file is loaded directly. In this case, Tabular Editor tries to guess which version the model will be deployed to, based on the compatibility level. If Tabular Editor reports incorrect semantic or syntax errors, set these to the Analysis Services version you deploy to. -## DAX Editor > Auto Formatting +## Text Editors > DAX Editor > Auto Formatting ![Auto Formatting Settings](~/content/assets/images/auto-formatting-settings.png) The DAX Editor is **very** powerful and helps you produce beautiful, readable DAX code as you type. -##### *Auto format code as you type* (enabled) +**Auto format code as you type** (enabled): Applies formatting rules when certain keys are pressed. For example, when a parenthesis is closed, everything within the parentheses is formatted according to the other settings on this page. -This option will automatically apply certain formatting rules whenever certain keystrokes occur. For example, when a parenthesis is closed, this feature will ensure that everything within the parentheses is formatted according to the other settings on this page. +**Auto-format function calls** (enabled): Formats function calls (spacing between arguments and parentheses) when a parenthesis is closed. -##### *Auto-format function calls* (enabled) +**Auto-indent** (enabled): This option automatically indents function arguments when a line break is inserted within a function call. -This option specifically controls whether automatic formatting of function calls (spacing between arguments and parentheses) should happen when a parenthesis is closed. +**Auto-brace** (enabled): This option automatically inserts the closing brace or quote whenever an opening brace or quote is entered. -##### *Auto-indent* (enabled) - -This option automatically indents function arguments when a line break is inserted within a function call. - -##### *Auto-brace* (enabled) - -This option automatically inserts the closing brace or quote whenever an opening brace or quote is entered. - -##### *Wrap selection* (enabled) - -When enabled, this option automatically wraps the current selection with the closing brace, when an opening brace is entered. +**Wrap selection** (enabled): When enabled, this option automatically wraps the current selection with the closing brace, when an opening brace is entered. ### Formatting Rules These settings control how DAX code whitespace is formatted, both when auto-formatting occurs and when code is manually formatted. -##### *Space after functions* (disabled) +**Space after functions** (disabled) # [Enabled](#tab/space-after-function-on) @@ -807,9 +598,7 @@ SUM( 'Sales'[Amount] ) *** -##### *Newline after functions* (disabled) - -Applies only when a function call needs to be broken across multiple lines. +**Newline after functions** (disabled): Applies only when a function call needs to be broken across multiple lines. # [Enabled](#tab/newline-after-function-on) @@ -830,7 +619,7 @@ SUM( *** -##### *Pad parentheses* (enabled) +**Pad parentheses** (enabled) # [Enabled](#tab/pad-parentheses-on) @@ -846,89 +635,55 @@ SUM(Sales[Amount]) *** -##### *Long format line limit* (120) +**Long format line limit** (120): The maximal number of characters to keep on a single line before an expression is broken across multiple lines, when using the **Format DAX (long lines)** option. -The maximal number of characters to keep on a single line before an expression is broken across multiple lines, when using the **Format DAX (long lines)** option. - -##### *Short format line limit* (60) - -The maximal number of characters to keep on a single line before an expression is broken across multiple lines, when using the **Format DAX (short lines)** option. +**Short format line limit** (60): The maximal number of characters to keep on a single line before an expression is broken across multiple lines, when using the **Format DAX (short lines)** option. ### Casings and Quotes In addition to formatting the DAX code whitespace, Tabular Editor 3 can also fix object references and function/keyword casings. -##### *Fix measure/column qualifiers* (enabled) - -When checked, table prefixes are automatically removed from measure references, and automatically inserted on column references. - -##### *Preferred keyword casing* (UPPER) - -This setting allows you to change the casing used for keywords, such as `ORDER BY`, `VAR`, `EVALUATE`, etc. It also governs the fixed keyword *values* auto-complete offers for functions that take them: `ASC` and `DESC`, `KEEP`, `FIRST`, `LAST` and `DEFAULT`, the `CROSSFILTER` directions and `LOOKUP`'s `EXPLICIT` and `INFERRED`. Choose **Capitalize first letter only** to be offered `Explicit` rather than `EXPLICIT`. - -##### *Preferred function casing* (UPPER) - -This setting allows you to change the casing used for functions, such as `CALCULATE(...)`, `SUM(...)`, etc. +**Fix measure/column qualifiers** (enabled): When checked, table prefixes are automatically removed from measure references, and automatically inserted on column references. -##### *Fix keyword/function casing* (enabled) +**Preferred keyword casing** (UPPER): This setting allows you to change the casing used for keywords, such as `ORDER BY`, `VAR`, `EVALUATE`, etc. It also governs the fixed keyword values auto-complete offers for functions that take them: `ASC` and `DESC`, `KEEP`, `FIRST`, `LAST` and `DEFAULT`, the `CROSSFILTER` directions and `LOOKUP`'s `EXPLICIT` and `INFERRED`. Choose **Capitalize first letter only** to be offered `Explicit` rather than `EXPLICIT`. -When checked, casing of keywords and functions is automatically corrected whenever code is auto-formatted or manually formatted. +**Preferred function casing** (UPPER): This setting allows you to change the casing used for functions, such as `CALCULATE(...)`, `SUM(...)`, etc. -##### *Fix object reference casing* (enabled) +**Fix keyword/function casing** (enabled): When checked, casing of keywords and functions is automatically corrected whenever code is auto-formatted or manually formatted. -DAX is a case-insensitive language. When this is enabled, references to tables, columns and measures are automatically corrected such that the casing matches the physical name of the referenced objects. +**Fix object reference casing** (enabled): DAX is a case-insensitive language. When this is enabled, references to tables, columns and measures are automatically corrected such that the casing matches the physical name of the referenced objects. -##### *Always quote tables* (disabled) +**Always quote tables** (disabled): Referencing certain table names do not require surrounding single quotes in DAX. However, if you prefer table references to always be quoted, you can check this option. -Referencing certain table names do not require surrounding single quotes in DAX. However, if you prefer table references to always be quoted, you can check this option. +**Always prefix extension columns** (disabled): Extension columns can be defined without a table name. When checked, the DAX editor adds the table prefix to an extension column. -##### *Always prefix extension columns* (disabled) - -Extension columns can be defined without a table name. When checked, the DAX editor will always add the table prefix to an extension column. - -## DAX Editor > Code Assist +## Text Editors > DAX Editor > Code Assist ![DAX Editor Code Assist preferences](~/content/assets/images/pref-dax-code-assist.png) On this page, you can configure the two most important Code Assist features, namely calltips (aka. "parameter info") and auto-complete. -##### *Auto-complete trigger* - -Control when the auto-complete list appears. Options include automatic triggering after typing a certain number of characters, or manual triggering with CTRL+Space. - -##### *Calltip trigger* - -Control when parameter information appears. Options include automatic triggering when opening a function parenthesis, or manual triggering. - -##### *Incremental search* (enabled) +**Auto-complete trigger**: Control when the auto-complete list appears. Options include automatic triggering after typing a certain number of characters, or manual triggering with CTRL+Space. -Enable fuzzy/incremental searching in auto-complete. This allows you to find items by typing parts of their name, not just the beginning. +**Calltip trigger**: Control when parameter information appears. Options include automatic triggering when opening a function parenthesis, or manual triggering. -##### *Suggest table names* (enabled) +**Incremental search** (enabled): Enable fuzzy/incremental searching in auto-complete. This allows you to find items by typing parts of their name, not just the beginning. -Include table names in auto-complete suggestions. +**Suggest table names** (enabled): Include table names in auto-complete suggestions. -##### *Always quote table names* (disabled) +**Always quote table names** (disabled): Automatically quote table names in suggestions, even when not required. -Automatically quote table names in suggestions, even when not required. +**Show first letter only** (disabled): Only show items starting with the typed letter. Disable this to use incremental search instead. -##### *Show first letter only* (disabled) - -Only show items starting with the typed letter. Disable this to use incremental search instead. - -## DAX Editor > Code Actions +## Text Editors > DAX Editor > Code Actions ![DAX Editor Code Actions preferences](~/content/assets/images/pref-dax-code-actions.png) Configure automatic code improvement suggestions: -##### *Variable prefixes* - -Define acceptable prefixes for variable names (e.g., `_`, `__`, `$`, `var_`, `var`, `v_`, `v`, `VAR_`). Code actions will suggest adding these prefixes to variable names that don't follow the convention. - -##### *Column prefixes* +**Variable prefixes**: Define acceptable prefixes for variable names (e.g., `_`, `__`, `$`, `var_`, `var`, `v_`, `v`, `VAR_`). Code actions suggest adding these prefixes to variable names that don't follow the convention. -Define acceptable prefixes for temporary column names (e.g., `@`, `$`, `_`, `x`, `x_`). Code actions will suggest adding these prefixes to temporary column names that don't follow the convention. +**Column prefixes**: Define acceptable prefixes for temporary column names (e.g., `@`, `$`, `_`, `x`, `x_`). Code actions suggest adding these prefixes to temporary column names that don't follow the convention. ## SQL Editor / M Editor / C# Editor @@ -951,13 +706,9 @@ Each editor can be customized independently to match your preferred coding style The DAX Formatter preferences page at its default settings. Alt text: "The DAX Formatter preferences page" --> -##### *DAX formatter consent* (disabled) +**DAX formatter consent** (disabled): Agree to send DAX code to the external DAX formatting service (www.daxformatter.com). When enabled, you can use this service to format DAX code according to community standards. -Agree to send DAX code to the external DAX formatting service (www.daxformatter.com). When enabled, you can use this service to format DAX code according to community standards. - -##### *DAX formatter request timeout* (5000) - -Timeout in milliseconds for DAX formatter requests. Increase this if you frequently get timeout errors when using the DAX formatter. +**DAX formatter request timeout** (5000): Timeout in milliseconds for DAX formatter requests. Increase this if you frequently get timeout errors when using the DAX formatter. ## DAX Optimizer Integration @@ -967,98 +718,60 @@ Timeout in milliseconds for DAX formatter requests. Increase this if you frequen Configure integration with DAX Optimizer (Enterprise Edition only): -##### *Connect automatically* (null/prompt) - -Automatically connect to DAX Optimizer when available. When not set, you will be prompted the first time. +**Connect automatically** (null/prompt): Automatically connect to DAX Optimizer when available. When not set, a prompt appears the first time. -##### *Obfuscate VPAX files* (enabled) +**Obfuscate VPAX files** (enabled): Anonymize model metadata when sending to DAX Optimizer. This protects sensitive information like table and column names while still allowing analysis. -Anonymize model metadata when sending to DAX Optimizer. This protects sensitive information like table and column names while still allowing analysis. +**Obfuscation dictionary directory** (`%LocalAppData%\TabularEditor3\DaxOptimizer`): Specify where obfuscation dictionaries are stored. The dictionary maintains consistent obfuscation across multiple analyses. -##### *Obfuscation dictionary directory* (`%LocalAppData%\TabularEditor3\DaxOptimizer`) - -Specify where obfuscation dictionaries are stored. The dictionary maintains consistent obfuscation across multiple analyses. - -## VertiPaq Analyzer +## File Formats > VertiPaq Analyzer ![VertiPaq Analyzer preferences](~/content/assets/images/pref-vertipaq-analyzer.png) -##### *Include TOM metadata* (enabled) - -Include Tabular Object Model metadata in VertiPaq Analyzer statistics. This provides richer information about your model structure. +**Include TOM metadata** (enabled): Include Tabular Object Model metadata in VertiPaq Analyzer statistics. This provides richer information about your model structure. -##### *Read stats from data* (enabled) +**Read statistics from data** (enabled): Read statistics by scanning actual data (more accurate but slower). When disabled, only metadata is used. If reading statistics from data fails, for example when a high-cardinality column exceeds a Power BI capacity's per-query memory limit, **Collect Stats** collects the statistics from metadata and a **Stats collected without reading data** warning appears. -Read statistics by scanning actual data (more accurate but slower). When disabled, only metadata is used. - -##### *Direct Lake extraction mode* (ResidentOnly) - -How to extract statistics from Direct Lake models: +**Direct Lake extraction mode** (ResidentOnly): How to extract statistics from Direct Lake models: - **ResidentOnly**: Only analyze data currently loaded in memory - **All**: Include non-resident data (slower, may trigger data loading) -##### *Read stats from Dynamic Management Views* (disabled) - -Use DMVs to gather statistics (faster but less accurate). This is an alternative to reading from data. +**Read stats from Dynamic Management Views** (disabled): Use DMVs to gather statistics (faster but less accurate). This is an alternative to reading from data. -##### *Relationship sample rows* (3) +**Relationship sample rows** (3): Number of rows to sample when analyzing relationships. Higher values provide more accuracy but take longer. -Number of rows to sample when analyzing relationships. Higher values provide more accuracy but take longer. - -##### *Column batch size* (50) - -Number of columns to analyze in each batch. Adjust this based on your model size and performance requirements. +**Column batch size** (50): Number of columns to analyze in each batch. Adjust this based on your model size and performance requirements. ## Power BI Integration ![Power BI Integration preferences](~/content/assets/images/pref-power-bi.png) -##### *Power BI endpoint base URL* (`https://api.powerbi.com`) - -The base URL for Power BI API calls. Change this if you're working with a sovereign cloud or custom environment. +**Power BI endpoint base URL** (`https://api.powerbi.com`): The base URL for Power BI API calls. Change this if you're working with a sovereign cloud or custom environment. -##### *Fabric endpoint base URL* (`https://api.fabric.microsoft.com`) +**Fabric endpoint base URL** (`https://api.fabric.microsoft.com`): The base URL for Microsoft Fabric API calls. Change this if you're working with a sovereign cloud or custom environment. -The base URL for Microsoft Fabric API calls. Change this if you're working with a sovereign cloud or custom environment. - -##### *Use embedded browser for authentication* (enabled) - -Use the embedded browser for OAuth authentication instead of the system browser. This provides a more integrated experience. +**Use embedded browser for authentication** (enabled): Use the embedded browser for OAuth authentication instead of the system browser. This provides a more integrated experience. ## Proxy Settings ![Proxy Settings preferences](~/content/assets/images/pref-proxy-settings.png) -##### *Proxy type* (None) - -Choose between: +**Proxy type** (None): Choose between: - **None**: No proxy configuration - **System**: Use system proxy settings - **Custom**: Specify custom proxy configuration -##### *Proxy address* - -The address of the proxy server (e.g., `http://proxy.company.com:8080`). - -##### *Proxy user* - -Username for proxy authentication if required. - -##### *Proxy password* - -Password for proxy authentication (stored encrypted). - -##### *Use default credentials* (enabled) +**Proxy address**: The address of the proxy server (e.g., `http://proxy.company.com:8080`). -Use the current Windows credentials for proxy authentication. This implements the [same behavior as Power BI Desktop](https://docs.microsoft.com/power-bi/connect-data/desktop-troubleshooting-sign-in#using-default-system-credentials-for-web-proxy). +**Proxy user**: Username for proxy authentication if required. -##### *Bypass proxy on local* (enabled) +**Proxy password**: Password for proxy authentication (stored encrypted). -Bypass the proxy for local addresses. This is recommended for performance. +**Use default credentials** (enabled): Use the current Windows credentials for proxy authentication. This implements the [same behavior as Power BI Desktop](https://docs.microsoft.com/power-bi/connect-data/desktop-troubleshooting-sign-in#using-default-system-credentials-for-web-proxy). -##### *Proxy bypass list* +**Bypass proxy on local** (enabled): Bypass the proxy for local addresses. This is recommended for performance. -List of addresses that should bypass the proxy (e.g., `localhost;*.company.local`). +**Proxy bypass list**: List of addresses that should bypass the proxy (e.g., `localhost;*.company.local`). ## Next Steps diff --git a/content/references/release-history.md b/content/references/release-history.md index dcf1babb5..c081f42cf 100644 --- a/content/references/release-history.md +++ b/content/references/release-history.md @@ -1,9 +1,17 @@ --- uid: release-history title: Full release history +updated: 2026-10-11 --- # Full release history +- 2026-10-15 **Tabular Editor 3.27.1.0** (*[Release notes](release-notes/3_27_1_0.md)*) + - .NET 10 installer (.exe): [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.x64.Net10.exe), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.ARM64.Net10.exe) + - .NET 10 portable (.zip): [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net10.zip), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net10.zip) + - .NET 10 installer (.msi): [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net10.msi), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net10.msi) + - .NET 8 installer (.exe): [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.x64.Net8.exe), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.ARM64.Net8.exe) + - .NET 8 portable (.zip): [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net8.zip), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net8.zip) + - .NET 8 installer (.msi): [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net8.msi), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net8.msi) - 2026-09-22 **Tabular Editor 3.27.0.0** (*[Release notes](release-notes/3_27_0_0.md)*) - .NET 10 installer (.exe): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.Installer.x64.Net10.exe), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.Installer.ARM64.Net10.exe) - .NET 10 portable (.zip): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.x64.Net10.zip), [ARM64](https://cdn.tabulareditor.com/files/TabularEditor.3.27.0.0.ARM64.Net10.zip) diff --git a/content/references/release-notes/3_27_1_0.md b/content/references/release-notes/3_27_1_0.md new file mode 100644 index 000000000..a8d1d2d5f --- /dev/null +++ b/content/references/release-notes/3_27_1_0.md @@ -0,0 +1,110 @@ +--- +uid: release-3-27-1-0 +--- +# Tabular Editor 3.27.1.0 + +# [**Downloads**](#tab/downloads) + +Tabular Editor 3.27.1.0 downloads: + +**On .NET 10** (recommended for most users): + +- Download [Tabular Editor 3.27.1.0 (x64)](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.x64.Net10.exe) *(recommended)* +- Download [Tabular Editor 3.27.1.0 (ARM64)](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.ARM64.Net10.exe) +- Portable versions: [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net10.zip), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net10.zip) +- MSI version: [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net10.msi), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net10.msi) + +**On .NET 8** (for machines that cannot yet run the .NET 10 desktop runtime): + +- Download [Tabular Editor 3.27.1.0 (x64)](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.x64.Net8.exe) +- Download [Tabular Editor 3.27.1.0 (ARM64)](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.ARM64.Net8.exe) +- Portable versions: [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net8.zip), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net8.zip) +- MSI version: [x64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net8.msi), [ARM64](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net8.msi) + +*If you haven't used Tabular Editor 3 before, you are eligible for a 30-day trial, which can be activated after installation. You can also [purchase a license](https://tabulareditor.com/licensing).* + +# [**SHA-256 checksums**](#tab/checksums) + +| File | .NET runtime | Platform | SHA-256 | +| -- | -- | -- | -- | +| [TabularEditor.3.27.1.0.Installer.x64.Net10.exe](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.x64.Net10.exe) | .NET 10 | x64 | `57171F0B45F6F700E09A9140480A753134A94993DC9F74629B7CBD42D2C09272` | +| [TabularEditor.3.27.1.0.x64.Net10.msi](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net10.msi) | .NET 10 | x64 | `8A3948B1E85EA331ACF151FDEA2C47FEFEFB28E377A7248A785AF760B706B1D7` | +| [TabularEditor.3.27.1.0.x64.Net10.zip](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net10.zip) | .NET 10 | x64 | `7761B99F117A87A38204D984C52F26A95B740B39720044ABA805F123D9BBB0CF` | +| [TabularEditor.3.27.1.0.Installer.ARM64.Net10.exe](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.ARM64.Net10.exe) | .NET 10 | ARM64 | `90A0DA17220255D81EFE80B8381FCB14E447BF5569ED53DDF11AE732A6055746` | +| [TabularEditor.3.27.1.0.ARM64.Net10.msi](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net10.msi) | .NET 10 | ARM64 | `54D8F8CBC083B11C2025A2D32A1E0E32A3CDB5E10AE0ADBCB3E9A179EF6BC8C8` | +| [TabularEditor.3.27.1.0.ARM64.Net10.zip](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net10.zip) | .NET 10 | ARM64 | `3338D9647596D5FBBE53A807725B45C5FA2FD9CC5B30834A9DD13EABD5D97912` | +| [TabularEditor.3.27.1.0.Installer.x64.Net8.exe](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.x64.Net8.exe) | .NET 8 | x64 | `43C227A33C51E7E7A5175D7AB705CC5C2B7E8686A2DA6DCCC786BD0D27CD45CB` | +| [TabularEditor.3.27.1.0.x64.Net8.msi](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net8.msi) | .NET 8 | x64 | `6D05B0F8BC9654379D7CBAD2B75C317C8F067847BB69468F8FD36A8417729B9B` | +| [TabularEditor.3.27.1.0.x64.Net8.zip](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.x64.Net8.zip) | .NET 8 | x64 | `EAE7EB7AA0B4B4AEE56A9B80BA8752DA04B98B59235DD5DD9278A41071DFB514` | +| [TabularEditor.3.27.1.0.Installer.ARM64.Net8.exe](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.Installer.ARM64.Net8.exe) | .NET 8 | ARM64 | `54F1DFE6C23B9066C47FE20552F33A866E21A4C50C55A1E658ED097AD313EE4B` | +| [TabularEditor.3.27.1.0.ARM64.Net8.msi](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net8.msi) | .NET 8 | ARM64 | `91468976BC010A90C4858320DD676290C234CD8705C6C6368C3E63A339A380EE` | +| [TabularEditor.3.27.1.0.ARM64.Net8.zip](https://cdn.tabulareditor.com/files/archive/te3/3.27.1.0/TabularEditor.3.27.1.0.ARM64.Net8.zip) | .NET 8 | ARM64 | `C49AB825BF72760C232AC87FC56758B3C7A768839BA09E1AD57A9775A2D6F1BA` | + + +*** + +## Improvements in 3.27.1.0 + +- The [AI Assistant](https://docs.tabulareditor.com/en/features/ai-assistant.html) and agents connected through the [MCP server](https://docs.tabulareditor.com/en/features/mcp-server.html) now receive the DAX errors in your model and in open documents: + - it now lists the errors, warnings and Analysis Services messages that the **Messages** view shows + - the errors and warnings of the active document (DAX query, DAX script, C# script or Pivot Grid) are added to the assistant's context + - after a C# script runs, the result lists the errors the script introduced or resolved + + Error text returned by Analysis Services can contain model data, and it's shared only when the **Model data** permission is set to **Read**. + +- **DAX Query** and **Pivot Grid** documents now stay open when you open a different model, and they connect to the new model. A DAX query keeps its text and unsaved changes. A Pivot Grid keeps its layout and drops fields the new model doesn't have. Turn this off with **Keep DAX Queries open when a different model is opened** and **Keep Pivot Grids open when a different model is opened** under **Tools > Preferences > Data Browsing**. See [DAX queries: switching models](https://docs.tabulareditor.com/en/features/dax-query.html#switching-models) and [Pivot Grids: switching models](https://docs.tabulareditor.com/en/features/pivot-grid.html#switching-models). +- **Model > Deploy...** has a new **Deploy Linguistic Metadata (Q&A Synonyms, AI Instructions and AI Data Schema)** option, selected by default. Clear it to keep the AI instructions, AI data schema and Q&A synonyms already set up on the destination semantic model. See [Deployment options](https://docs.tabulareditor.com/en/features/deployment.html#deployment-options). +- Right-click a server in the **Server** list of **File > Open > Model from DB...** or the deployment wizard to **Pin**, **Unpin** or **Delete** it. Pinned servers stay at the top of the list and aren't removed by **Clear recent servers**. See [Recent and pinned servers](https://docs.tabulareditor.com/en/how-tos/xmla-as-connectivity.html#recent-and-pinned-servers). +- The window title now starts with the model name. The **Model source detail** preference under **Tools > Preferences > Tabular Editor > User Interface** replaces **Hide model source details** and sets how much of the model's location the title bar, status bar, tab tooltips and recent lists show. The status bar shows the connection as `@`. See [User Interface preferences](https://docs.tabulareditor.com/en/references/preferences.html#tabular-editor--user-interface) and [Tabular Editor 3 user interface](https://docs.tabulareditor.com/en/features/views/user-interface.html#basic-user-interface-elements). +- The **Messages** view has a **Caused by** column that shows the object causing a cascading error and **+N dependent errors** on the object that causes errors on other objects. Right-click an error to clear **Show Cascading Errors** or to choose **Go to Root Cause**. See [Cascading errors and root causes](https://docs.tabulareditor.com/en/features/views/messages-view.html#cascading-errors-and-root-causes). + +## Bugfixes in 3.27.1.0 + +- Fixed an issue where setting a calculation item's **Ordinal** to move it toward the end of its calculation group placed it one position too early. +- Fixed an issue where **File > New > Model...** applied the chosen name to the model only and left the database named `SemanticModel`. +- Fixed an issue where an invalid culture name was accepted for a model's **Culture** and a translation's **Language** property. These values are now rejected with an error such as `'en US' is an invalid culture specifier`. +- Fixed an issue where comparing two models failed with `Object reference not set to an instance of an object` when they differed in role members, query groups or other unnamed collection elements. +- Fixed an issue where a non-standard whitespace character in a DAX expression, such as a no-break space, wasn't reported. It's now reported as an error that names the character and tells you to run **Format DAX**. +- Fixed issues in the **Metadata Translation Editor**: + - clearing a translation cell had no effect; it now removes the translation + - the **Display folder** cell of a table, a hierarchy level, a perspective or the model was editable and the value was discarded; these cells are now read-only + - the column header context menu offered **Show Auto Filter Row**, which didn't work on translation columns +- Fixed an issue where closing the **Import Table Wizard** while it listed tables could show an error report dialog or leave objects missing from the tree. +- Fixed an issue where cancelling the **Load Semantic Model from Database** dialog or the data source credentials prompt could close Tabular Editor and lose unsaved work. +- Fixed issues where **Debug this value** on a **Pivot Grid** value ignored or reversed some of the grid's filters, so the debugger showed a different value than the grid. +- Fixed an issue where a document opened by an MCP client while Tabular Editor wasn't the active window showed the previous document's toolbar and menu. Reported in [GitHub discussion #1590](https://github.com/TabularEditor/TabularEditor3/discussions/1590). +- Fixed an issue where duplicating or pasting a measure, column or hierarchy shown in several display folders put the copy in one folder named after all of them, such as `folder_01;folder_02`. The copy now appears in every display folder of the original. +- Fixed issues in the **DAX Query** editor where running one of several queries in a document used the first query's `DEFINE` block, and executing a selected column in an `ORDER BY` clause failed with `A single value for column ... cannot be determined`. +- Fixed an issue where the **Messages** view stopped listing the errors of documents that stayed open after a different model was opened. +- Fixed issues that could close Tabular Editor 3 unexpectedly or show an error dialog: + - while the **Properties** view showed a measure, or when its selected object was deleted + - when opening a semantic model, with a "Cannot access a disposed object" error + - after an edit that deleted an object with a DAX expression and renamed or added another object + - while you edited a DAX expression, with an "Index was outside the bounds of the array" error +- Fixed an issue where a legacy data source using a version-specific OLE DB provider name, such as `Provider=MSOLEDBSQL19.1`, was reported as not installed and the **Data Link Properties** dialog opened without the original provider. This issue was a regression since 3.25.0. +- Fixed an issue where **VertiPaq Analyzer > Collect Stats** returned no statistics when the model's data couldn't be scanned. Statistics are now collected from model metadata with a warning, and clearing **Read statistics from data** under **Tools > Preferences > File Formats > VertiPaq Analyzer** skips reading data. + +--- + +## Coming from Tabular Editor 2.x? + +For a tour of the main features in Tabular Editor 3, watch [this video](https://youtu.be/O4ATwdzCvWc). To get started, see the [onboarding guide](https://docs.tabulareditor.com/onboarding/index.html). + +**Main features of Tabular Editor 3:** +- Customizable IDE with multi-monitor and Hi-DPI support and themes +- DAX code editor with auto-complete, syntax checking, code folding and formatting +- *Workspace mode, which saves your changes to disk and synchronizes model metadata to Analysis Services at the same time +- *Preview table data with infinite scrolling, create PivotGrids or write DAX queries to browse the model or test calculation logic +- *Schedule data refreshes +- Update table schema on both provider and structured data sources, including M queries +- Create data model diagrams +- Create DAX scripts to edit multiple measures or other calculated objects in a single document +- Record C# scripts and save them as macros (formerly "Custom Actions") +- VertiPaq Analyzer integration +- DAX debugger +- DAX Optimizer integration +- Code Actions to refactor your DAX + +*=Only while connected to an instance of Analysis Services or Power BI + +--- diff --git a/content/references/supported-files.md b/content/references/supported-files.md index 384658d9b..f0005a41c 100644 --- a/content/references/supported-files.md +++ b/content/references/supported-files.md @@ -41,12 +41,13 @@ It's the original format for a semantic model that Microsoft supports. However, it has a large drawback: as it's a single large file, it's difficult to track changes and use good team development practices such as git source control. -#### .bim file in a folder +**.bim file in a folder** + ![Supported File Types BIM](~/content/assets/images/file-types/te3-supported-file-bim.png) [Download example .bim file ](https://raw.githubusercontent.com/TabularEditor/TabularEditorDocs/main/content/assets/file-types/bim-file-example.bim) -#### Save with supporting files for Fabric Git integration +**Save with supporting files for Fabric Git integration** When using the **Save with supporting files** option (Business and Enterprise editions), Tabular Editor creates a folder structure compatible with Microsoft Fabric Git integration: @@ -69,7 +70,8 @@ Tabular Editor can handle two types of Power BI storage formats: -#### Power BI Project folders (.pbip ) *(Preview)* +**Power BI Project folders (.pbip) (Preview)** + Power BI Project folders were introduced in June 2023 and is available in Power BI Desktop as a preview feature (also known as "Developer Mode"). The storage format is an alternative way to store the contents of a .pbix file, in a format that is more friendly to version control and 3rd party reading/editing of the content. > [!WARNING] @@ -82,7 +84,8 @@ To learn more about Power BI Project folders, please read [this official blog po > [!IMPORTANT] > Power BI Project file is the recommended format when using Power BI with Tabular Editor, as it supports the [widest range of modeling operations](https://learn.microsoft.com/power-bi/developer/projects/projects-overview#model-authoring). Making other types of changes to the model metadata than those listed, may cause your model to become unloadable in Power BI Desktop, and in this case, Microsoft Support will not be able to help you. -#### Power BI Template file (.pbit) +**Power BI Template file (.pbit)** + Power BI Template files are similar to .pbix files, with the exception that they do not contain any model **data** - only model **metadata**. As such, this model metadata can be opened and edited in Tabular Editor. > [!WARNING] @@ -126,7 +129,7 @@ TMDL stands for Tabular Model Definition Language and it's a new format for defi Microsoft introduced TMDL as a preview feature in April 2023, aiming to provide a unified and consistent way of working with datasets across different platforms and tools. TMDL is designed to support dataset source control, enabling users to track changes, collaborate, and automate workflows with semantic models. -> [!Note] +> [!NOTE] > TMDL is in preview, which means that it's not fully stable and may have some limitations or issues. ![Supported File Types TMDL](~/content/assets/images/file-types/te3-supported-file-tmdl.png) @@ -139,7 +142,7 @@ For further reading please see: [TMDL](xref:tmdl) [Download example TMDL Folder Structure](https://raw.githubusercontent.com/TabularEditor/TabularEditorDocs/main/content/assets/file-types/tmdl-model-example.zip) -#### Save with supporting files for Fabric Git integration +**Save with supporting files for Fabric Git integration** When using the **Save with supporting files** option (Business and Enterprise editions), Tabular Editor creates a folder structure compatible with Microsoft Fabric Git integration: @@ -253,7 +256,7 @@ Unlike other supporting file types creating a .vpax file is done within the Vert > [!WARNING] > If your model metadata is confidential, a .vpax file should also be considered confidential and only shared with that in mind. If you are concerned about protecting IP, Tabular Editor 3 has an option to obfuscate VPAX files. -#### Obfuscation +### Obfuscated VPAX files (.ovpax) If you need to hand off the VPAX file to a 3rd party, such as a consultant or a tool vendor, you can obfuscate the file to hide the model metadata. This is done by selecting the 'Obfuscated Export...' option under the drop-down button next to the 'Export' button in the Vertipaq Analyzer window. @@ -301,7 +304,7 @@ It is recommended to store the PBA rule file in version control, which also enab You can download the official Microsoft BPA rules here: [PBA Rules](https://raw.githubusercontent.com/microsoft/Analysis-Services/master/BestPracticeRules/BPARules.json) ### RecentServers.json -Contains all the servers a user has been connected to. It can be advisable to edit it manually to 'forget' past servers no longer relevant. +Contains the servers you've connected to, with the authentication type, user name, mode and status bar color saved for each, and the list of pinned servers. Passwords aren't stored. To remove or pin a server, right-click it in the **Server** list of the connection dialog. See [Recent and pinned servers](xref:xmla-as-connectivity#recent-and-pinned-servers). ### Layouts.json The Layouts file is automatically generated by Tabular Editor when starting the application. It contains all information to how Tabular Editor 3's UI layout is configured. diff --git a/content/references/user-options.md b/content/references/user-options.md index b93fa6f9a..36936949a 100644 --- a/content/references/user-options.md +++ b/content/references/user-options.md @@ -2,7 +2,7 @@ uid: user-options title: User options (.tmuo) file author: Daniel Otykier -updated: 2026-09-15 +updated: 2026-10-12 applies_to: products: - product: Tabular Editor 2 @@ -120,7 +120,7 @@ An override whose data source no longer exists in the model is dropped the next ### Deployment -`Deployment` holds what the deployment wizard last used for this model. The six Boolean options are always written once the block exists, whether they're true or false: +`Deployment` holds what the deployment wizard last used for this model. The seven Boolean options are always written once the block exists, whether they're true or false: | Property | Type | Written when | |---|---|---| @@ -130,6 +130,7 @@ An override whose data source no longer exists in the model is dropped the next | `DeployModelRoles` | Boolean | Always | | `DeployModelRoleMembers` | Boolean | Always | | `DeploySharedExpressions` | Boolean | Always | +| `DeployLinguisticMetadata` | Boolean | Always | | `TargetConnectionString` | String or object | Always, `null` if unset. Object form when the connection string carries a password. | | `TargetDatabase` | String | Always, `null` if unset. | | `TargetCredentials` | Object | Both a user name and a password are set. | diff --git a/content/security/ai-compliance.md b/content/security/ai-compliance.md index 5a4956bb3..06c7352ef 100644 --- a/content/security/ai-compliance.md +++ b/content/security/ai-compliance.md @@ -61,7 +61,7 @@ Your organization's agreement with the provider governs retention, the region da The MCP server is an HTTP listener bound to `127.0.0.1`, on port 42100 by default. It has no API key, makes no outbound requests and rejects browser requests with a non-local `Origin` header. -The connected agent sends what it reads from Tabular Editor 3 to its own provider, under the agent's configuration and the provider's terms. Tabular Editor 3 has no setting for the agent's provider, so govern the agent through its own administrative controls. The agent's own tools, such as file and shell access, are outside Tabular Editor 3 as well. Model files on disk, conversation files and audit files are readable by any agent running as the user. +The connected agent sends what it reads from Tabular Editor 3 to its own provider, under the agent's configuration and the provider's terms. Tabular Editor 3 has no setting for the agent's provider, so govern the agent through its own administrative controls. The agent's own tools, such as file and shell access, are outside Tabular Editor 3 as well. The **Model source detail** preference sets how much of the model's file path or server the agent receives with the model name, and it doesn't change the connection details in the model metadata. See [Check that it worked](xref:mcp-server#check-that-it-worked). Model files on disk, conversation files and audit files are readable by any agent running as the user. **Require access token** is off by default. While it's off, any process on the machine can connect to the server without credentials, including processes in other users' sessions on a Remote Desktop or Citrix host. The `RequireMcpAccessToken` policy enforces the token for every user. Agent registration files store the token in plain text, and **Regenerate token** in the **Tools > MCP Server...** dialog invalidates every existing registration. See [Running on a shared machine](xref:mcp-server#running-on-a-shared-machine). @@ -88,7 +88,7 @@ All paths are under `%LocalAppData%\TabularEditor3` unless stated otherwise. | MCP access token | `Preferences.json` | Encrypted with the Windows Data Protection API for the current user | | Standing permission grants | `Preferences.json` | JSON | | Per-model permission grants | The model's [user options](xref:user-options) (`.tmuo`) file: next to a model loaded from files, or under `UserOptions` for a model opened from a server | JSON | -| Conversations | `AI\Conversations` | Unencrypted JSON. Holds prompts, replies and tool results, including DAX query rows when **Model data** is at **Read**. Archived copies are written before each compaction. Files stay until the user deletes the conversation | +| Conversations | `AI\Conversations` | Unencrypted JSON. Holds prompts, replies and tool results, including DAX query rows and Analysis Services error text when **Model data** is at **Read**. Archived copies are written before each compaction. Files stay until the user deletes the conversation | | User Custom Instructions | `AI\CustomInstructions` | Markdown | | Knowledge base | `kb.sqlite` | SQLite database | | AI model catalog | `AiModels.json` | JSON | @@ -100,10 +100,10 @@ Permission grants control what the AI Assistant and the MCP server reach, with o | Resource | What the AI features reach | Default | Limit for both features | Limit for the MCP server only | | -- | -- | -- | -- | -- | -| Model metadata | Read: the model definition and VertiPaq Analyzer statistics. Write: changing the model through C# scripts | Read | `MaxModelMetadataAccess` | `McpMaxModelMetadataAccess` | -| Model data | Read: DAX query results, which are data values from the model | Deny | `MaxModelDataAccess` | `McpMaxModelDataAccess` | +| Model metadata | Read: the model definition, VertiPaq Analyzer statistics and the model's errors and warnings. Server error text also needs **Model data > Read**. Write: changing the model through C# scripts | Read | `MaxModelMetadataAccess` | `McpMaxModelMetadataAccess` | +| Model data | Read: DAX query results and the text of errors returned by Analysis Services, which can contain data values from the model | Deny | `MaxModelDataAccess` | `McpMaxModelDataAccess` | | Best Practice Analyzer | Read: rules and analysis results. Write: adding and changing rules | Read | `MaxBpaAccess` | `McpMaxBpaAccess` | -| Documents | Read: the contents of open C# script, DAX query and DAX script documents. Write: creating and overwriting them | Write | `MaxDocumentsAccess` | `McpMaxDocumentsAccess` | +| Documents | Read: the contents of open C# script, DAX query and DAX script documents and the errors and warnings of open documents, including Pivot Grids. Write: creating and overwriting them | Write | `MaxDocumentsAccess` | `McpMaxDocumentsAccess` | | Macros | Read: the user's macro library, including macro code | Write | `MaxMacrosAccess` | `McpMaxMacrosAccess` | At the default levels, the AI features read the model definition, run the Best Practice Analyzer, read the macro library and read and overwrite open script and query documents. They don't read data values and they don't change the model. Macro code and open documents can contain connection strings and other credentials. Set `MaxMacrosAccess` and `MaxDocumentsAccess` if they do in your organization. @@ -223,7 +223,7 @@ The following baseline is guidance for an organization that allows AI-assisted m | Control | Setting | Effect | | -- | -- | -- | | Provider | `AiProvider`, `AiEndpoint`, `AiModel` and `AiAllowedEndpointHosts` set to a resource your organization owns and has a data processing agreement for | The AI Assistant sends requests only to that endpoint, with keys your organization issues | -| Model data | `MaxModelDataAccess` set to `Deny` | No DAX query result reaches the AI Assistant or an MCP agent | +| Model data | `MaxModelDataAccess` set to `Deny` | No DAX query result or Analysis Services error text reaches the AI Assistant or an MCP agent | | Macros | `MaxMacrosAccess` set to `Deny` | Macro code isn't sent to an AI provider | | Scripts | `BlockUnsafeScripts` set to `1` | No script or macro writes files, reaches the network, starts other programs or loads outside code | | MCP authentication | `RequireMcpAccessToken` set to `1` | Only clients with the user's access token connect to the MCP server | @@ -275,7 +275,7 @@ They run scripts on the loaded model only with **Model metadata** at **Write**, ### Can the AI features read data from our models? -DAX query results require **Model data** at **Read**, and the default is **Deny**. Values typed into the model definition are part of the metadata. See [Data flow](#data-flow). +DAX query results and the text of Analysis Services errors require **Model data** at **Read**, and the default is **Deny**. Below **Read**, error text from the server is replaced with a fixed sentence. Values typed into the model definition are part of the metadata. See [Data flow](#data-flow). ### Can an MCP agent use a provider we haven't approved? diff --git a/content/security/security-privacy.md b/content/security/security-privacy.md index fb50e7263..837649188 100644 --- a/content/security/security-privacy.md +++ b/content/security/security-privacy.md @@ -63,10 +63,10 @@ The AI Assistant uses a **bring-your-own-key** model. You provide an API key fro | Resource | What it covers | Levels | Default | | -- | -- | -- | -- | -| Model metadata | Table, column and measure names, expressions, descriptions and similar. Read also covers VertiPaq Analyzer statistics | Deny / Read / Write | Read | -| Model data | Data values from your model, such as DAX query results. Requires a live connection | Deny / Read | Deny | +| Model metadata | Table, column and measure names, expressions, descriptions and similar. Read also covers VertiPaq Analyzer statistics and the model's error and warning messages | Deny / Read / Write | Read | +| Model data | Data values from your model, such as DAX query results, and the text of errors returned by Analysis Services, which can contain data values. DAX queries require a live connection | Deny / Read | Deny | | Best Practice Analyzer | Read lists rules and runs the analysis; Write adds or modifies rules | Deny / Read / Write | Read | -| Documents | Your open C# script and DAX query editors. Read is their contents; Write is needed to create or modify them | Deny / Read / Write | Write | +| Documents | Your open documents: DAX queries, C# scripts, DAX scripts and Pivot Grids. Read is their contents and their errors and warnings; Write is needed to create or modify them. Pivot Grid layouts can't be read or modified | Deny / Read / Write | Write | | Macros | Your macro library | Deny / Read / Write | Write | Write covers Read. Model data is denied by default, because metadata describes a model where data values are the model's contents. diff --git a/content/tutorials/new-as-model.md b/content/tutorials/new-as-model.md index 78979a6f1..ff1f84b35 100644 --- a/content/tutorials/new-as-model.md +++ b/content/tutorials/new-as-model.md @@ -24,13 +24,13 @@ This page walks you through the process of creating a new Analysis Services tabu > [!NOTE] > Tabular Editor 3 Business Edition is limited to [SQL Server Standard Edition](https://docs.microsoft.com/analysis-services/analysis-services-features-supported-by-the-editions-of-sql-server-2016?view=asallproducts-allversions#tabular-models) and [Azure Analysis Services Basic Tier](https://docs.microsoft.com/azure/analysis-services/analysis-services-overview#basic-tier). Note that certain modeling features are not supported at these tiers. -##### Creating a new model +## Creating a new model - From the File menu, choose New > Model... or hit `CTRL+N` ![New model](~/content/assets/images/new-as-model-new-model.png) -- Provide a name for your model or use the default value. Then, choose the compatibility level for the version of Analysis Services you target. The dialog lists these options: +- Provide a name for your model or use the default value. A name you enter is used for the database name, the database ID and the model name. Then, choose the compatibility level for the version of Analysis Services you target. The dialog lists these options: - 1200 (Azure Analysis Services / SQL Server 2016+) - 1400 (Azure Analysis Services / SQL Server 2017+) - 1500 (Azure Analysis Services / SQL Server 2019+) @@ -49,7 +49,7 @@ This page walks you through the process of creating a new Analysis Services tabu Once your model is created, the next step is to add a data source and some tables. -#### Adding a data source and tables +## Adding a data source and tables Before you can import data to your tabular model, you have to set up one or more data sources. Locate the TOM Explorer, right-click on the "Data Sources" folder and choose "Create". For a model that uses compatibility level 1400 or higher, we have two options: Legacy and Power Query data sources. To learn more about the differences between these two types of data sources, [consult the Microsoft Analysis Services blog](https://docs.microsoft.com/archive/blogs/analysisservices/using-legacy-data-sources-in-tabular-1400). @@ -100,7 +100,7 @@ If the table you imported is a dimension table, we recommend setting the "Key" p Repeat this process for any table you wish to import to your Tabular model. You don't have to refresh the data in each table one by one - instead, you can run the refresh operation at the model level. -#### Defining relationships +## Defining relationships Once you have imported a number of tables, the easiest way to define the relationships between them with Tabular Editor 3, is to create a new diagram. Choose "File > New > Diagram". Then, multi-select and drag the tables into the diagram view or right-click on the tables and choose "Add to diagram": @@ -112,7 +112,7 @@ To create a relationship between two tables, locate the foreign key column on th Close the diagram view (no need to save it, as you can always reconstruct the diagram later). Hit Ctrl+S once again to save the model. Now it's time to add some business logic. If you're using a Workspace Database, now is a good time to execute a refresh (automatic or calculate) at the model level, to ensure that the supporting structures for the relationships are created on the server, thus bringing the model into a queryable state. -#### Adding measures +## Adding measures Select one of the tables in the TOM Explorer and hit Alt+1 (or choose Create > New Measure) to add a measure to that table. Give the measure a name and provide a DAX expression for the measure. @@ -126,7 +126,7 @@ If you're using a Workspace Database, you can now test your new measure directly If you didn't use a Workspace Database, you will have to deploy your model to an instance of Analysis Services, before you can perform data refreshes and query the model. -#### Deploying the data model +## Deploying the data model To deploy the model metadata to any instance of Analysis Services, click on the "Model" menu and choose "Deploy...". This brings up the Tabular Editor 3 Deployment Wizard which is similar to the Deployment Wizard of Tabular Editor 2.X. Follow the instructions on the various pages of the wizard, to deploy the model metadata to an instance of Analysis Services. You can also use the Deployment Wizard to generate a TMSL/XMLA script, that can be handed over to an Analysis Services server administrator for manual deployment. diff --git a/content/tutorials/new-pbi-model.md b/content/tutorials/new-pbi-model.md index 807fddf3f..8b8a0e5e8 100644 --- a/content/tutorials/new-pbi-model.md +++ b/content/tutorials/new-pbi-model.md @@ -28,7 +28,7 @@ This page walks you through the process of creating a new Power BI semantic mode > > [More information](xref:editions). -##### Creating a new semantic model +## Creating a new semantic model 1. From the File menu, choose New > Model... or hit `CTRL+N`