+
+Once connected to the instance of Analysis Services, an external tool can obtain information about the model metadata, execute DAX or MDX queries against the data model, an even apply changes to the model metadata through [Microsoft-provided client libraries](https://docs.microsoft.com/en-us/analysis-services/client-libraries?view=asallproducts-allversions). In this regard, the Analysis Services instance managed by Power BI Desktop is no different from any other type of Analysis Services instance.
+
+## Supported Modeling Operations
+
+As of the June 2025 Power BI Desktop update, there are no longer any unsupported write operations. In other words, third party tools can now freely modify any aspect of the semantic model hosted in Power BI Desktop, including adding and removing tables and columns, changing data types, etc. However, if you're using a version of Power BI Desktop prior to the June 2025 update, please view the limitations in the [Desktop Limitations](xref: desktop-limitations) article.
+
+More information in [the official blog post](https://powerbi.microsoft.com/en-us/blog/open-and-edit-any-semantic-model-with-power-bi-tools/).
diff --git a/content/getting-started/azure-marketplace.md b/content/getting-started/azure-marketplace.md
new file mode 100644
index 0000000..579958c
--- /dev/null
+++ b/content/getting-started/azure-marketplace.md
@@ -0,0 +1,122 @@
+---
+uid: azure-marketplace
+title: Purchase via Azure Marketplace
+author: Peer Grønnerup
+updated: 2026-01-05
+---
+# Purchase Tabular Editor 3 through the Azure Marketplace
+
+Tabular Editor 3 is available on the Azure Marketplace as a public offer. This document provides an overview of how to streamline your purchase by acquiring Tabular Editor 3 directly through the Azure Marketplace.
+
+Visit the [Tabular Editor 3 offering on Azure Marketplace](https://marketplace.microsoft.com/en-us/marketplace/apps?search=tabular%20editor%203) to get started.
+
+## Requirements
+To purchase Tabular Editor via the Azure Marketplace, you need:
+- An Azure subscription (verify if you already have a subscription or create a new subscription)
+- An Azure AD account with at least Contributor role for the Azure subscription
+
+Also ensure these [prerequisites](https://learn.microsoft.com/en-us/azure/cost-management-billing/manage/enable-marketplace-purchases) are met before proceeding with the purchase of Tabular Editor 3 through the Azure Marketplace.
+
+## How to purchase Tabular Editor 3 in the Azure Marketplace
+
+Follow this procedure to purchase Tabular Editor 3 licenses through the Azure Marketplace:
+
+1. Sign in to the [Azure Portal](https://portal.azure.com/)
+2. Navigate directly to the Marketplace page or search for "Marketplace" using the search box at the top of the page.
+3. On the Azure Marketplace page, search for "Tabular Editor 3" and click on the Tabular Editor 3 offering.
+4. Select your subscription and license plan, then click **Subscribe**.
+
+ 
+
+ > [!TIP]
+ > The subscription and plan can be changed later in the purchasing process.
+
+5. Select the subscription to manage the Tabular Editor 3 subscription resource and costs. Assign the resource to an existing resource group or create a new group for this purpose.
+
+6. Provide a name for the resource and configure your subscription by selecting the plan, contract duration, number of seats, and auto-renewal preference.
+
+ 
+
+ > [!IMPORTANT]
+ > If you do not enable auto-renew, your subscription will be cancelled after the first billing term.
+
+7. Click **Review + Subscribe**.
+
+8. Review the terms and verify the purchase details, then click **Subscribe** at the bottom of the page.
+
+ 
+
+9. Wait until the subscription creation is complete, then click **Configure account now** to complete your subscription. This will redirect you to the Tabular Editor self-service page.
+
+ 
+
+> [!NOTE]
+> Each edition of Tabular Editor 3 must be purchased separately. You cannot combine different editions in a single Azure Marketplace transaction.
+
+For more details, see: [Purchase a SaaS offer in Azure Portal](https://learn.microsoft.com/en-us/marketplace/purchase-saas-offer-in-azure-portal#saas-subscription-and-configuration)
+
+## Activating your Azure Marketplace subscription
+
+Final completion of your purchase requires you to activate the subscription on the Tabular Editor self-service portal. Activating the subscription requires a Tabular Editor user account.
+
+> [!IMPORTANT]
+> You must use the **Configure account now** link from the Azure Portal to complete activation. This link contains essential subscription details required for activation. If you navigate away or close the page before signing in, return to the Azure Portal and click **Configure account now** again to ensure proper activation.
+
+Follow the procedure below to finalize the activation of your purchase:
+
+1. Once redirected from the Azure Portal, you are requested to sign in to the Tabular Editor Self-service portal using an existing account or by creating a new one.
+
+ > [!IMPORTANT]
+ > Use the same email address for your Tabular Editor account as the purchaser or beneficiary email from your Azure Portal purchase. Mismatched emails will prevent the Azure Marketplace subscription from linking to your account.
+
+ > [!TIP]
+ > You will need to give consent and accept the permission request when creating a new account for the self-service portal.
+
+ Once signed in, you will see the newly purchased subscription at the top of the subscriptions page under the section "Pending Azure Marketplace subscriptions".
+
+ 
+
+ > [!NOTE]
+ > If you don't see your pending subscription listed, return to the Azure Portal and click the **Configure account now** button again to be redirected with the correct subscription information.
+
+2. Click the **Activate** button for the subscription you wish to activate. This will display the subscription details.
+
+ 
+
+3. Review the details one final time and click **Confirm Activation**.
+
+4. The subscription will now be activated and the required licenses will be created. Once activation is complete:
+ - Your subscription status in Azure will change from "Pending account configuration" to "Subscribed"
+ - You will receive an email containing your license key(s)
+ - The subscription will appear under **Subscriptions** in the Tabular Editor self-service portal. Click the ellipsis menu (three dots) and select **View subscription details** to view subscription information including the subscription period.
+
+ 
+
+## Installing and activating licenses
+
+Please read @installation-activation-basic for more details on how to install, activate, and configure your Tabular Editor 3 licenses.
+
+## Changing Azure Marketplace subscriptions
+
+All modifications to Tabular Editor 3 subscriptions purchased through the Azure Marketplace must be made in the Azure Portal.
+
+### How to modify your subscription
+
+1. Sign in to the [Azure Portal](https://portal.azure.com/)
+2. Navigate to **Home** > **SaaS** or search for "SaaS" in the search box
+3. Locate and select your Tabular Editor 3 subscription from the list
+4. On the subscription overview page, you can perform the following actions:
+ - **Change plan**: Upgrade to a higher Tabular Editor 3 edition
+ - **Change No. of users**: Add additional user licenses
+ - **Edit Auto-renew**: Enable or disable automatic renewal
+ - **Cancel subscription**: Terminate your subscription
+ - **Change Azure subscription**: Modify the Azure subscription used for billing
+ - **Change resource group**: Move the subscription resource to a different resource group
+
+> [!NOTE]
+> **Downgrades not supported**: You cannot downgrade to a lower edition or reduce the number of users during an active subscription period. To move to a lower-tier plan or reduce seats, turn off **Auto-renew** for your current subscription and purchase a new subscription with your desired configuration before the current term ends.
+
+> [!IMPORTANT]
+> Canceling a subscription immediately revokes access to all licenses under that subscription and cannot be undone. To maintain access until the end of your current billing period, click **Edit Auto-renew** and turn off automatic renewal instead. Refunds are processed according to the refund policy. For more information, see [Refund policies](https://learn.microsoft.com/en-us/marketplace/refund-policies?WT.mc_id=Portal-Microsoft_Azure_Marketplace#software-as-a-service-saas-offers) for Microsoft Marketplace.
+
+For more information about managing SaaS subscriptions in Azure, see: [SaaS subscription lifecycle management](https://learn.microsoft.com/en-us/marketplace/saas-subscription-lifecycle-management)
\ No newline at end of file
diff --git a/content/onboarding/boosting-productivity-te3.md b/content/getting-started/boosting-productivity-te3.md
similarity index 89%
rename from content/onboarding/boosting-productivity-te3.md
rename to content/getting-started/boosting-productivity-te3.md
index 4a7bce6..01306b7 100644
--- a/content/onboarding/boosting-productivity-te3.md
+++ b/content/getting-started/boosting-productivity-te3.md
@@ -3,12 +3,24 @@ uid: boosting-productivity-te3
title: Boosting productivity with Tabular Editor 3
author: Daniel Otykier
updated: 2021-09-30
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Boosting productivity with Tabular Editor 3
-
+
This section contains a number of articles that will let you quickly become familiar with Tabular Editor 3 and its main features, with an emphasis on how to get stuff done in the most productive way possible.
Below is an overview of the articles and what you will learn in each:
diff --git a/content/onboarding/bpa.md b/content/getting-started/bpa.md
similarity index 97%
rename from content/onboarding/bpa.md
rename to content/getting-started/bpa.md
index 28500ec..1cfbe94 100644
--- a/content/onboarding/bpa.md
+++ b/content/getting-started/bpa.md
@@ -3,6 +3,18 @@ uid: bpa
title: Improve code quality with the Best Practice Analyzer
author: Daniel Otykier
updated: 2021-11-02
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Improve code quality with the Best Practice Analyzer
diff --git a/content/onboarding/creating-and-testing-dax.md b/content/getting-started/creating-and-testing-dax.md
similarity index 97%
rename from content/onboarding/creating-and-testing-dax.md
rename to content/getting-started/creating-and-testing-dax.md
index 4a1d8a0..4f4a2e4 100644
--- a/content/onboarding/creating-and-testing-dax.md
+++ b/content/getting-started/creating-and-testing-dax.md
@@ -4,10 +4,17 @@ title: Adding measures and other calculated objects
author: Daniel Otykier
updated: 2021-10-08
applies_to:
- editions:
- - edition: Desktop
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Adding measures and other calculated objects
diff --git a/content/onboarding/cs-scripts-and-macros.md b/content/getting-started/cs-scripts-and-macros.md
similarity index 100%
rename from content/onboarding/cs-scripts-and-macros.md
rename to content/getting-started/cs-scripts-and-macros.md
diff --git a/content/onboarding/dax-script-introduction.md b/content/getting-started/dax-script-introduction.md
similarity index 97%
rename from content/onboarding/dax-script-introduction.md
rename to content/getting-started/dax-script-introduction.md
index 645a8c0..16bb426 100644
--- a/content/onboarding/dax-script-introduction.md
+++ b/content/getting-started/dax-script-introduction.md
@@ -4,10 +4,17 @@ title: Using the DAX Scripting feature
author: Daniel Otykier
updated: 2021-10-08
applies_to:
- editions:
- - edition: Desktop
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Using the DAX Scripting feature
diff --git a/content/common/desktop-limitations.md b/content/getting-started/desktop-limitations.md
similarity index 90%
rename from content/common/desktop-limitations.md
rename to content/getting-started/desktop-limitations.md
index fcfe9d2..50f936c 100644
--- a/content/common/desktop-limitations.md
+++ b/content/getting-started/desktop-limitations.md
@@ -1,20 +1,24 @@
---
uid: desktop-limitations
-title: Power BI Desktop Limitations
+title: Power BI Desktop Limitations (Outdated)
author: Morten Lønskov
updated: 2023-08-21
applies_to:
- versions:
- - version: 2.x
- - version: 3.x
- editions:
- - edition: Desktop
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
-
# Power BI Desktop limitations
+
When using Tabular Editor (any edition) as an [external tool for Power BI Desktop](https://docs.microsoft.com/en-us/power-bi/transform-model/desktop-external-tools), there are a few limitations to be aware about.
The limitations mentioned in this article apply to Tabular Editor 2.x as well.
@@ -27,14 +31,15 @@ More information in [the official blog post](https://powerbi.microsoft.com/en-us
## Power BI file types
-When using Power BI, you will encounter two different file types commonly used:
+When using Power BI, you will encounter three different file types commonly used:
- **.pbix** (Power BI Report)
- **.pbit** (Power BI Template)
+- **.pbip** (Power BI Project)
Both these files can be opened in Power BI Desktop and essentially defines everything related to a Power BI report: Data sources, Power Query transformations, the tabular data model, report pages, visuals, bookmarks, etc.
-The main difference between the two, is that the **.pbix file contains model data**, where as the **.pbit file contains no data**. In addition, it turns out that the latter of the two contains model **metadata** in the JSON-based [Tabular Object Model (TOM)](https://docs.microsoft.com/en-us/analysis-services/tom/introduction-to-the-tabular-object-model-tom-in-analysis-services-amo?view=asallproducts-allversions) format, which can be loaded by Tabular Editor. A .pbix file on the other hand, does not contain the model metadata in this format, and therefore, **a .pbix file cannot be loaded directly in Tabular Editor** in any way. Instead, you will have to rely on the External Tools integration, which requires you to load the .pbix file in Power BI Desktop, as described below.
+The main difference between, is that the **.pbix and .pbip file contains model data**, where as the **.pbit file contains no data**. In addition, a **.pbix** file does not contain the model metadata in this format, and therefore, **a .pbix file cannot be loaded directly in Tabular Editor** in any way. Instead, you will have to rely on the External Tools integration, which requires you to load the .pbix file in Power BI Desktop, as described below.
> [!WARNING]
> Even though it is technically possible to load and save model metadata to and from a .pbit file, this approach is unsupported by Power BI Desktop. As such, there is always a risk of making changes to the .pbit file which would cause the file to become unloadable in Power BI Desktop, or cause stability issues once loaded. In this case, Microsoft support will be unable to assist you.
diff --git a/content/te3/editions.md b/content/getting-started/editions.md
similarity index 98%
rename from content/te3/editions.md
rename to content/getting-started/editions.md
index 026c3b3..88d37eb 100644
--- a/content/te3/editions.md
+++ b/content/getting-started/editions.md
@@ -3,6 +3,12 @@ uid: editions
title: Compare editions
author: Søren Toft Joensen
updated: 2025-02-07
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ full: true
---
# Tabular Editor 3 Editions
diff --git a/content/onboarding/general-introduction.md b/content/getting-started/general-introduction.md
similarity index 98%
rename from content/onboarding/general-introduction.md
rename to content/getting-started/general-introduction.md
index 61d32ff..bee4249 100644
--- a/content/onboarding/general-introduction.md
+++ b/content/getting-started/general-introduction.md
@@ -3,6 +3,12 @@ uid: general-introduction
title: General introduction and architecture
author: Daniel Otykier
updated: 2021-09-30
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ full: true
---
# General introduction and architecture
diff --git a/content/te3/getting-started.md b/content/getting-started/getting-started.md
similarity index 90%
rename from content/te3/getting-started.md
rename to content/getting-started/getting-started.md
index bfe21c6..664ec18 100644
--- a/content/te3/getting-started.md
+++ b/content/getting-started/getting-started.md
@@ -1,8 +1,20 @@
---
uid: getting-started
-title: Getting Started
+title: Installation and Activation
author: Morten Lønskov
updated: 2025-09-23
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Getting Started
@@ -28,13 +40,13 @@ Tabular Editor 3 is commercial software. Visit our [home page](https://tabulared
The first time you launch Tabular Editor 3 on a new machine, you are prompted to activate the product.
-
+
### Activating using an existing license key
Once you purchase a license for Tabular Editor 3, you should receive an e-mail with a 25-character string which is your license key. When prompted, enter the license key and hit "Next >" to activate the product.
-
+
> [!NOTE]
> For multi-user license types, you will need to enter your e-mail address in addition to the license key. Tabular Editor 3 will prompt you to do so, if the license key you enter represents a multi-user license.
@@ -52,7 +64,7 @@ If you haven't used Tabular Editor 3 before, you are eligible to a free 30-day t
When Tabular Editor 3 is activated, you may change your license key in the Help menu by choosing "About Tabular Editor".
-
+
In the dialog, select "Change license key". Note that this option is only available if no model is loaded in Tabular Editor. If you already loaded a model you can close it under File > Close model. Once you click "Change license key", Tabular Editor will prompt you whether you want to remove the current license:
@@ -77,7 +89,7 @@ You can also use `regedit.exe` (Windows Registry Editor) and navigate to `HKEY_C
A system administrator may also proactively assign Tabular Editor 3 licenses to a machine by specifying the **LicenseKey** and **User** values under each user’s `SOFTWARE\Kapacity\Tabular Editor 3` registry key.
-
+
### Changing a license key through the registry
@@ -129,6 +141,4 @@ For details on available MSI command-line options, please refer to the official
## Next steps
-- [Overview of Tabular Editor 3's user interface](xref:user-interface)
-- [What's new in Tabular Editor 3](whats-new.md)
-- [Tabular Editor 3 Onboarding Guide](xref:onboarding-te3)
\ No newline at end of file
+- [Overview of Tabular Editor 3's user interface](xref:user-interface)
\ No newline at end of file
diff --git a/content/onboarding/importing-tables-data-modeling.md b/content/getting-started/importing-tables-data-modeling.md
similarity index 92%
rename from content/onboarding/importing-tables-data-modeling.md
rename to content/getting-started/importing-tables-data-modeling.md
index 0c582e9..ff7e3d3 100644
--- a/content/onboarding/importing-tables-data-modeling.md
+++ b/content/getting-started/importing-tables-data-modeling.md
@@ -4,11 +4,17 @@ title: Importing tables and data modeling
author: Daniel Otykier
updated: 2021-10-08
applies_to:
- editions:
- - edition: Desktop
- partial: TE3 Desktop Edition includes this feature. External tools adding/editing tables, columns and relationships against a Power BI Desktop model is not supported by Microsoft, however.
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Importing tables and data modeling
@@ -16,7 +22,7 @@ This article describes how to use the [Table Import Wizard](#table-import-wizard
## Table Import Wizard
-[!include[importing-tables1](~/content/te3/import-tables.partial.md)]
+[!include[importing-tables1](../features/import-tables.partial.md)]
# Working with diagrams
diff --git a/content/onboarding/index.md b/content/getting-started/index.md
similarity index 75%
rename from content/onboarding/index.md
rename to content/getting-started/index.md
index f369454..e6abb1a 100644
--- a/content/onboarding/index.md
+++ b/content/getting-started/index.md
@@ -5,13 +5,14 @@ author: Daniel Otykier
---
# Welcome
+
**Thank you for choosing Tabular Editor 3!**
-To help you get the most out of the tool, we have collected all of our onboarding material in this onboarding guide, that we hope you will enjoy. We recommend all new users of Tabular Editor 3 to read through this guide, skipping any topics that they are already familiar with.
+To help you get the most out of the tool, we have collected all of our onboarding material in this getting started section, that we hope you will enjoy. We recommend all new users of Tabular Editor 3 to read through this guide, skipping any topics that they are already familiar with.
-> [!NOTE]
+> [!NOTE]
> Some articles in this guide reference Tabular Editor 2, specifically the Command-Line Interface (CLI), for purposes of automated deployment and testing. A standalone CLI application to accompany Tabular Editor 3 is planned for release at a later time.
As this training material is focused on the Tabular Editor product, we assume that you already have a basic understanding of tabular data modeling (using either Power BI Desktop, Visual Studio or Tabular Editor 2.x). If you are new to tabular data modeling, we highly recommend looking into some of the training material and courses offered by third parties such as [sqlbi.com](https://sqlbi.com).
@@ -23,10 +24,28 @@ As this training material is focused on the Tabular Editor product, we assume th
- @migrate-from-vs
- @migrate-from-desktop
- @migrate-from-te2
+
+- @getting-started
+ - @editions
+ - @training-telearn
+
+- @getting-started-te2
+- @desktop-integration
+ - @desktop-limitations
+
+- @user-interface
+ - @bpa-view
+ - @data-refresh-view
+ - @find-replace
+ - @macros-view
+ - @messages-view
+ - @properties-view
+ - @tom-explorer-view
+ - @diagram-view
+
- @parallel-development
- @optimizing-workflow-workspace-mode
- - @powerbi-cicd
- - @as-cicd
+
- @boosting-productivity-te3
- @importing-tables-data-modeling
- @refresh-preview-query
@@ -39,7 +58,8 @@ As this training material is focused on the Tabular Editor product, we assume th
**Additional resources:**
- [TE3 reference docs](xref:getting-started)
-- @downloads
+- [Download Tabular Editor](https://tabulareditor.com/download)
+- [Tabular Editor Learn](https://tabulareditor.com/learn)
- [Dedicated support (Enterprise Edition customers only)](mailto:support@tabulareditor.com)
- [Community support](https://github.com/TabularEditor/TabularEditor3/issues)
- [Community discussions](https://github.com/TabularEditor/TabularEditor3/discussions)
\ No newline at end of file
diff --git a/content/onboarding/installation.md b/content/getting-started/installation.md
similarity index 81%
rename from content/onboarding/installation.md
rename to content/getting-started/installation.md
index 921413f..316745a 100644
--- a/content/onboarding/installation.md
+++ b/content/getting-started/installation.md
@@ -3,6 +3,18 @@ uid: installation-activation-basic
title: Installation, activation and basic configuration
author: Daniel Otykier
updated: 2021-09-30
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
## Installation
@@ -11,19 +23,19 @@ In order to install Tabular Editor 3, download the latest version from our [down
We recommend downloading the MSI 64-bit installer, which is suitable in most scenarios. Once downloaded, doubleclick the MSI file and go through the installation pages.
-
+
## Activating your installation
The first time you launch Tabular Editor 3 on a new machine, you are prompted to activate the product.
-
+
### Activating using an existing license key
Once you purchase a license for Tabular Editor 3, you should receive an e-mail with a 25-character string which is your license key. When prompted, enter the license key and hit "Next >" to activate the product.
-
+
> [!NOTE]
> For multi-user license types, you will need to enter your e-mail address in addition to the license key. Tabular Editor 3 will prompt you to do so, if the license key you enter represents a multi-user license.
@@ -31,19 +43,19 @@ Once you purchase a license for Tabular Editor 3, you should receive an e-mail w
#### Manual Activation (No Internet)
If you do not have access to the internet e.g., due to a proxy Tabular Editor will prompt you to do a manual activation.
-
+
After entering your email, a dialog box appears with a link to an activation key.
Copy the URL and open it in a web-browser that is connected to the internet.
The URL returns a JSON object:
-
+
Copy the full JSON object and paste the full JSON object given into the dialog box.
Your manual activation dialog should end up looking like below.
-
+
Your Tabular Editor 3 license will thereby be verified.
@@ -51,7 +63,7 @@ Your Tabular Editor 3 license will thereby be verified.
When Tabular Editor 3 is activated, you may change your license key in the Help menu by choosing "About Tabular Editor".
-
+
In the dialog, select "Change license key". Note that this option is only available if no model is loaded in Tabular Editor. IF you already loaded a model you can close it under File > Close model.
@@ -72,7 +84,7 @@ By default, whenever Tabular Editor 3 is launched, the tool will check online to
Tabular Editor 3 collects anonymous usage data and telemetry, which helps us improve the product. You can opt out at any time by launching Tabular Editor 3 and navigating to **Tools > Preferences > Updates and Feedback**. Uncheck the **Help improve Tabular Editor by collecting anonymous usage data** checkbox to opt out.
-
+
### Proxy settings
diff --git a/content/onboarding/migrate-from-desktop.md b/content/getting-started/migrate-from-desktop.md
similarity index 98%
rename from content/onboarding/migrate-from-desktop.md
rename to content/getting-started/migrate-from-desktop.md
index a200acf..c3aec21 100644
--- a/content/onboarding/migrate-from-desktop.md
+++ b/content/getting-started/migrate-from-desktop.md
@@ -3,6 +3,18 @@ uid: migrate-from-desktop
title: Migrating from Power BI Desktop
author: Daniel Otykier
updated: 2021-09-30
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Migrating from Power BI Desktop
@@ -60,7 +72,7 @@ The typical workflow in this scenario, is the following:
4. If using workspace mode, changes should be immediately visible in the Power BI service every time you hit Save (CTRL+S) in Tabular Editor.
5. If not using workspace mode or when done making changes, use Tabular Editor's **Model > Deploy...** option to publish the changes to the Power BI service.
-As the model metadata "source of truth" in this scenario, is the file or folder structure stored on disk, this scenario not only enables parallel development with version control integration, but also continuous integration/continuous deployment (CI/CD) using an automated build server such as Azure DevOps. See
diff --git a/content/how-tos/formula-fixup-dependencies.md b/content/how-tos/formula-fixup-dependencies.md
new file mode 100644
index 0000000..84a2aaa
--- /dev/null
+++ b/content/how-tos/formula-fixup-dependencies.md
@@ -0,0 +1,17 @@
+---
+uid: formula-fix-up-dependencies
+title: Formula Fix-up and Formula Dependencies
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ full: true
+---
+
+## Formula Fix-up and Formula Dependencies
+Tabular Editor continuously parses the DAX expressions of all measures, calculated columns and calculated tables in your model, to construct a dependency tree of these objects. This dependency tree is used for the Formula Fix-up functionality, which may be enabled under "File" > "Preferences". Formula Fix-up automatically updates the DAX expression of any measure, calculated column or calculated table, whenever an object that was referenced in the expression is renamed.
+
+To visualize the dependency tree, right-click the object in the explorer tree and choose "Show dependencies..."
+
+
\ No newline at end of file
diff --git a/content/how-tos/import-export-translations.md b/content/how-tos/import-export-translations.md
new file mode 100644
index 0000000..d4847c3
--- /dev/null
+++ b/content/how-tos/import-export-translations.md
@@ -0,0 +1,13 @@
+---
+uid: import-export-translations
+title: Import/Export Translations
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ full: true
+---
+
+## Import/Export Translations
+Select one or more cultures in the Explorer Tree, right-click and choose "Export Translations..." to generate a .json file that can be imported later in either Tabular Editor or Visual Studio. Choose "Import Translations..." to import a corresponding .json file. You can choose whether to overwrite existing translations. If you don't, translations defined in the .json file will only be applied to objects that do not already have a translation for the given culture.
\ No newline at end of file
diff --git a/content/te2/importing-tables-from-excel.md b/content/how-tos/importing-tables-from-excel.md
similarity index 100%
rename from content/te2/importing-tables-from-excel.md
rename to content/how-tos/importing-tables-from-excel.md
diff --git a/content/te2/incremental-refresh.md b/content/how-tos/incremental-refresh2-h.md
similarity index 95%
rename from content/te2/incremental-refresh.md
rename to content/how-tos/incremental-refresh2-h.md
index 8f123ce..4a0cefd 100644
--- a/content/te2/incremental-refresh.md
+++ b/content/how-tos/incremental-refresh2-h.md
@@ -3,6 +3,19 @@ uid: incremental-refresh-policy
title: Incremental Refresh
author: Daniel Otykier
updated: 2021-02-15
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ none: true
+ - edition: Business
+ partial: true
+ note: "Limited to SQL Server Standard Edition"
+ - edition: Enterprise
+ full: true
---
# Incremental Refresh
diff --git a/content/how-tos/index.md b/content/how-tos/index.md
new file mode 100644
index 0000000..d425078
--- /dev/null
+++ b/content/how-tos/index.md
@@ -0,0 +1,47 @@
+# How-tos
+
+This section contains step-by-step guides for accomplishing specific tasks with Tabular Editor.
+
+## In this section
+
+### Scripting and Automation
+- [Advanced Scripting](Advanced-Scripting.md) - C# scripting for model manipulation and automation
+- [Script Reference Objects](script-reference-objects.md) - Working with object references in scripts
+
+### Model Management and Deployment
+- [Deployment](../features/deployment.md) - Deploy models to Analysis Services databases
+- [Connect to SSAS](connect-ssas.md) - Connect to and work with SSAS Tabular databases
+- [Load and Save](load-save.md) - Loading and saving model files
+- [Folder Serialization](folder-serialization.md) - Save models as folder structures for version control
+- [Master Model Pattern](Master-model-pattern.md) - Managing multiple models with perspectives
+
+### Data Import and Tables
+- [Importing Tables](Importing-Tables.md) - Import tables from various data sources
+- [Importing Tables from Excel](importing-tables-from-excel.md) - Excel-specific import procedures
+- [Replace Tables](replace-tables.md) - Replace existing tables with new data sources
+
+### Model Organization and Structure
+- [Advanced Filtering of Explorer Tree](Advanced-Filtering-of-the-Explorer-Tree.md) - Filter and organize model objects
+- [Drag and Drop](drag-drop.md) - Using drag and drop functionality
+- [Duplicate and Batch Rename](duplicate-batchrename.md) - Efficiently manage object names
+- [Edit Properties](edit-properties.md) - Modify object properties
+
+### Translations and Perspectives
+- [Import/Export Translations](import-export-translations.md) - Manage multi-language support
+- [Perspectives and Translations](perspectives-translations.md) - Working with model perspectives
+
+### Data Security and Roles
+- [Roles and Row-Level Security](roles-rls.md) - Implement data security with RLS
+
+### Connectivity and Integration
+- [XMLA Analysis Services Connectivity](xmla-as-connectivity.md) - Connect via XMLA endpoints
+- [Power BI XMLA PBIX Workaround](powerbi-xmla-pbix-workaround.md) - Work with Power BI through XMLA
+
+### Model Maintenance
+- [Formula Fixup Dependencies](formula-fixup-dependencies.md) - Automatically fix formula references
+- [Metadata Backup](metadata-backup.md) - Backup and restore model metadata
+- [Undo and Redo](undo-redo.md) - Using undo/redo functionality
+
+---
+
+*Navigate using the table of contents to find guides for specific tasks.*
\ No newline at end of file
diff --git a/content/how-tos/load-save.md b/content/how-tos/load-save.md
new file mode 100644
index 0000000..83cb647
--- /dev/null
+++ b/content/how-tos/load-save.md
@@ -0,0 +1,13 @@
+---
+uid: load-save-model
+title: Load/save Model.bim files
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ full: true
+---
+
+## Load/save Model.bim files
+Hitting CTRL+O shows an Open File dialog, which lets you select a Model.bim file to load in Tabular Editor. The file must be of Compatibility Level 1200 or newer (JSON format). CTRL+S saves any changes you make in Tabular Editor back to the file (we recommend backing up your Model.bim files before using Tabular Editor). If you want to deploy the loaded model to an Analysis Services server instance, see [Deployment](../features/deployment.md).
\ No newline at end of file
diff --git a/content/how-tos/metadata-backup.md b/content/how-tos/metadata-backup.md
new file mode 100644
index 0000000..2eeeccf
--- /dev/null
+++ b/content/how-tos/metadata-backup.md
@@ -0,0 +1,18 @@
+---
+uid: metadata-backup
+title: Metadata Backup
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ full: true
+---
+## Metadata Backup
+If you wish, Tabular Editor can automatically save a backup copy of the existing model metadata, prior to each save (when connected to an existing database) or deployment. This is useful if you're not using a version control system, but still need to rollback to a previous version of your model.
+
+To enable this setting, go to "File" > "Preferences", enable the checkbox and choose a folder to place the metadata backups:
+
+
+
+If the setting is enabled, a compressed (zipped) version of the existing model metadata will be saved to this location whenever you use the Deployment Wizard, or when you click the "Save" button while connected to a (workspace) database.
\ No newline at end of file
diff --git a/content/how-tos/perspectives-translations.md b/content/how-tos/perspectives-translations.md
new file mode 100644
index 0000000..a76bf67
--- /dev/null
+++ b/content/how-tos/perspectives-translations.md
@@ -0,0 +1,28 @@
+---
+uid: perspectives-translations
+title: Perspectives and Translations
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ full: true
+ note: Includes dedicated Perspective and Translation Editors
+---
+
+## Working with Perspectives and Translations
+You can add/edit existing perspectives and translations (cultures), by clicking the Model node in the Explorer Tree, and locating the relevant properties at the bottom of the property grid. Alternatively, when your Explorer Tree is [showing all object types](../features/hierarchical-display.md), you can view and edit perspectives, cultures and roles directly in the tree.
+
+
+
+You can duplicate an existing perspective, role or translation by opening the right-click menu and choose "Duplicate". This will create an exact copy of the object, which you can then modify to your needs.
+
+To view perspectives and/or translations "in action", use the two dropdown lists in the toolbar near the top of the screen. Choosing a perspective will hide all objects that are not included in that perspective, while choosing a translation will show all objects in the tree using the translated names and display folders. When hitting F2 to change the names of objects/display folders or when dragging objects around in the tree, the changes will only apply to the selected translation.
+
+## Perspectives/Translations within object context
+When one or more objects are selected in the tree, you will find 4 special property collections within the Property Grid:
+
+* **Captions**, **Descriptions** and **Display Folders** shows a list of all cultures in the model, with the translated names, descripions and display folders respectively of the selected objects for each culture.
+* **Perspectives** shows a list of all perspectives in the model, with an indication of whether or nor the selected objects belong to each perspective.
+
+You can use these collections in the Property Grid to change the translations and perspective inclusions for one or more objects at at time.
\ No newline at end of file
diff --git a/content/te3/powerbi-xmla-pbix-workaround.md b/content/how-tos/powerbi-xmla-pbix-workaround.md
similarity index 93%
rename from content/te3/powerbi-xmla-pbix-workaround.md
rename to content/how-tos/powerbi-xmla-pbix-workaround.md
index ef4ee51..5acb1b9 100644
--- a/content/te3/powerbi-xmla-pbix-workaround.md
+++ b/content/how-tos/powerbi-xmla-pbix-workaround.md
@@ -4,12 +4,18 @@ title: Creating PBIX File from XMLA Endpoint.
author: Morten Lønskov
updated: 2023-10-18
applies_to:
- editions:
- - edition: Desktop
- none: x
- - edition: Business
- partial: Tabular Editor 3 Business Edition only allows connecting to the XMLA endpoint of Premium-Per-User (PPU) workspaces.
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ none: true
+ - edition: Business
+ partial: true
+ note: "Only Premium Per User XMLA Endpoints"
+ - edition: Enterprise
+ full: true
---
# Downloading a Power BI dataset to a .pbix using the XMLA endpoint
diff --git a/content/how-tos/replace-tables.md b/content/how-tos/replace-tables.md
new file mode 100644
index 0000000..3516522
--- /dev/null
+++ b/content/how-tos/replace-tables.md
@@ -0,0 +1,16 @@
+---
+uid: replace-tables
+title: Replace tables
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ full: true
+---
+## Replace tables
+You can replace a table simply by copying (CTRL+C) one table - even from another instance of Tabular Editor - and then selecting the table you want to replace, before hitting paste (CTRL+V). A prompt will ask you to confirm whether you really want to replace the table ("Yes"), insert as a new table ("No") or cancel the operation entirely:
+
+
+
+If you choose "Yes", the selected table will be replaced with the table in the clipboard. Furthermore, all relationships pointing to or from that table will be updated to use the new table. For this to work, columns participating in relationships must have the same name and data type in both the original table, and the inserted table.
\ No newline at end of file
diff --git a/content/how-tos/roles-rls.md b/content/how-tos/roles-rls.md
new file mode 100644
index 0000000..19b8912
--- /dev/null
+++ b/content/how-tos/roles-rls.md
@@ -0,0 +1,21 @@
+---
+uid: roles-and-rls
+title: Roles and Row-Level Security
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ full: true
+---
+## Roles and Row-Level Security
+
+Roles are visible in the Explorer Tree. You can right-click the tree to create new roles, delete or duplicate existing roles. You can view and edit the members of each role, by locating the role in the Explorer Tree, and navigating to the "Role Members" property in the Property Grid. Note that when deploying, the [Deployment Wizard](../features/deployment.md) does not deploy role members by default.
+
+The biggest advantage of working with Roles through Tabular Editor, is that each Table object has a "Row Level Filters" property, which lets you view and edit the filters defined on that table, across all roles:
+
+
+
+Of course, you can also view the filters across all tables in one particular role, similar to the UI of SSMS or Visual Studio:
+
+
\ No newline at end of file
diff --git a/content/how-tos/script-reference-objects.md b/content/how-tos/script-reference-objects.md
new file mode 100644
index 0000000..64362b6
--- /dev/null
+++ b/content/how-tos/script-reference-objects.md
@@ -0,0 +1,20 @@
+---
+uid: scripting-referencing-objects
+title: Scripting/referencing objects
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ full: true
+---
+
+## Scripting/referencing objects
+You can use drag-and-drop functionality, to script out objects in the following ways:
+
+* Drag one or more objects to another Windows application (text editor or SSMS)
+JSON code representing the dragged object(s) will be created. When dragging the Model node, a Table, a Role or a Data Source, a "createOrReplace" script is created.
+
+* Dragging an object (measure, column or table) into the DAX expression editor, will insert a fully-qualified DAX-reference to the object in question.
+
+* Dragging an object to the Advanced Script editor, will insert the C# code necessary to access the object through the TOM tree.
\ No newline at end of file
diff --git a/content/how-tos/toc.md b/content/how-tos/toc.md
new file mode 100644
index 0000000..a6d1e68
--- /dev/null
+++ b/content/how-tos/toc.md
@@ -0,0 +1,37 @@
+# Scripting and Automation
+## [Advanced Scripting](Advanced-Scripting.md)
+## [Script Reference Objects](script-reference-objects.md)
+
+# Model Management and Deployment
+## [Deploy Current Model](deploy-current-model.md)
+## [Connect to SSAS](connect-ssas.md)
+## [Load and Save](load-save.md)
+## [Folder Serialization](folder-serialization.md)
+## [Master Model Pattern](Master-model-pattern.md)
+
+# Data Import and Tables
+## [Importing Tables (TE2)](Importing-Tables.md)
+## [Importing Tables from Excel (TE2)](importing-tables-from-excel.md)
+## [Replace Tables](replace-tables.md)
+
+# Model Organization and Structure
+## [Advanced Filtering of Explorer Tree](Advanced-Filtering-of-the-Explorer-Tree.md)
+## [Drag and Drop](drag-drop.md)
+## [Duplicate and Batch Rename](duplicate-batchrename.md)
+## [Edit Properties](edit-properties.md)
+
+# Translations and Perspectives
+## [Import/Export Translations](import-export-translations.md)
+## [Perspectives and Translations](perspectives-translations.md)
+
+# Data Security and Roles
+## [Roles and Row-Level Security](roles-rls.md)
+
+# Connectivity and Integration
+## [XMLA Analysis Services Connectivity](xmla-as-connectivity.md)
+## [Power BI XMLA PBIX Workaround](powerbi-xmla-pbix-workaround.md)
+
+# Model Maintenance
+## [Formula Fixup Dependencies](formula-fixup-dependencies.md)
+## [Metadata Backup](metadata-backup.md)
+## [Undo and Redo](undo-redo.md)
\ No newline at end of file
diff --git a/content/how-tos/undo-redo.md b/content/how-tos/undo-redo.md
new file mode 100644
index 0000000..dd5824b
--- /dev/null
+++ b/content/how-tos/undo-redo.md
@@ -0,0 +1,14 @@
+---
+uid: undo-redo
+title: Undo/Redo support
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ full: true
+---
+## Undo/Redo support
+Any change you make in Tabular Editor can be undone using CTRL+Z and subsequently redone using CTRL+Y. There is no limit to the number of operations that can be undone, but the stack is reset when you open a Model.bim file or load a model from a database.
+
+When deleting objects from the model, all translations, perspectives and relationships that reference the deleted objects are also automatically deleted (where as Visual Studio normally shows an error message that the object cannot be deleted). If you make a mistake, you can use the Undo functionality to restore the deleted object, which will also restore any translations, perspectives or relationships that were deleted. Note that even though Tabular Editor can detect [DAX formula dependencies](), Tabular Editor will not warn you in case you delete a measure or column which is used in the DAX expression of another measure or calculated column.
\ No newline at end of file
diff --git a/content/common/xmla-as-connectivity.md b/content/how-tos/xmla-as-connectivity.md
similarity index 76%
rename from content/common/xmla-as-connectivity.md
rename to content/how-tos/xmla-as-connectivity.md
index 9ed1830..95bfb87 100644
--- a/content/common/xmla-as-connectivity.md
+++ b/content/how-tos/xmla-as-connectivity.md
@@ -4,12 +4,18 @@ title: XMLA / Analysis Services connectivity
author: Daniel Otykier
updated: 2024-05-01
applies_to:
- versions:
- - version: 2.x
- - version: 3.x
- editions:
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ none: true
+ - edition: Business
+ partial: true
+ note: "Only Premium Per User XMLA Endpoints"
+ - edition: Enterprise
+ full: true
---
# XMLA / Analysis Services connectivity
@@ -182,3 +188,48 @@ If there are duplicate names, please refer to Microsoft's documentation in the s
### Proxy handling
Another common cause of connectivity issues is proxies. For more information about this, please review [this article](xref:proxy-settings).
+
+### Testing connectivity using PowerShell
+
+If connectivity issues persist even after attempting the troubleshooting steps mentioned above, it is also possible to connect directly to the XMLA endpoint using the [Microsoft-provided Analysis Services client libraries](https://www.nuget.org/packages/Microsoft.AnalysisServices/), *without* using Tabular Editor. We can do this using a simple PowerShell script as shown below. If this connection also fails, it is a clear indication that the issue is unrelated to Tabular Editor; in this case, you should consider raising a support ticket with Microsoft. When contacting Microsoft, inform them of which version of the **Microsoft.AnalysisServices.Tabular.dll** and **Microsoft.Identity.Client.dll** you're using, and also include the PowerShell script. Also, inform them whether you're using the .NET Core (Tabular Editor 3) or .NET Framework (Tabular Editor 2) versions of the DLLs. Avoid mentioning Tabular Editor directly in your support request, as this may confuse their 1st-level support. After creating the support ticket, please also notify us via support@tabulareditor.com, as we are interested in tracking the frequency of these issues.
+
+To use the script:
+
+1. Navigate to the Tabular Editor 3 installation folder through Windows Explorer
+2. Right-click somewhere in the folder and choose "Open in Terminal". This should open a PowerShell window. You can also open a regular command window and type `pwsh` to launch PowerShell.
+3. Check that the PowerShell version is at least 6.2.0. If the constrained language mode is restricted, try to open the terminal as an administrator or request assistance from your IT admin team to run the script.
+4. In notepad, adjust the XMLA URL in the script below to match the endpoint you're trying to connect to. Then, copy the modified script into the PowerShell window and hit [Enter] to run it.
+
+```powershell
+# Run this script from the Tabular Editor 3 installation folder, since this folder
+# contains all of the DLLs required.
+
+# Config
+# TODO: Update the XMLA URL below and modify connection string properties as needed
+$xmla = "powerbi://api.powerbi.com/v1.0/myorg/workspace-name"
+$connectionString = "Provider=MSOLAP;Data Source=$xmla;Interactive Login=Always;Identity Mode=Connection"
+
+# Load DLLs
+Add-Type -Path "Microsoft.AnalysisServices.Tabular.dll"
+
+# Create Microsoft.AnalysisServices.Tabular.Server object:
+$server = New-Object Microsoft.AnalysisServices.Tabular.Server
+
+try {
+ # Connect
+ $server.Connect($connectionString)
+
+ Write-Host "Connection succeeded." -ForegroundColor Green
+ Write-Host "Connected to: $($server.Name)"
+}
+catch {
+ Write-Host "Connection failed:" -ForegroundColor Red
+ Write-Host $_.Exception.Message -ForegroundColor Red
+}
+```
+
+If the script **succeeds**, it means that your machine is able to connect to the XMLA endpoint using the Microsoft client libraries. If, simultaneously, you're **not** able to connect using Tabular Editor, please post a ticket on our [Tabular Editor 2](https://github.com/TabularEditor/TabularEditor/issues) or [Tabular Editor 3](https://github.com/TabularEditor/TabularEditor3/issues) support page, or send an email to support@tabulareditor.com (**Tabular Editor 3 Enterprise Edition customers only**).
+
+If the script **fails**, something on your environment is blocking XMLA endpoint connectivity, and so Tabular Editor will also not be able to connect. In this case, please reach out to your IT department for troubleshooting firewalls/proxies, before contacting Microsoft support.
+
+If the script **succeeds** using Tabular Editor 2 DLLs, but **fails** using Tabular Editor 3 DLLs (or vice versa), please reach out to Microsoft support, since the issue in this case would be a discrepancy between the .NET Framework version of the DLLs (used by Tabular Editor 2) and the .NET Core version of the DLLs (used by Tabular Editor 3).
diff --git a/content/index.md b/content/index.md
index 8ea5703..eae00c0 100644
--- a/content/index.md
+++ b/content/index.md
@@ -23,7 +23,7 @@ Tabular Editor 3 is the evolution of Tabular Editor 2. It has been designed for
### [Tabular Editor 3](#tab/TE3)
Tabular Editor 3 is a more advanced application which offers a premium experience with many convenient features to combine all your data modeling and development needs in one single tool.
-
+
**Tabular Editor 3 main features:**
@@ -42,7 +42,7 @@ Tabular Editor 3 is a more advanced application which offers a premium experienc
Tabular Editor 2.x is a lightweight application for quickly modifying the TOM (Tabular Object Model) of an Analysis Services or Power BI data model. The tool was originally released in 2016 and receives regular updates and bugfixes.
-
+
**Tabular Editor 2.x main features:**
@@ -120,7 +120,7 @@ If you are new to tabular modeling in general, we recommend that you use the sta
## Next steps
-- [Tabular Editor 2.x documentation](te2/Getting-Started.md)
-- [Tabular Editor 3.x documentation](te3/getting-started.md)
+- [Get Started with Tabular Editor 2](xref:getting-started-te2)
+- [Get Started with Tabular Editor 3](xref:getting-started)
- [Tabular Editor 3 roadmap](xref:roadmap)
-- [Common features](common/common-features.md)
+
diff --git a/content/onboarding/optimizing-workflow-workspace-mode.md b/content/onboarding/optimizing-workflow-workspace-mode.md
deleted file mode 100644
index d238a35..0000000
--- a/content/onboarding/optimizing-workflow-workspace-mode.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-uid: optimizing-workflow-workspace-mode
-title: Optimizing development workflow using Workspace Mode
-author: Daniel Otykier
-updated: 2021-10-05
-applies_to:
- editions:
- - edition: Desktop
- none: x
- - edition: Business
- - edition: Enterprise
----
-
-# Optimizing development workflow using Workspace Mode
-[!include[workspace-mode](~/content/te3/workspace-mode.partial.md)]
-
-# Next steps
-
-- @powerbi-cicd
-- @as-cicd
-- @boosting-productivity-te3
\ No newline at end of file
diff --git a/content/onboarding/toc.md b/content/onboarding/toc.md
deleted file mode 100644
index 004605a..0000000
--- a/content/onboarding/toc.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# [Welcome](index.md)
-# @general-introduction
-## @installation-activation-basic
-## @migrate-from-vs
-## @migrate-from-desktop
-## @migrate-from-te2
-# @parallel-development
-## @optimizing-workflow-workspace-mode
-
-# @boosting-productivity-te3
-## @importing-tables-data-modeling
-## @refresh-preview-query
-## @creating-and-testing-dax
-## @dax-script-introduction
-## @bpa
-## @cs-scripts-and-macros
-## @personalizing-te3
diff --git a/content/te2/FAQ.md b/content/references/FAQ.md
similarity index 84%
rename from content/te2/FAQ.md
rename to content/references/FAQ.md
index f2db681..a52f303 100644
--- a/content/te2/FAQ.md
+++ b/content/references/FAQ.md
@@ -1,12 +1,16 @@
-# Frequently Asked Questions
+---
+uid: faq
+title: Frequently Asked Questions
+---
+# Frequently Asked Questions
## What is Tabular Editor?
Essentially, Tabular Editor provides a UI for editing the metadata making up an Analysis Services Tabular Model. The main difference between using Tabular Editor for editing a model versus using Visual Studio, is that Tabular Editor does not load any _data_ - only _metadata_. This means that no validations or calculations are performed when you create and modify measures, display folders, etc. Validations and calculations are performed only when the user chooses to persist the changes to the database. This provides a better developer experience for medium to large sized models, which tend to be slow to work with in Visual Studio.
-Additionally, Tabular Editor has a lot of [features](Features-at-a-glance.md) that will generally boost your productivity and make certain tasks easier.
+Additionally, Tabular Editor has a lot of [features](../getting-started/boosting-productivity-te3.md) that will generally boost your productivity and make certain tasks easier.
## Why do we need yet another tool for SSAS Tabular?
-Working with Analysis Services Tabular, you may already be familiar with SQL Server Data Tools (Visual Studio), [DAX Editor](https://www.sqlbi.com/tools/dax-editor/), [DAX Studio](https://www.sqlbi.com/tools/dax-studio/), [BISM Normalizer](http://bism-normalizer.com/) and [BIDSHelper](https://bidshelper.codeplex.com/). These are all excellent tools, each with their own purposes. Tabular Editor is not intended to replace any of these tools, but should rather be seen as a supplement to them. Please view the [Features at a glance](Features-at-a-glance.md) article, to see why Tabular Editor is justified.
+Working with Analysis Services Tabular, you may already be familiar with SQL Server Data Tools (Visual Studio), [DAX Editor](https://www.sqlbi.com/tools/dax-editor/), [DAX Studio](https://www.sqlbi.com/tools/dax-studio/), [BISM Normalizer](http://bism-normalizer.com/) and [BIDSHelper](https://bidshelper.codeplex.com/). These are all excellent tools, each with their own purposes. Tabular Editor is not intended to replace any of these tools, but should rather be seen as a supplement to them. Please view the [Why Tabular Editor](https://tabulareditor.com/why-tabular-editor) article, to see why Tabular Editor is justified.
## Why isn't Tabular Editor available as a plug-in for Visual Studio?
While a better user experience for working with Tabular Models inside Visual Studio would definitely be appreciated, a stand-alone tool provides some benefits over a plug-in: First of all, you **don't need a Visual Studio/SSDT installation to use Tabular Editor**. Tabular Editor only requires the AMO libraries, which is quite a small installation compared to VS. Secondly, TabularEditor.exe can be executed with command-line options for deployment, scripting, etc., which would not be possible in a .vsix (plug-in) project.
@@ -14,4 +18,4 @@ While a better user experience for working with Tabular Models inside Visual Stu
Also worth mentioning: Tabular Editor can be downloaded as a [standalone .zip file](https://github.com/TabularEditor/TabularEditor/releases/latest/download/TabularEditor.Portable.zip), meaning you do not need to install anything. In other words, you can run Tabular Editor without having admin rights on your Windows machine. Simply download the zip file, extract it, and run TabularEditor.exe.
## What features are planned for upcoming releases?
-You can view the current roadmap [here](Roadmap.md).
+You can view the current roadmap [here](roadmap.md).
diff --git a/content/te2/FormatDax.md b/content/references/FormatDax.md
similarity index 88%
rename from content/te2/FormatDax.md
rename to content/references/FormatDax.md
index 2e6548c..1f798e6 100644
--- a/content/te2/FormatDax.md
+++ b/content/references/FormatDax.md
@@ -1,6 +1,16 @@
-# FormatDax deprecation
-
-The `FormatDax` method (which is one of the available [helper methods](/Advanced-Scripting.md#helper-methods) in Tabular Editor) has been deprecated with the release of Tabular Editor 2.13.0.
+---
+uid: formatdax
+title: FormatDax deprecation
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ none: true
+---
+# FormatDax deprecation
+
+The `FormatDax` method (which is one of the available [helper methods](xref:advanced-scripting#helper-methods) in Tabular Editor) has been deprecated with the release of Tabular Editor 2.13.0.
The reason for the deprecation is that the web service at https://www.daxformatter.com/ was starting to experience a heavy load of multiple request in quick succession, which were causing issues at their end. This is because the `FormatDax` method performs a web request each time it is called in a script, and many people have been using scripts such as the following:
diff --git a/content/te2/Keyboard-Shortcuts.md b/content/references/Keyboard-Shortcuts2.md
similarity index 88%
rename from content/te2/Keyboard-Shortcuts.md
rename to content/references/Keyboard-Shortcuts2.md
index 2c99434..18406be 100644
--- a/content/te2/Keyboard-Shortcuts.md
+++ b/content/references/Keyboard-Shortcuts2.md
@@ -1,4 +1,14 @@
-# Keyboard Shortcuts
+---
+uid: shortcuts2
+title: Keyboard shortcuts Tabular Editor 2
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ none: true
+---
+# Keyboard Shortcuts
As of version 2.7.3, Tabular Editor now supports the following keyboard shortcuts:
diff --git a/content/te2/Roadmap.md b/content/references/Roadmap2-h.md
similarity index 100%
rename from content/te2/Roadmap.md
rename to content/references/Roadmap2-h.md
diff --git a/content/te2/SQL-Server-2017-support.md b/content/references/SQL-Server-2017-support-h.md
similarity index 100%
rename from content/te2/SQL-Server-2017-support.md
rename to content/references/SQL-Server-2017-support-h.md
diff --git a/content/te2/TabularEditor.TOMWrapper.md b/content/references/TabularEditor.TOMWrapper-h.md
similarity index 100%
rename from content/te2/TabularEditor.TOMWrapper.md
rename to content/references/TabularEditor.TOMWrapper-h.md
diff --git a/content/te3/other/downloads.md b/content/references/downloads.md
similarity index 99%
rename from content/te3/other/downloads.md
rename to content/references/downloads.md
index 6a04597..edef45d 100644
--- a/content/te3/other/downloads.md
+++ b/content/references/downloads.md
@@ -79,4 +79,4 @@ It is not necessary to remove previous installations when upgrading to a newer v
- .NET 6 portable (.zip): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.20.0.x64.zip), [x86](https://cdn.tabulareditor.com/files/TabularEditor.3.20.0.x86.zip)
- .NET 6 installer (.msi): [x64](https://cdn.tabulareditor.com/files/TabularEditor.3.20.0.x64.msi), [x86](https://cdn.tabulareditor.com/files/TabularEditor.3.20.0.x86.msi)
-For earlier builds, see the [full release history](release-history.md).
+For earlier builds, see the [full release history](release-history.md).
\ No newline at end of file
diff --git a/content/references/index.md b/content/references/index.md
new file mode 100644
index 0000000..fecd5e5
--- /dev/null
+++ b/content/references/index.md
@@ -0,0 +1,29 @@
+# References
+
+This section contains reference materials for Tabular Editor.
+
+## In this section
+
+### Downloads and Releases
+- @downloads - Download links and installation packages for Tabular Editor 3
+- @release-history - Complete version history with download links
+- @whats-new - Latest features and updates
+
+### Technical Reference
+- @faq - Frequently asked questions and answers
+- @preferences - Application settings and configuration options
+- @policies - The use of group policies
+- @shortcuts3 - Keyboard shortcuts reference with Tabular Editor 3
+- @shortcuts2 - Keyboard shortcuts reference with Tabular Editor 2
+- @user-options - Tabular Model User Options (.tmuo) File
+
+### Development and Planning
+- @roadmap - Product roadmap and future plans
+
+### Deprecated Features
+- @formatdax - Information about deprecated DAX formatting functionality
+
+---
+
+*Use this section to find detailed reference information, downloads, and technical documentation.*
+
diff --git a/content/common/policies.md b/content/references/policies.md
similarity index 91%
rename from content/common/policies.md
rename to content/references/policies.md
index 0f44e02..d6bd550 100644
--- a/content/common/policies.md
+++ b/content/references/policies.md
@@ -3,6 +3,18 @@ uid: policies
title: Policies
author: Daniel Otykier
updated: 2024-10-30
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Policies
@@ -39,4 +51,4 @@ If you want to ensure that Tabular Editor does not perform web requests, specify
## Disabling custom scripts
-If you want to ensure that Tabular Editor does not allow users to execute arbitrary code, specify the `DisableCSharpScripts` and `DisableMacros` policies.
+If you want to ensure that Tabular Editor does not allow users to execute arbitrary code, specify the `DisableCSharpScripts` and `DisableMacros` policies.
\ No newline at end of file
diff --git a/content/te3/features/preferences.md b/content/references/preferences.md
similarity index 96%
rename from content/te3/features/preferences.md
rename to content/references/preferences.md
index 0eded79..93c70aa 100644
--- a/content/te3/features/preferences.md
+++ b/content/references/preferences.md
@@ -3,6 +3,18 @@ uid: preferences
title: Controlling preferences
author: Daniel Otykier
updated: 2021-09-08
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Tabular Editor 3 Preferences
diff --git a/content/te3/other/release-history.md b/content/references/release-history.md
similarity index 99%
rename from content/te3/other/release-history.md
rename to content/references/release-history.md
index ddb3ce3..b603c3a 100644
--- a/content/te3/other/release-history.md
+++ b/content/references/release-history.md
@@ -1,3 +1,7 @@
+---
+uid: release-history
+title: Full release history
+---
# Full release history
- 2025-11-11 **Tabular Editor 3.24.2** (*[Release notes](release-notes/3_24_2.md)*)
diff --git a/content/te3/other/release-notes/3_0_1.md b/content/references/release-notes/3_0_1.md
similarity index 97%
rename from content/te3/other/release-notes/3_0_1.md
rename to content/references/release-notes/3_0_1.md
index d29b399..eaa08f5 100644
--- a/content/te3/other/release-notes/3_0_1.md
+++ b/content/references/release-notes/3_0_1.md
@@ -1,7 +1,7 @@
# Tabular Editor 3.0.1
> [!IMPORTANT]
-> A newer version of Tabular Editor is available. You can find the latest version [here](~/te3/other/release-notes).
+> A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
- Download [Tabular Editor 3.0.1](https://cdn.tabulareditor.com/files/TabularEditor.3.0.1.x86.msi)
- Download [Tabular Editor 3.0.1 (64 bit)](https://cdn.tabulareditor.com/files/TabularEditor.3.0.1.x64.msi)
diff --git a/content/te3/other/release-notes/3_0_10.md b/content/references/release-notes/3_0_10.md
similarity index 97%
rename from content/te3/other/release-notes/3_0_10.md
rename to content/references/release-notes/3_0_10.md
index 295c610..4a09302 100644
--- a/content/te3/other/release-notes/3_0_10.md
+++ b/content/references/release-notes/3_0_10.md
@@ -1,7 +1,7 @@
# Tabular Editor 3.0.10
> [!IMPORTANT]
-> A newer version of Tabular Editor is available. You can find the latest version [here](~/te3/other/release-notes).
+> A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
- Download [Tabular Editor 3.0.10 (64 bit)](https://cdn.tabulareditor.com/files/TabularEditor.3.0.10.x64.msi) *(recommended)*
- Download [Tabular Editor 3.0.10](https://cdn.tabulareditor.com/files/TabularEditor.3.0.10.x86.msi)
diff --git a/content/te3/other/release-notes/3_0_2.md b/content/references/release-notes/3_0_2.md
similarity index 97%
rename from content/te3/other/release-notes/3_0_2.md
rename to content/references/release-notes/3_0_2.md
index 3b0857f..640a845 100644
--- a/content/te3/other/release-notes/3_0_2.md
+++ b/content/references/release-notes/3_0_2.md
@@ -1,7 +1,7 @@
# Tabular Editor 3.0.2
> [!IMPORTANT]
-> A newer version of Tabular Editor is available. You can find the latest version [here](~/te3/other/release-notes).
+> A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
- Download [Tabular Editor 3.0.2](https://cdn.tabulareditor.com/files/TabularEditor.3.0.2.x86.msi)
- Download [Tabular Editor 3.0.2 (64 bit)](https://cdn.tabulareditor.com/files/TabularEditor.3.0.2.x64.msi)
diff --git a/content/te3/other/release-notes/3_0_3.md b/content/references/release-notes/3_0_3.md
similarity index 97%
rename from content/te3/other/release-notes/3_0_3.md
rename to content/references/release-notes/3_0_3.md
index 774902c..e53733e 100644
--- a/content/te3/other/release-notes/3_0_3.md
+++ b/content/references/release-notes/3_0_3.md
@@ -1,7 +1,7 @@
# Tabular Editor 3.0.3
> [!IMPORTANT]
-> A newer version of Tabular Editor is available. You can find the latest version [here](~/te3/other/release-notes).
+> A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
- Download [Tabular Editor 3.0.3](https://cdn.tabulareditor.com/files/TabularEditor.3.0.3.x86.msi)
- Download [Tabular Editor 3.0.3 (64 bit)](https://cdn.tabulareditor.com/files/TabularEditor.3.0.3.x64.msi)
diff --git a/content/te3/other/release-notes/3_0_4.md b/content/references/release-notes/3_0_4.md
similarity index 97%
rename from content/te3/other/release-notes/3_0_4.md
rename to content/references/release-notes/3_0_4.md
index 010c337..c5d3be4 100644
--- a/content/te3/other/release-notes/3_0_4.md
+++ b/content/references/release-notes/3_0_4.md
@@ -1,7 +1,7 @@
# Tabular Editor 3.0.4
> [!IMPORTANT]
-> A newer version of Tabular Editor is available. You can find the latest version [here](~/te3/other/release-notes).
+> A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
- Download [Tabular Editor 3.0.4](https://cdn.tabulareditor.com/files/TabularEditor.3.0.4.x86.msi)
- Download [Tabular Editor 3.0.4 (64 bit)](https://cdn.tabulareditor.com/files/TabularEditor.3.0.4.x64.msi)
diff --git a/content/te3/other/release-notes/3_0_5.md b/content/references/release-notes/3_0_5.md
similarity index 94%
rename from content/te3/other/release-notes/3_0_5.md
rename to content/references/release-notes/3_0_5.md
index 8deb4b1..f6d6460 100644
--- a/content/te3/other/release-notes/3_0_5.md
+++ b/content/references/release-notes/3_0_5.md
@@ -1,9 +1,9 @@
# Tabular Editor 3.0.5
> [!IMPORTANT]
-> A newer version of Tabular Editor is available. You can find the latest version [here](~/te3/other/release-notes).
+> A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
-- Download [Tabular Editor 3.0.5](https://cdn.tabulareditor.com/files/TabularEditor.3.0.5.x86.msi)
+ Download [Tabular Editor 3.0.5](https://cdn.tabulareditor.com/files/TabularEditor.3.0.5.x86.msi)
- Download [Tabular Editor 3.0.5 (64 bit)](https://cdn.tabulareditor.com/files/TabularEditor.3.0.5.x64.msi)
*If you haven't used Tabular Editor 3 before, you are eligible to a 30 day trial, which can be requested after installation. You can also [purchase a license](https://tabulareditor.com/#licensing).*
diff --git a/content/te3/other/release-notes/3_0_6.md b/content/references/release-notes/3_0_6.md
similarity index 97%
rename from content/te3/other/release-notes/3_0_6.md
rename to content/references/release-notes/3_0_6.md
index 84f360e..fdcd7af 100644
--- a/content/te3/other/release-notes/3_0_6.md
+++ b/content/references/release-notes/3_0_6.md
@@ -1,7 +1,7 @@
# Tabular Editor 3.0.6
> [!IMPORTANT]
-> A newer version of Tabular Editor is available. You can find the latest version [here](~/te3/other/release-notes).
+> A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
- Download [Tabular Editor 3.0.6 (64 bit)](https://cdn.tabulareditor.com/files/TabularEditor.3.0.6.x64.msi) *(recommended)*
- Download [Tabular Editor 3.0.6](https://cdn.tabulareditor.com/files/TabularEditor.3.0.6.x86.msi)
@@ -18,7 +18,7 @@
## Improvements in 3.0.6:
-- Support for consultancy licenses. [More details](https://tabulareditor.com/consultancy-edition/).
+- Support for consultancy licenses. [More details](https://tabulareditor.com/license-terms).
- DAX queries now display row counts and timings (see issue [#10](https://github.com/TabularEditor/TabularEditor3/issues/10))
- DAX queries are now limited to 1000 rows by default, to prevent timeouts/memory issues. This limit can be changed in Tools > Preferences > Data Browsing > DAX Query.
- Columns in the DAX query results can now be sorted and filtered (local sorting/filtering only). See issue [#60](https://github.com/TabularEditor/TabularEditor3/issues/60)
diff --git a/content/te3/other/release-notes/3_0_7.md b/content/references/release-notes/3_0_7.md
similarity index 97%
rename from content/te3/other/release-notes/3_0_7.md
rename to content/references/release-notes/3_0_7.md
index cc9d02d..61e8539 100644
--- a/content/te3/other/release-notes/3_0_7.md
+++ b/content/references/release-notes/3_0_7.md
@@ -1,7 +1,7 @@
# Tabular Editor 3.0.7
> [!IMPORTANT]
-> A newer version of Tabular Editor is available. You can find the latest version [here](~/te3/other/release-notes).
+> A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
- Download [Tabular Editor 3.0.7 (64 bit)](https://cdn.tabulareditor.com/files/TabularEditor.3.0.7.x64.msi) *(recommended)*
- Download [Tabular Editor 3.0.7](https://cdn.tabulareditor.com/files/TabularEditor.3.0.7.x86.msi)
diff --git a/content/te3/other/release-notes/3_0_8.md b/content/references/release-notes/3_0_8.md
similarity index 98%
rename from content/te3/other/release-notes/3_0_8.md
rename to content/references/release-notes/3_0_8.md
index de8215c..8ac0a6f 100644
--- a/content/te3/other/release-notes/3_0_8.md
+++ b/content/references/release-notes/3_0_8.md
@@ -1,7 +1,7 @@
# Tabular Editor 3.0.8
> [!IMPORTANT]
-> A newer version of Tabular Editor is available. You can find the latest version [here](~/te3/other/release-notes).
+> A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
- Download [Tabular Editor 3.0.8 (64 bit)](https://cdn.tabulareditor.com/files/TabularEditor.3.0.8.x64.msi) *(recommended)*
- Download [Tabular Editor 3.0.8](https://cdn.tabulareditor.com/files/TabularEditor.3.0.8.x86.msi)
diff --git a/content/te3/other/release-notes/3_0_9.md b/content/references/release-notes/3_0_9.md
similarity index 98%
rename from content/te3/other/release-notes/3_0_9.md
rename to content/references/release-notes/3_0_9.md
index 416f418..9826f4d 100644
--- a/content/te3/other/release-notes/3_0_9.md
+++ b/content/references/release-notes/3_0_9.md
@@ -1,7 +1,7 @@
# Tabular Editor 3.0.9
> [!IMPORTANT]
-> A newer version of Tabular Editor is available. You can find the latest version [here](~/te3/other/release-notes).
+> A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
- Download [Tabular Editor 3.0.9 (64 bit)](https://cdn.tabulareditor.com/files/TabularEditor.3.0.9.x64.msi) *(recommended)*
- Download [Tabular Editor 3.0.9](https://cdn.tabulareditor.com/files/TabularEditor.3.0.9.x86.msi)
diff --git a/content/te3/other/release-notes/3_10_0.md b/content/references/release-notes/3_10_0.md
similarity index 98%
rename from content/te3/other/release-notes/3_10_0.md
rename to content/references/release-notes/3_10_0.md
index 3d3e76e..49f7e93 100644
--- a/content/te3/other/release-notes/3_10_0.md
+++ b/content/references/release-notes/3_10_0.md
@@ -4,7 +4,7 @@ uid: release-3-10-0
# Tabular Editor 3.10.0
> [!IMPORTANT]
-> A newer version of Tabular Editor is available. You can find the latest version [here](~/te3/other/release-notes).
+> A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
# [**Downloads**](#tab/downloads)
@@ -78,7 +78,7 @@ Check out our [release blog](https://blog.tabulareditor.com/2023/08/23/tabular-e
---
## Coming from Tabular Editor 2.x?
-Watch [this video](https://www.youtube.com/watch?v=pt3DdcjfImY) to get an idea of the new features in Tabular Editor 3. Also, make sure to check our [onboarding guide](https://docs.tabulareditor.com/onboarding/index.html).
+Watch [this video](https://www.youtube.com/watch?v=pt3DdcjfImY) to get an idea of the new features in Tabular Editor 3. Also, make sure to check our [onboarding guide](https://docs.tabulareditor.com/getting-started/index.html).
**Tabular Editor 3 major features overview:**
- Fully customizable IDE, with multi-monitor, Hi-DPI support and themes
diff --git a/content/te3/other/release-notes/3_10_1.md b/content/references/release-notes/3_10_1.md
similarity index 98%
rename from content/te3/other/release-notes/3_10_1.md
rename to content/references/release-notes/3_10_1.md
index 042b5b1..84dbd6b 100644
--- a/content/te3/other/release-notes/3_10_1.md
+++ b/content/references/release-notes/3_10_1.md
@@ -4,7 +4,7 @@ uid: release-3-10-1
# Tabular Editor 3.10.1
> [!IMPORTANT]
-> A newer version of Tabular Editor is available. You can find the latest version [here](~/te3/other/release-notes).
+> A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
# [**Downloads**](#tab/downloads)
@@ -82,7 +82,7 @@ Check out our [release blog](https://blog.tabulareditor.com/2023/08/23/tabular-e
---
## Coming from Tabular Editor 2.x?
-Watch [this video](https://www.youtube.com/watch?v=pt3DdcjfImY) to get an idea of the new features in Tabular Editor 3. Also, make sure to check our [onboarding guide](https://docs.tabulareditor.com/onboarding/index.html).
+Watch [this video](https://www.youtube.com/watch?v=pt3DdcjfImY) to get an idea of the new features in Tabular Editor 3. Also, make sure to check our [onboarding guide](https://docs.tabulareditor.com/getting-started/index.html).
**Tabular Editor 3 major features overview:**
- Fully customizable IDE, with multi-monitor, Hi-DPI support and themes
diff --git a/content/te3/other/release-notes/3_11_0.md b/content/references/release-notes/3_11_0.md
similarity index 98%
rename from content/te3/other/release-notes/3_11_0.md
rename to content/references/release-notes/3_11_0.md
index 60c6b2a..ef56a0c 100644
--- a/content/te3/other/release-notes/3_11_0.md
+++ b/content/references/release-notes/3_11_0.md
@@ -4,7 +4,7 @@ uid: release-3-11-0
# Tabular Editor 3.11.0
> [!IMPORTANT]
-> A newer version of Tabular Editor is available. You can find the latest version [here](~/te3/other/release-notes).
+> A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
# [**Downloads**](#tab/downloads)
@@ -66,7 +66,7 @@ Check out our [release blog](https://blog.tabulareditor.com/2023/09/25/september
---
## Coming from Tabular Editor 2.x?
-Watch [this video](https://www.youtube.com/watch?v=pt3DdcjfImY) to get an idea of the new features in Tabular Editor 3. Also, make sure to check our [onboarding guide](https://docs.tabulareditor.com/onboarding/index.html).
+Watch [this video](https://www.youtube.com/watch?v=pt3DdcjfImY) to get an idea of the new features in Tabular Editor 3. Also, make sure to check our [onboarding guide](https://docs.tabulareditor.com/getting-started/index.html).
**Tabular Editor 3 major features overview:**
- Fully customizable IDE, with multi-monitor, Hi-DPI support and themes
diff --git a/content/te3/other/release-notes/3_12_0.md b/content/references/release-notes/3_12_0.md
similarity index 95%
rename from content/te3/other/release-notes/3_12_0.md
rename to content/references/release-notes/3_12_0.md
index 5faefdc..a937ac4 100644
--- a/content/te3/other/release-notes/3_12_0.md
+++ b/content/references/release-notes/3_12_0.md
@@ -4,7 +4,7 @@ uid: release-3-12-0
# Tabular Editor 3.12.0
> [!IMPORTANT]
-> A newer version of Tabular Editor is available. You can find the latest version [here](~/te3/other/release-notes).
+> A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
# [**Downloads**](#tab/downloads)
@@ -39,7 +39,7 @@ Tabular Editor 3.3.0 (and newer) uses .NET 6. You may have to install the [.NET
Check out our [release blog](https://blog.tabulareditor.com/2023/11/27/tabular-editor-3-november-2023-release) to get a brief overview of the most important updates in this release.
- Tabular Editor now displays a "What's New" page when the application is updated. The page informs you of new Tabular Editor features, along with community updates and other relevant news for Tabular Editor users. If the page is hidden, you can access it from the **Help > What's New**. You can disable this feature by unchecking **Tools > Preferences > Updates and Feedback > Show "What's New" page on startup**.
-- When prototyping new measures, it is quite common to specify them within the `DEFINE` block of a DAX query. In this update, we've added an easy way to create/update model measures based on measures defined within the DAX query. On the toolbar, through the **Query** menu, and through the right-click context menu of the DAX query editor, you will see 4 new options light up, which work very similarly to the "Apply" actions in [DAX Scripts](https://docs.tabulareditor.com/te3/features/dax-scripts.html#shortcuts), with the exception that only a measures' name and expression is applied (since it's not possible to specify other properties like Description, Display Folder, etc. through a DAX query). More details in the [blog post](https://blog.tabulareditor.com).
+- When prototyping new measures, it is quite common to specify them within the `DEFINE` block of a DAX query. In this update, we've added an easy way to create/update model measures based on measures defined within the DAX query. On the toolbar, through the **Query** menu, and through the right-click context menu of the DAX query editor, you will see 4 new options light up, which work very similarly to the "Apply" actions in [DAX Scripts](https://docs.tabulareditor.com/features/dax-scripts.html#shortcuts), with the exception that only a measures' name and expression is applied (since it's not possible to specify other properties like Description, Display Folder, etc. through a DAX query). More details in the [blog post](https://blog.tabulareditor.com).
- Please be aware that we're now using a new certificate to sign the binaries, in case your IT organization needs to expclitly approve 3rd party code certificates. The new certificate is issued by [GlobalSign GCC](https://www.globalsign.com/en) and the certificate is issued directly to [Tabular Editor ApS](https://tabulareditor.com/contact).
## Improvements in 3.12.0
@@ -77,7 +77,7 @@ Check out our [release blog](https://blog.tabulareditor.com/2023/11/27/tabular-e
---
## Coming from Tabular Editor 2.x?
-Watch [this video](https://www.youtube.com/watch?v=pt3DdcjfImY) to get an idea of the new features in Tabular Editor 3. Also, make sure to check our [onboarding guide](https://docs.tabulareditor.com/onboarding/index.html).
+Watch [this video](https://www.youtube.com/watch?v=pt3DdcjfImY) to get an idea of the new features in Tabular Editor 3. Also, make sure to check our [onboarding guide](https://docs.tabulareditor.com/getting-started/index.html).
**Tabular Editor 3 major features overview:**
- Fully customizable IDE, with multi-monitor, Hi-DPI support and themes
diff --git a/content/te3/other/release-notes/3_12_1.md b/content/references/release-notes/3_12_1.md
similarity index 99%
rename from content/te3/other/release-notes/3_12_1.md
rename to content/references/release-notes/3_12_1.md
index 7ea25ba..5815f8e 100644
--- a/content/te3/other/release-notes/3_12_1.md
+++ b/content/references/release-notes/3_12_1.md
@@ -4,7 +4,7 @@ uid: release-2-12-1
# Tabular Editor 3.12.1
> [!IMPORTANT]
-> A newer version of Tabular Editor is available. You can find the latest version [here](~/te3/other/release-notes).
+> A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
# [**Downloads**](#tab/downloads)
diff --git a/content/te3/other/release-notes/3_13_0.md b/content/references/release-notes/3_13_0.md
similarity index 97%
rename from content/te3/other/release-notes/3_13_0.md
rename to content/references/release-notes/3_13_0.md
index 2668277..258c28d 100644
--- a/content/te3/other/release-notes/3_13_0.md
+++ b/content/references/release-notes/3_13_0.md
@@ -1,9 +1,9 @@
# Tabular Editor 3.13.0
> [!IMPORTANT]
-> A newer version of Tabular Editor is available. You can find the latest version [here](~/te3/other/release-notes).
+> A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
-# [**Downloads**](#tab/downloads)
+ A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
Tabular Editor 3.13.0 downloads:
diff --git a/content/te3/other/release-notes/3_14_0.md b/content/references/release-notes/3_14_0.md
similarity index 99%
rename from content/te3/other/release-notes/3_14_0.md
rename to content/references/release-notes/3_14_0.md
index 99564fa..565a472 100644
--- a/content/te3/other/release-notes/3_14_0.md
+++ b/content/references/release-notes/3_14_0.md
@@ -4,7 +4,7 @@ uid: release-3-14-0
# Tabular Editor 3.14.0
> [!IMPORTANT]
-> A newer version of Tabular Editor is available. You can find the latest version [here](~/te3/other/release-notes).
+> A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
# [**Downloads**](#tab/downloads)
diff --git a/content/te3/other/release-notes/3_15_0.md b/content/references/release-notes/3_15_0.md
similarity index 98%
rename from content/te3/other/release-notes/3_15_0.md
rename to content/references/release-notes/3_15_0.md
index a508237..8efb405 100644
--- a/content/te3/other/release-notes/3_15_0.md
+++ b/content/references/release-notes/3_15_0.md
@@ -4,7 +4,7 @@ uid: release-3-15-0
# Tabular Editor 3.15.0
> [!IMPORTANT]
-> A newer version of Tabular Editor is available. You can find the latest version [here](~/te3/other/release-notes).
+> A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
# [**Downloads**](#tab/downloads)
@@ -38,7 +38,7 @@ Tabular Editor 3 uses .NET 6. If you're using the portable version, you may have
Check out our [release blog](https://blog.tabulareditor.com/2024/04/24/tabular-editor-3-april-2024-release/) to get a brief overview of the most important updates in this release.
-- We have a new **Preview** feature this month: **DAX Optimizer integration**. If you have a DAX Optimizer account, you can connect to your workspaces, upload VPAX files, and view [DAX Optimizer](https://daxoptimizer.com) results directly in Tabular Editor. [More information](https://docs.tabulareditor.com/te3/features/dax-optimizer-integration).
+- We have a new **Preview** feature this month: **DAX Optimizer integration**. If you have a DAX Optimizer account, you can connect to your workspaces, upload VPAX files, and view [DAX Optimizer](https://daxoptimizer.com) results directly in Tabular Editor. [More information](https://docs.tabulareditor.com/features/dax-optimizer-integration.html).
- We now support adding [Data Coverage Definition expressions](https://learn.microsoft.com/en-us/analysis-services/tom/table-partitions?view=asallproducts-allversions#define-the-data-coverage-of-the-directquery-partition) to partitions in DirectQuery mode.
- Tabular Editor will now add a `__TEdtr` annotation to your model when metadata is saved to disk (either as Model.bim, Database.json or TMDL). This annotation is used by Microsoft for analytics about Tabular Editor usage for semantic models published to a Power BI or Fabric workspace. This annotation may also be required for certain features to work correctly in Power BI / Fabric, when a model was edited using Tabular Editor.
- The **New Model** dialog now has a **Direct Lake** checkbox*, which will configure the model to use the new Direct Lake storage mode in Fabric. [More information](https://docs.tabulareditor.com/common/Datasets/direct-lake-dataset.html). Moreover, you can now explicitly choose the *Compatibility Mode* when entering the *Compatibility Level* manually.
diff --git a/content/te3/other/release-notes/3_16_0.md b/content/references/release-notes/3_16_0.md
similarity index 97%
rename from content/te3/other/release-notes/3_16_0.md
rename to content/references/release-notes/3_16_0.md
index 920463b..3b266e6 100644
--- a/content/te3/other/release-notes/3_16_0.md
+++ b/content/references/release-notes/3_16_0.md
@@ -4,7 +4,7 @@ uid: release-3-16-0
# Tabular Editor 3.16.0
> [!IMPORTANT]
-> A newer version of Tabular Editor is available. You can find the latest version [here](~/te3/other/release-notes).
+> A newer version of Tabular Editor is available. You can find the latest version [here](https://docs.tabulareditor.com/references/release-notes).
## [**Downloads**](#tab/downloads)
@@ -44,7 +44,7 @@ We have substantially overhauled how **Pivot Grids** work in this release. Some
- Hidden objects (measures, columns, hierarchies) can now be used in a Pivot Grid, and object renames should no longer cause the Pivot Grid to lose its layout or clear any filters.
- A new and improved Pivot Grid **Field List**, which is now shown by default, and provides a more familiar experience when adding fields to the Pivot Grid.
- Head on over to the [Pivot Grid documentation](https://docs.tabulareditor.com/te3/features/pivot-grid.html) to learn more about these changes.
+ Head on over to the [Pivot Grid documentation](https://docs.tabulareditor.com/features/pivot-grid.html) to learn more about these changes.
## Improvements in 3.16.0
@@ -63,7 +63,7 @@ We have substantially overhauled how **Pivot Grids** work in this release. Some
- Pressing control-key combinations that do not have any keybinding assigned, should no longer cause special control chars to be inserted in code editors.
- Macros that have been modified and saved, should no longer execute multiple times when invoked through the UI.
- The `.Output()` method should now show the output dialog on subsequent macro executions, even when the **Don't show more outputs** option was checked on a previous execution.
-- Unquoted table name references that also happen to be DAX keywords (such as `Currency`), will no longer be treated as keywords during auto-formatting (i.e. they will not be capitalized). Moreover, certain object properties in DAX scripts can now also be empty. View the updated [DAX Scripts documentation](https://docs.tabulareditor.com/te3/features/dax-scripts.html) for more information.
+- Unquoted table name references that also happen to be DAX keywords (such as `Currency`), will no longer be treated as keywords during auto-formatting (i.e. they will not be capitalized). Moreover, certain object properties in DAX scripts can now also be empty. View the updated [DAX Scripts documentation](https://docs.tabulareditor.com/features/dax-scripts.html) for more information.
- Errors during DAX script execution are now handled gracefully, and the changes made by the script before the error was encountered, are automatically rolled back.
- Fixed a bug where macro buttons assigned to custom toolbars did not persist after restarting the application.
- Fixed a bug that would cause Tabular Editor to crash when using the `ForEachModel.AllMeasures.Count().Output();
-Explanation: The Model object represents the root of the TOM tree. It supports most of the properties found in the API documentation with the addition of a number of extra properties and methods, that are only available inside Tabular Editor. The AllMeasures property is one of these extra properties, added for convenience. It simply returns a collection of all measures across all tables in the model. All collections (or more precisely, enumerables) support the powerful .NET LINQ methods. Count() is one such method, which simply returns the number of elements in the collection as an integer. Once we have that, the only thing left is to Output() it.:ObjectType="Measure"
-Explanation: When you put a ':' as the first character of the Filter textbox, you enable Dynamic LINQ filtering. What that means is, that Tabular Editor evaluates the expression after the ':' character against every object in the TOM tree, returning only those objects where the expression evaluates to true. Putting the expression above into the Filter textbox, will have Tabular Editor display all objects whose ObjectType property is "Measure". The search result count at the bottom of the screen, should then tell you how many measures you have in total.Model.AllMeasures.Where(m => m.Expression.Contains("TODO")).Output();
-Explanation: The first part of this script is the same as in question 1. Where(x => y) is another .NET LINQ method, that filters the preceding collection based on a so-called predicate. The predicate is expressed using the special C# Lambda notation x => y. On the left side of the arrow, you declare a variable with a name of your choice. The expression to the right of the arrow will be evaluated for every object in the collection, using the variable on the left to represent individual objects. This expression can be any valid C# expression that evaluates to a boolean value (true or false). Thus, the Where method simply filters the collection to return only those objects where the Lambda expression evaluates to true. So in the example above, we decide to use m as the name of our variable, which will represent the individual measures of our model. But we only want to keep measures whose Expression property Contains the word "TODO". Makes sense?:ObjectType="Measure" and Expression.Contains("TODO")
-Explanation: The first part of this Dynamic LINQ expression is identical to question 1. Dynamic LINQ lets you use many different operators such as and or or to express complex logic. Notice how the second part of the expression is similar to the C# Lambda expression used above, except that we don't declare a variable to represent the measure. Since Dynamic LINQ is evaluated against every object in the TOM tree, any property or method name we add to the expression will implicitly be evaluated against the current object. Since different types of objects have different properties, no error is produced if the Filter box contains an invalid expression. However, when writing Dynamic LINQ expressions within the Best Practice Analyzer, an error will be shown if you try to access a property or method that doesn't exist on the chosen object types.
-Selected.Measure.ReferencedBy.Measures.Count().Output();
-Explanation: Selected.Measure refers to the currently selected measure in the explorer tree. All objects that can be referenced through DAX (measures, tables, columns, KPIs) have the ReferencedBy property, which is a special collection of objects that directly reference the former. Although we could use the LINQ-method .OfType<Measure>() to filter the collection to measures only, this particular collection contains a set of convenient properties that does this for us. One of them, is Measures.:ObjectType="Measure" and DependsOn.Measures.Any(Name="Reseller Total Sales")
-Explanation: It's not possible to create a Dynamic LINQ filter expression based on the current selection, so instead we consider a specific measure in this example, [Reseller Total Sales]. The example here, will return all those objects who have a direct dependency on a measure named "Reseller Total Sales". The reason we're using "DependsOn" instead of "ReferencedBy" here, is that search filter expressions are evaluated against every single object in the model. That's the opposite of what we're doing in the C# script, where we already have a handle to a specific measure and want to obtain the list of measures referencing that measure.
-Selected.Measure.ReferencedBy.Deep().OfType<Measure>().Count().Output();
-Here, we add the Deep() method to recursively traverse the dependency tree, to get a collection of all objects that reference the original measure either directly, or indirectly through other objects. We have to manually filter this collection to objects of type "Measure", to avoid seeing Calculated Columns, RLS Expressions, etc. The only thing left then, is to Count() the number of items in this result and Output() it to the screen.Selected.Measure.ReferencedBy.Deep().OfType().Output();
-:ObjectType="Measure" and DependsOn.Deep().Any(Name="Reseller Total Sales")
-Explanation: All methods that can be called using C# may also be called using Dynamic LINQ. So just like we did above, we're calling the Deep() method to recursively traverse the dependency tree upwards, to find all objects that have a dependency on an object named "Reseller Total Sales". Strictly speaking, this is not exactly the same as the C# expression above, as we would also get a positive hit on non-measure type objects with the name "Reseller Total Sales". To work around that, we could either explicitly state that we only want to consider measures...
-:DependsOn.Deep().Any(Name="Reseller Total Sales" and ObjectType="Measure")
-...or we could use the DaxObjectFullName property to check for a hit (column names would be fully qualified, and measures must be uniquely named across the entire model):
-:DependsOn.Deep().Any(DaxObjectFullName="[Reseller Total Sales]")
-var t = Model.Tables["Reseller Sales"];
-t.UsedInRelationships.Where(r => r.FromTable == t).Select(r => r.ToTable).Output();
-Explanation: Okay, I admit, this one is a little tricky and because I used a variable to hold the given table, we end up with 2 lines of code instead of one. The naïve approach would be to simply write t.RelatedTables.Output();, but since the question specifically asked us to output only related dimension tables, we need to consider only those relationships where our given table is on the "From" side. That is the purpose of t.UsedInRelationships.Where(r => r.FromTable == t). If we just wanted the list of outgoing relationships, we'd be done here, but since we want a list of the tables pointed to by those relationships, we need to project this list to get the `ToTable` property of each relationship. That's exactly what .Select(r => r.ToTable) does. Makes sense? Now check out the Dynamic LINQ solution below.:UsedInRelationships.Any(ToTable=current and FromTable.Name = "Reseller Sales")
-Explanation: Let's read this expression from left to right, keeping in mind that this is evaluated for every object in the model. UsedInRelationships is a list of relationships in which the current object participates. At this point, we've ruled out anything that's not a table or a column object, as these are the only ones that have the UsedInRelationships property. To filter anything that's not a dimension table, we only want to consider relationships pointing to the current object, from the table in question. .Any( ... ) evaluates to true if at least one of the relationships satisfies the condition: ToTable=current and FromTable.Name = "Reseller Total Sales". The special keyword current refers to the current object being evaluated. As we're equating this with the ToTable property of the relationship, we're ruling out columns from the search result, as this property can only be of type Table. FromTable.Name = ... is self-explanatory.
-Model.AllMeasures.Where(m => System.Text.RegularExpressions.Regex.IsMatch(m.Name, "Total.*Amount")).Output();
-Explanation: This one is actually quite annoying to do in the Advanced Script tab. Strictly speaking, we would actually have to search all the collections (Tables, AllMeasures, AllColumns, AllHierarchies, ...) and then concatenate the result, if we wanted to see them all in one view. Additionally, since the System.Text.RegularExpressions namespace is not in scope by default, the script is not really that typing-friendly. Check out the Dynamic LINQ solution instead.:Regex.IsMatch(Name, "Total.*Amount")
-Beautiful, isn't it?
-Model.AllMeasures.Where(m => System.Text.RegularExpressions.Regex.IsMatch(m.Name, "Total.*Amount", RegexOptions.IgnoreCase)).Output();:Regex.IsMatch(Name, "Total.*Amount", "IgnoreCase")
-
-If the setting is enabled, a compressed (zipped) version of the existing model metadata will be saved to this location whenever you use the Deployment Wizard, or when you click the "Save" button while connected to a (workspace) database.
-
-## Formula Fix-up and Formula Dependencies
-Tabular Editor continuously parses the DAX expressions of all measures, calculated columns and calculated tables in your model, to construct a dependency tree of these objects. This dependency tree is used for the Formula Fix-up functionality, which may be enabled under "File" > "Preferences". Formula Fix-up automatically updates the DAX expression of any measure, calculated column or calculated table, whenever an object that was referenced in the expression is renamed.
-
-To visualize the dependency tree, right-click the object in the explorer tree and choose "Show dependencies..."
-
-
-
-## Import/Export Translations
-Select one or more cultures in the Explorer Tree, right-click and choose "Export Translations..." to generate a .json file that can be imported later in either Tabular Editor or Visual Studio. Choose "Import Translations..." to import a corresponding .json file. You can choose whether to overwrite existing translations. If you don't, translations defined in the .json file will only be applied to objects that do not already have a translation for the given culture.
-
-## Folder Serialization
-This feature allows you to more easily integrate your SSAS Tabular Models in a file-based source control environment such as TFS, SubVersion or Git. By choosing "File" > "Save to Folder...", Tabular Editor will deconstruct the Model.bim file and save its content as separate files in a folder structure similar to the structure of the JSON within the Model.bim. When subsequently saving the model, only files with changed metadata will be touched, meaning most version control systems can easily detect which changes have been done to the model, making source merging and conflict handling a lot easier, than when working with a single Model.bim file.
-
-
-
-By default, objects are serialized down to the lowest object level (meaning measures, columns and hierarchies are stored as individual .json files).
-
-Additionally, Tabular Editor's [command-line syntax](xref:command-line-options) supports loading a model from this folder structure and deploying it directly to a database, making it easy for you to automate builds for continuous integration workflows.
-
-If you want to customize the granularity at which metadata is saved to individual files, go to File > Preferences and click the "Save to folder"-tab. Here, it's possible to toggle some serialization options which are passed to the TOM when serializing into JSON. Furthermore, you can check/uncheck the types of objects for which individual files will be generated. In some Version Control scenarios, you might want to store everything related to one table in a file on its own, where as in other scenarios you may need individual files for columns and measures.
-
-These settings are saved in an annotation on the model, the first time you use the Save to Folder function, so that the settings are reused when the model is loaded and the "Save"-button is subsequently clicked. If you want to apply new settings, use "File > Save to Folder..." again.
-
-
-
-## User Settings Files
-
-When Tabular Editor is executed, it writes some additional files to the disk at various locations. What follows is a description of these files and their content:
-
-### In %ProgramData%\TabularEditor
-
-- **BPARules.json** Best Practice Analyzer rules that are available to all users.
-- **TOMWrapper.dll** This file is used when executing scripts inside Tabular Editor. You can also reference the .dll in your own .NET projects, to utilise the wrapper code. If you are having issues executing advanced scripts after upgrading Tabular Editor, please delete this file and restart Tabular Editor.
-- **Preferences.json** This file stores all preferences set in the File > Preferences dialog.
-
-### In %AppData%\Local\TabularEditor
-
-- **BPARules.json** Best Practice Analyzer rules that are available only to the current user.
-- **CustomActions.json** Custom script actions that can be invoked from the right-click menu or the Tools-menu of the Explorer Tree. These actions can be created on the Advanced Script Editor tab.
-- **RecentFiles.json** Stores a list of recently opened .bim files. The last most 10 items in this list is displayed in the File > Recent Files menu.
-- **RecentServers.json** Stores a list of recently accessed server names. These are displayed in the dropdown portion of the "Connect to Database" dialog box and in the Deployment Wizard.
diff --git a/content/te2/Best-Practice-Analyzer.md b/content/te2/Best-Practice-Analyzer.md
deleted file mode 100644
index ae0a548..0000000
--- a/content/te2/Best-Practice-Analyzer.md
+++ /dev/null
@@ -1,145 +0,0 @@
-# Best Practice Analyzer
-
-> [!NOTE]
-> Some of the information and screenshots in this article is outdated, as the Best Practice Analyzer has received a [complete overhaul in Tabular Editor v. 2.8.1](Best-Practice-Analyzer-Improvements.md). Information on Dynamic LINQ (rule expressions) is still up-to-date.
-
-Inspired by [this excellent suggestion](https://github.com/TabularEditor/TabularEditor/issues/39), I am proud to present the Best Practice Analyzer (BPA) - a brand new feature of Tabular Editor. Go to the Tools-menu and click "Best Practice Analyzer...", this will open the following window (you can continue working on your model in the main window, while the BPA window stays open):
-
-
-
-BPA lets you define rules on the metadata of your model, to encourage certain conventions and best practices while developing in SSAS Tabular.
-
-Clicking one of the rules in the top list, will show you all objects that satisfy the conditions of the given rule in the bottom list:
-
-
-
-Double-clicking an object in the list switches the focus back to the main Tabular Editor window, where the object will be selected in the Explorer Tree ("Go to object..."). It is also possible to specify that a rule should be ignored entirely (can also be done by removing the checkmarks from the rule list), or ignored only for a specific object. Ignores are stored in the metadata annotations of the Model.bim file.
-
-To create a new rule, simply click "Add rule..." while you have a Tabular Model loaded in Tabular Editor. This opens a new window, where you can give your rule a name, a description and specify the conditions of the rule:
-
-
-
-A visual rule builder is planned for a later release. For now, you specify the rule condition using a [Dynamic LINQ expression](https://github.com/kahanu/System.Linq.Dynamic/wiki/Dynamic-Expressions) that allows you to access all properties on the type(s) of object(s) specified in the dropdown. All objects that satisfy the condition will show up in the BPA UI when the rule is selected.
-
-By default, a rule created this way will be added to the metadata annotations of the Model object and stored in the Model.bim file or the connected database, when you click "Save" in Tabular Editor. You can promote a rule stored locally in a model to a "global" rule. Global rules are stored in your %AppData%\Local\TabularEditor folder in a file called "BPARules.json". You can also put the BPARules.json in the %ProgramData%\TabularEditor folder, to make the rules available to all users on the machine.
-
-Note that the rule ID's must always be unique. In case a rule within the model metadata has the same ID as a rule in the %AppData% or %ProgramData% folder, the order of precedence is:
-
-- Rules stored locally in the model
-- Rules stored in the %AppData%\Local folder
-- Rules stored in the %ProgramData% folder
-
-## Rule Expression Samples
-In this section, you'll see some examples of Dynamic LINQ expressions that can be used to define rules. The expression that is entered in the Rule Expression Editor, will be evaluated whenever focus leaves the textbox, and any syntax errors will be shown on top of the screen:
-
-
-
-Your rule expressions may access any public properties on the objects in the TOM. If you try to access a property that does not exist on that type of object, an error will also be shown:
-
-
-
-"Expression" does not exist on the "Column" object, but if we switch the dropdown to "Calculated Columns", the statement above works fine:
-
-
-
-Dynamic LINQ supports all the standard arithmetic, logical and comparison operators, and using the "."-notation, you can access subproperties and -methods of all objects.
-
-```
-String.IsNullOrWhitespace(Expression) and not Name.StartsWith("Dummy")
-```
-
-The above statement, applied to Calculated Columns, Calculated Tables or Measures, flags those that have an empty DAX expression unless the object's name starts with the text "Dummy".
-
-Using LINQ, we can also work with collections of objects. The following expression, applied to tables, will find those that have more than 10 columns which are not organized in Display Folders:
-
-```
-Columns.Count(DisplayFolder = "") > 10
-```
-
-Whenever we use a LINQ method to iterate over a collection, the expression used as an argument to the LINQ method is evaluated on the items in the collection. Indeed, DisplayFolder is a property on columns that does not exist at the Table level.
-
-Here, we see this rule in action on the Adventure Works tabular model. Note how the "Reseller" table shows up as being in violation, while the "Reseller Sales" does not show up (columns in the latter have been organized in Display Folders):
-
-
-
-To refer to the parent object inside a LINQ method, use the special "outerIt" syntax. This rule, applied to tables, will find those that contain columns whose name does not start with the table name:
-
-```
-Columns.Any(not Name.StartsWith(outerIt.Name))
-```
-
-It would probably make more sense to apply this rule to Columns directly, in which case it should be written as:
-
-```
-not Name.StartsWith(Table.Name)
-```
-
-To compare against enumeration properties, simply pass the enumerated value as a string. This rule, will find all columns whose name end with the word "Key" or "ID", but where the SummarizeBy property has not been set to "None":
-
-```
-(Name.EndsWith("Key") or Name.EndsWith("ID")) and SummarizeBy <> "None"
-```
-
-## Finding unused objects
-When building Tabular Models it is important to avoid high-cardinality columns at all costs. Typical culprits are system timestamps, technical keys, etc. that have been imported to the model by mistake. In general, we should make sure that the model only contains columns that are actually needed. Wouldn't it be nice if the Best Practice Analyzer could tell us which columns are likely not needed at all?
-
-The following rule will report columns that:
-
-- ...are hidden (or whose parent table is hidden)
-- ...are not referenced by any DAX expressions (considers all DAX expressions in the model - even drillthrough and RLS filter expressions)
-- ...do not participate in any relationships
-- ...are not used as the "Sort By"-column of any other column
-- ...are not used as levels of a hierarchy.
-
-The Dynamic LINQ expression for this BPA rule is:
-
-```
-(IsHidden or Table.IsHidden)
-and ReferencedBy.Count = 0
-and (not UsedInRelationships.Any())
-and (not UsedInSortBy.Any())
-and (not UsedInHierarchies.Any())
-```
-
-The same technique can be used to find unused measures. It's a little simpler, since measures can't participate in relationships, etc. So instead, let's spice things up a bit, by also considering whether any downstream objects that reference a given measure, are visible or not. That is, if measure [A] is referenced by measure [B], and both measure [A]" and [B] are hidden, and no other DAX expressions refer to these two measures, we should let the developer know that it is safe to remove both of them:
-
-```
-(IsHidden or Table.IsHidden)
-and not ReferencedBy.AllMeasures.Any(not IsHidden)
-and not ReferencedBy.AllColumns.Any(not IsHidden)
-and not ReferencedBy.AllTables.Any(not IsHidden)
-and not ReferencedBy.Roles.Any()
-```
-
-## Fixing objects
-In some cases, it is possible to automatically fix the issues on objects satisfying the criteria of a rule. For example when it's just a matter of setting a simple property on the object. Take a closer look at the JSON behind the following rule:
-
-```json
-{
- "ID": "FKCOLUMNS_HIDDEN",
- "Name": "Hide foreign key columns",
- "Category": null,
- "Description": "Columns used on the Many side of a relationship should be hidden.",
- "Severity": 1,
- "Scope": "Column",
- "Expression": "Model.Relationships.Any(FromColumn = outerIt) and not IsHidden and not Table.IsHidden",
- "FixExpression": "IsHidden = true",
- "Compatibility": [
- 1200,
- 1400
- ],
- "IsValid": false
-}
-```
-
-This rule finds all columns that are used in a relationship (on the "Many"/"From" side), but where the column or its parent table are not hidden. It is recommended that such columns are never shown, as users should filter data using the related (dimension) table instead. So the fix in this case, would be to set the columns IsHidden property to true, which is exactly what the "FixExpression" string above does. To see this in action, right-click any objects that violate the rule, and choose "Generate Fix Script". This puts a small script into the clipboard, which can be pasted into the Advanced Script Editor, from where you can easily review the code and execute it:
-
-
-
-Remember that you can always undo (CTRL+Z) changes done to a model after script execution.
-
-Feedback on this new tool is most welcome! In the future, we plan to provide a set of universal Best Practices that will ship with Tabular Editor to get you started. Furthermore, plans are in motion to make the Best Practice Analyzer available as a plug-in to Visual Studio, so those of you not using Tabular Editor can still benefit from it.
-
-## Official Best Practice Rules
-
-Microsoft has provided a set of standard Best Practice Rules. The definition of these rules is available in [this GitHub repository](https://github.com/microsoft/Analysis-Services/tree/master/BestPracticeRules). Microsoft encourages community contributions and feedback to this repository. For more details and background on these rules, please view [this official blogpost](https://powerbi.microsoft.com/en-us/blog/best-practice-rules-to-improve-your-models-performance/).
diff --git a/content/te2/Features-at-a-glance.md b/content/te2/Features-at-a-glance.md
deleted file mode 100644
index a983045..0000000
--- a/content/te2/Features-at-a-glance.md
+++ /dev/null
@@ -1,80 +0,0 @@
-# Basic Features
-
-The following article will give you a quick overview of the most important features of Tabular Editor.
-
-## Load/save Model.bim files
-Hitting CTRL+O shows an Open File dialog, which lets you select a Model.bim file to load in Tabular Editor. The file must be of Compatibility Level 1200 or newer (JSON format). CTRL+S saves any changes you make in Tabular Editor back to the file (we recommend backing up your Model.bim files before using Tabular Editor). If you want to deploy the loaded model to an Analysis Services server instance, see [Deployment](/te2/Features-at-a-glance#deployment) below.
-
-## Connect/deploy to SSAS Tabular Databases
-Hitting CTRL+SHIFT+O lets you open a Tabular Model directly from a Tabular Database that has already been deployed. Enter the server address and (optionally) provide a username and password. After hitting "OK", you will be prompted with a list of databases and the server. Select the one you want to load, and click "OK" again.
-
-
-
-The dialog shown also lets you connect to Azure Analysis Services instances, if you provide the full name of the Azure AS instance, starting with "azureas://". The "Local Instance" dropdown, may be used to browse and connect to any running instances of Power BI Desktop or Visual Studio Integrated Workspaces. **Note that although Tabular Editor can make changes to a Power BI model through the TOM, this is not supported by Microsoft and may corrupt your .pbix file. Proceed at your own risk!**
-
-Any time you press CTRL+S after the database has been loaded, the database will be updated with any changes you've made in Tabular Editor. Client tools (Excel, Power BI, DAX Studio, etc.) should be able to immediately view the changes in the database after this. Note that you may need to manually recalculate objects in the model, depending on the changes made, to successfully query the model.
-
-If you want to save the connected model to a Model.bim file, choose "Save As..." from the "File" menu.
-
-## Deployment
-If you want to deploy the currently loaded model to a new database, or overwrite an existing database with the model changes (for example when loading from a Model.bim file), use the Deployment Wizard under "Model" > "Deploy...". The wizard will guide you through the deployment process, and allow you to choose which areas of the model to deploy. More information can be found [here](/te2/Advanced-features#deployment-wizard).
-
-## Hierarchical display
-Objects of the loaded model are shown in the Explorer Tree, on the left side of the screen. By default, all object types (visible tables, roles, relationships, etc.) are shown. If you only want to see tables, measures, columns and hierarchies, go to the "View" menu and toggle off "Show all object types".
-
-
-
-Expanding a table in the "Tables" group, you will find the measures, columns and hierarchies contained in the table presented in their respective display folders by default. This way, objects are arranged similar to how end-users would see them in client tools:
-
-
-
-Use the buttons immediately above the Explorer Tree, to toggle invisible objects, display folders, measures, columns and hierarchies, or to filter objects by name. You can rename an object by selecting it in then hitting F2. This also works for display folders. If you double-click a measure or calculated column, you may edit its [DAX expression](/te2/Advanced-features#dax-expression-editor). Right-clicking will show a context menu, providing a range of handy shortcuts for operations such as setting visibility, perspective inclusion, adding columns to a hierarchy, etc.
-
-## Editing properties
-The Property Grid on the lower right side of the screen, shows most of the properties for the object(s) selected in the Explorer Tree. If you select multiple objects at once, the Property Grid lets you simultaneously edit properties for the selected objects. This is useful for example when setting the Format String property. Examples of properties you can set through the Property Grid:
-
-* Name (you can rename objects directly in the Explorer Tree by hitting F2)
-* Description
-* Display Folder (can also be renamed directly in the Explorer Tree, also [drag/drop](/te2/Features-at-a-glance#drag-and-drop-objects))
-* Hidden (can be set for multiple objects through the right-click context menu in the Explorer Tree)
-* Format String
-
-Different properties exist, depending on what kind of object was selected.
-
-## Duplicate objects and batch renamings
-The right-click context menu in the Explorer Tree lets you duplicate measures and columns. The duplicated objects will have their names suffixed by "copy". Furthermore, you can perform batch renames by selecting multiple objects and right-clicking in the Explorer Tree.
-
-
-
-You may use RegEx for your renamings, and optionally choose whether translations should be renamed as well.
-
-## Drag and drop objects
-By far the most useful feature of Tabular Editor, when working on models with many measures/columns organised in display folders. Check out the animation below:
-
-
-
-Notice how the display folder property of every single object below the folder is changed, when the entire folder is dragged. No more going over measures/columns one-by-one, to change the display folder structure. What you see is what you get.
-
-(This works with translations too!)
-
-## Working with Perspectives and Translations
-You can add/edit existing perspectives and translations (cultures), by clicking the Model node in the Explorer Tree, and locating the relevant properties at the bottom of the property grid. Alternatively, when your Explorer Tree is [showing all object types](/te2/Features-at-a-glance#hierarchical-display), you can view and edit perspectives, cultures and roles directly in the tree.
-
-
-
-You can duplicate an existing perspective, role or translation by opening the right-click menu and choose "Duplicate". This will create an exact copy of the object, which you can then modify to your needs.
-
-To view perspectives and/or translations "in action", use the two dropdown lists in the toolbar near the top of the screen. Choosing a perspective will hide all objects that are not included in that perspective, while choosing a translation will show all objects in the tree using the translated names and display folders. When hitting F2 to change the names of objects/display folders or when dragging objects around in the tree, the changes will only apply to the selected translation.
-
-## Perspectives/Translations within object context
-When one or more objects are selected in the tree, you will find 4 special property collections within the Property Grid:
-
-* **Captions**, **Descriptions** and **Display Folders** shows a list of all cultures in the model, with the translated names, descripions and display folders respectively of the selected objects for each culture.
-* **Perspectives** shows a list of all perspectives in the model, with an indication of whether or nor the selected objects belong to each perspective.
-
-You can use these collections in the Property Grid to change the translations and perspective inclusions for one or more objects at at time.
-
-## Undo/Redo support
-Any change you make in Tabular Editor can be undone using CTRL+Z and subsequently redone using CTRL+Y. There is no limit to the number of operations that can be undone, but the stack is reset when you open a Model.bim file or load a model from a database.
-
-When deleting objects from the model, all translations, perspectives and relationships that reference the deleted objects are also automatically deleted (where as Visual Studio normally shows an error message that the object cannot be deleted). If you make a mistake, you can use the Undo functionality to restore the deleted object, which will also restore any translations, perspectives or relationships that were deleted. Note that even though Tabular Editor can detect [DAX formula dependencies](), Tabular Editor will not warn you in case you delete a measure or column which is used in the DAX expression of another measure or calculated column.
diff --git a/content/te2/Power-BI-Desktop-Integration.md b/content/te2/Power-BI-Desktop-Integration.md
deleted file mode 100644
index 8428f12..0000000
--- a/content/te2/Power-BI-Desktop-Integration.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Power BI Desktop Integration
-
-As of July 2020, [Power BI Desktop adds support for External Tools](https://docs.microsoft.com/da-dk/power-bi/create-reports/desktop-external-tools). This allows Tabular Editor to perform certain modeling operations when working with Imported or DirectQuery data in Desktop.
-
-
-
-## Prerequisites
-
-- [July 2020 version of Power BI Desktop](https://www.microsoft.com/en-us/download/details.aspx?id=58494) (or newer)
-- [Latest version of Tabular Editor](https://github.com/TabularEditor/TabularEditor/releases/latest)
-- Enable [Enhanced Metadata](https://docs.microsoft.com/en-us/power-bi/connect-data/desktop-enhanced-dataset-metadata) under Power BI Desktop's Preview Features
-
-Also, it is highly recommended that [automatic date/time](https://docs.microsoft.com/en-us/power-bi/transform-model/desktop-auto-date-time) is **disabled** (Power BI Desktop setting under "Data Load").
-
-## Supported Modeling Operations
-
-By default, Tabular Editor will only let you edit a limited number of objects and properties when connected to a Power BI Desktop model. These are:
-
-- Measures (add/remove/edit any property)
-- Calculation Groups and Calculation Items (add/remove/edit any property)
-- Perspectives (add/remove/edit any property)
-- Translations (add/remove)
- - You can apply metadata translations to any object in the model, although be aware that Power BI Desktop does not yet support translations to the default model culture.
-
-**Note:** If you enable the "Allow unsupported Power BI features (experimental)" option under Tabular Editor's File > Preferences dialog, Tabular Editor will let you edit **any** object and property, potentially causing model changes that are not supported by Power BI Desktop, which may cause a crash or a corrupt .pbix file. In this case, Microsoft Support will not be able to help you, so use at your own risk, and keep a backup of your .pbix file just in case.
diff --git a/content/te2/Training-Webinar-for-Tabular-Editor.md b/content/te2/Training-Webinar-for-Tabular-Editor.md
deleted file mode 100644
index 6a392e3..0000000
--- a/content/te2/Training-Webinar-for-Tabular-Editor.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Video Tutorials
-
-In collaboration with [PowerBI.Tips](https://powerbi.tips/about/) Daniel Otykier conducts 4 hours of training related to the Tabular Editor Program. Watch the following videos below to learn more about this tool and see how to use it in your everyday job.
-
-Webinar Topics
-* Introduction to Tabular Editor
-* Using Scripting
-* Reviewing your data model with the Best Practice Analyzer
-* Deploying your model with Azure DevOps
-
-## Introduction to Tabular Editor
-[](http://www.youtube.com/watch?v=c-jZMzsvKnM "Intro To Tabular Editor")
-
-## Using Scripting
-[](http://www.youtube.com/watch?v=EHs5r3XCkO8 "Intro To Tabular Editor")
-
-## Best Practice Analyzer
-[](http://www.youtube.com/watch?v=5WnN0NG2nBk "Intro To Tabular Editor")
-
-## Deploying with DevOps
-[](http://www.youtube.com/watch?v=fzZgXe3MjhI "Intro To Tabular Editor")
-
-Special thanks to PowerBI.Tips for setting up these free webinars.
-Visit PowerBI.tips on YouTube - https://www.youtube.com/powerbitips
-Visit PowerBI.tips - https://powerbi.tips
diff --git a/content/te2/toc.md b/content/te2/toc.md
deleted file mode 100644
index 2540cb5..0000000
--- a/content/te2/toc.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Introduction
-## [Getting Started](Getting-Started.md)
-## [Power BI Desktop Integration](Power-BI-Desktop-Integration.md)
-## [Importing Tables](Importing-Tables.md)
-## [Video Tutorials](Training-Webinar-for-Tabular-Editor.md)
-## [Frequently Asked Questions](FAQ.md)
-## [Keyboard Shortcuts](Keyboard-Shortcuts.md)
-
-# Feature Overview
-## [Basic](Features-at-a-glance.md)
-## [Advanced](Advanced-features.md)
-
-# Advanced Topics
-## [Advanced Scripting](Advanced-Scripting.md)
-### @csharp-script-library
-## [FormatDax deprecation](FormatDax.md)
-## [Useful Script Snippets](Useful-script-snippets.md)
-## [Custom Actions](Custom-Actions.md)
-## [Command Line](Command-line-Options.md)
-## [Best Practice Analyzer](Best-Practice-Analyzer.md)
-## [Best Practice Analyzer 2.0](Best-Practice-Analyzer-Improvements.md)
-## [Advanced Filtering](Advanced-Filtering-of-the-Explorer-Tree.md)
-## [Master Model Pattern](Master-model-pattern.md)
-## [Incremental Refresh](incremental-refresh.md)
-## [Importing Tables from Excel](importing-tables-from-excel.md)
\ No newline at end of file
diff --git a/content/te3/desktop-limitations.md b/content/te3/desktop-limitations.md
deleted file mode 100644
index 04e2779..0000000
--- a/content/te3/desktop-limitations.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-uid: desktop-limitations-te3
-title: Power BI Desktop limitations
-author: Morten Lønskov
-updated: 2023-08-21
-applies_to:
- editions:
- - edition: Desktop
- - edition: Business
- - edition: Enterprise
----
-[!include[Desktop limitations](~/content/common/desktop-limitations.md)]
-
-# Next steps
-
-- [Editing a Power BI dataset through the XMLA endpoint](xref:powerbi-xmla)
diff --git a/content/te3/features/images/customizing-pivot-grids.png b/content/te3/features/images/customizing-pivot-grids.png
deleted file mode 100644
index 75031d2..0000000
Binary files a/content/te3/features/images/customizing-pivot-grids.png and /dev/null differ
diff --git a/content/te3/features/images/show-fields-pivot.png b/content/te3/features/images/show-fields-pivot.png
deleted file mode 100644
index 51fbc6b..0000000
Binary files a/content/te3/features/images/show-fields-pivot.png and /dev/null differ
diff --git a/content/te3/other/te3-eula.md b/content/te3/other/te3-eula.md
deleted file mode 100644
index 41e10bf..0000000
--- a/content/te3/other/te3-eula.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-uid: te3-eula
-title: Standard License Terms
-author: Søren Toft Joensen
-updated: 2021-07-10
----
-# Tabular Editor 3 Standard License Terms
-
-The latest version of our license terms is always available on https://tabulareditor.com/license-terms
diff --git a/content/te3/toc.md b/content/te3/toc.md
deleted file mode 100644
index 6014124..0000000
--- a/content/te3/toc.md
+++ /dev/null
@@ -1,91 +0,0 @@
-# Introduction
-## @getting-started
-## @whats-new
-## @editions
-## @desktop-limitations-te3
-## Power BI XMLA Endpoint
-### @powerbi-xmla
-### @powerbi-xmla-pbix-workaround
-## @proxy-settings
-
-# Documentation
-## User interface
-### @user-interface
-### @tom-explorer-view
-### @bpa-view
-### @messages-view
-### @data-refresh-view
-### @macros-view
-### @find-replace
-
-## Features
-### @csharp-scripts
-### @deployment
-### @dax-debugger
-### @dax-editor
-### @dax-optimizer-integration
-### @dax-package-manager
-### @dax-scripts
-### @dax-query
-### @diagram-view
-### @metadata-translation-editor
-### @perspective-editor
-### @pivot-grid
-### @table-groups
-### @code-actions
-
-## Files formats
-### @supported-files
-### @tmdl
-## @preferences
-## @shortcuts
-## @user-options
-## @security-privacy
-
-# Tutorials and walkthroughs
-
-## Connect to a Model
-### @workspace-mode
-
-## Create a New Model
-### @new-as-model
-### @new-pbi-model
-### @direct-lake-guidance
-
-## Adding Tables & Data Sources
-### @importing-tables
-### @connecting-to-azure-databricks
-
-## Configuring Data Security
-### @data-security-about
-### @data-security-setup-rls
-### @data-security-setup-ols
-### @data-security-testing
-
-## Incremental Refresh
-### @incremental-refresh-about
-### @incremental-refresh-modify
-### @incremental-refresh-setup
-### @incremental-refresh-schema
-### @incremental-refresh-workspace-mode
-
-## Advanced Modelling
-### @udfs
-### @calendars
-
-## Automation with C# Scripting
-### @creating-macros
-### @csharp-script-library
-
-# Troubleshooting
-## @direct-lake-entity-updates-reverting
-## @locale-not-supported
-
-# Other resources
-## @downloads
-## @roadmap
-
-# Legal
-## @te3-eula
-## @third-party-notices
-## @privacy-policy
diff --git a/content/te3/tutorials/importing-tables.md b/content/te3/tutorials/importing-tables.md
deleted file mode 100644
index 10ae6f9..0000000
--- a/content/te3/tutorials/importing-tables.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-uid: importing-tables
-title: Importing Tables
-author: Daniel Otykier
-updated: 2021-09-06
-applies_to:
- editions:
- - edition: Desktop
- - edition: Business
- - edition: Enterprise
----
-# (Tutorial) Importing Tables
-
-[!include[importing-tables](~/content/te3/import-tables.partial.md)]
\ No newline at end of file
diff --git a/content/te3/tutorials/workspace-mode.md b/content/te3/tutorials/workspace-mode.md
deleted file mode 100644
index 7e7c8a0..0000000
--- a/content/te3/tutorials/workspace-mode.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-uid: workspace-mode
-title: Workspace Mode
-author: Daniel Otykier
-updated: 2021-09-06
-applies_to:
- editions:
- - edition: Desktop
- none: x
- - edition: Business
- - edition: Enterprise
----
-# (Walkthrough) Workspace Mode
-[!include[workspace-mode](~/content/te3/workspace-mode.partial.md)]
\ No newline at end of file
diff --git a/content/te3/views/bpa-view.md b/content/te3/views/bpa-view.md
deleted file mode 100644
index 7050e9b..0000000
--- a/content/te3/views/bpa-view.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-uid: bpa-view
-title: Best Practice Analyzer view
-author: Daniel Otykier
-updated: 2021-09-08
-applies_to:
- editions:
- - edition: Desktop
- - edition: Business
- - edition: Enterprise
----
-[!include[using-bpa](~/content/common/using-bpa.md)]
diff --git a/content/toc.yml b/content/toc.yml
index feebe1f..8b3cef9 100644
--- a/content/toc.yml
+++ b/content/toc.yml
@@ -1,17 +1,26 @@
- name: Home
href: index.md
-- name: TE2 Docs
- href: te2/
- homepage: te2/Getting-Started.md
-- name: TE3 Docs
- href: te3/
- homepage: te3/getting-started.md
-- name: Common features
- href: common/
- homepage: common/common-features.md
-- name: TE3 Onboarding Guide
- href: onboarding/
- homepage: onboarding/index.md
+- name: Getting started
+ href: getting-started/
+ homepage: getting-started/index.md
+- name: Features
+ href: features/
+ homepage: features/index.md
+- name: How-tos
+ href: how-tos/
+ homepage: how-tos/index.md
+- name: Tutorials
+ href: tutorials/
+ homepage: tutorials/index.md
+- name: References
+ href: references/
+ homepage: references/index.md
+- name: Troubleshooting
+ href: troubleshooting/
+ homepage: troubleshooting/index.md
+- name: Security
+ href: security/
+ homepage: security/index.md
- name: API
href: api/
homepage: api/index.md
\ No newline at end of file
diff --git a/content/te2/Maintaining-Calculations-using-Scripting.md b/content/todo/Maintaining-Calculations-using-Scripting.md
similarity index 100%
rename from content/te2/Maintaining-Calculations-using-Scripting.md
rename to content/todo/Maintaining-Calculations-using-Scripting.md
diff --git a/content/onboarding/as-cicd.md b/content/todo/as-cicd.md
similarity index 100%
rename from content/onboarding/as-cicd.md
rename to content/todo/as-cicd.md
diff --git a/content/onboarding/powerbi-cicd.md b/content/todo/powerbi-cicd.md
similarity index 100%
rename from content/onboarding/powerbi-cicd.md
rename to content/todo/powerbi-cicd.md
diff --git a/content/todo/te2-advanced.md b/content/todo/te2-advanced.md
new file mode 100644
index 0000000..7cd22ae
--- /dev/null
+++ b/content/todo/te2-advanced.md
@@ -0,0 +1,6 @@
+## View Table Partitions
+TODO
+## DAX Expression Editor
+TODO
+## Script Editor
+TODO (For now, please view [this article](../how-tos/Advanced-Scripting.md))
\ No newline at end of file
diff --git a/content/te3/troubleshooting/calendar-blank-value.md b/content/troubleshooting/calendar-blank-value.md
similarity index 90%
rename from content/te3/troubleshooting/calendar-blank-value.md
rename to content/troubleshooting/calendar-blank-value.md
index 31722b5..0441b2d 100644
--- a/content/te3/troubleshooting/calendar-blank-value.md
+++ b/content/troubleshooting/calendar-blank-value.md
@@ -4,10 +4,17 @@ title: Calendar function blank date error
author: Morten Lønskov
updated: 2025-10-20
applies_to:
- editions:
- - edition: Desktop
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Calendar function blank date error
diff --git a/content/te3/troubleshooting/direct-lake-entity-updates-reverting.md b/content/troubleshooting/direct-lake-entity-updates-reverting.md
similarity index 96%
rename from content/te3/troubleshooting/direct-lake-entity-updates-reverting.md
rename to content/troubleshooting/direct-lake-entity-updates-reverting.md
index 70aef52..164e251 100644
--- a/content/te3/troubleshooting/direct-lake-entity-updates-reverting.md
+++ b/content/troubleshooting/direct-lake-entity-updates-reverting.md
@@ -4,12 +4,17 @@ title: Entity Name Changes Revert in Direct Lake Models
author: Morten Lønskov
updated: 2025-10-14
applies_to:
- editions:
- - edition: Desktop
- none: x
- - edition: Business
- none: x
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ none: true
+ - edition: Business
+ none: true
+ - edition: Enterprise
+ full: true
---
# Entity Name Changes Revert in Direct Lake Models
@@ -310,7 +315,8 @@ public class BatchEntityEditor : Form
}
}
```
-> [!NOTE] The script was generated using an LLM for code assistance, but has been tested by the Tabular Editor team.
+> [!NOTE]
+> The script was generated using an LLM for code assistance, but has been tested by the Tabular Editor team.
Running the script updates only the tables that receive a new entity name. After the script finishes, review the changes, save the model, and refresh in Power BI to confirm the metadata persists.
diff --git a/content/troubleshooting/index.md b/content/troubleshooting/index.md
new file mode 100644
index 0000000..ab99628
--- /dev/null
+++ b/content/troubleshooting/index.md
@@ -0,0 +1,15 @@
+# Troubleshooting
+
+This section contains troubleshooting guides and solutions for common issues.
+
+## In this section
+
+- @licensing-activation - Resolving license and activation issues
+- @proxy-settings - Proxy setting issues
+- @locale-not-supported - Locale Not Supported
+- @calendar-blank-value - Calendar function blank date error
+- @direct-lake-entity-updates-reverting - Entity Name Changes Revert in Direct Lake Models
+
+---
+
+*Find solutions to common problems and get help when needed.*
\ No newline at end of file
diff --git a/content/te3/index.md b/content/troubleshooting/licensing-activation.md
similarity index 84%
rename from content/te3/index.md
rename to content/troubleshooting/licensing-activation.md
index 6ddc56a..7655691 100644
--- a/content/te3/index.md
+++ b/content/troubleshooting/licensing-activation.md
@@ -1,13 +1,22 @@
---
-title: Tabular Editor 3
+uid: licensing-activation
+title: Install and Activate Tabular Editor 3
author: Daniel Otykier
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Tabular Editor 3
-This is the documentation site for Tabular Editor 3 - the ultimate productivity tool for Analysis Services and Power BI data models.
-
-Use the menu on the left side to navigate between topics.
-
## Installation
Download the latest version of Tabular Editor 3 from our [downloads page](xref:downloads).
@@ -27,13 +36,13 @@ Tabular Editor 3 is commercial software. Visit our [home page](https://tabulared
The first time you launch Tabular Editor 3 on a new machine, you are prompted to activate the product.
-
+
### Activating using an existing license key
Once you purchase a license for Tabular Editor 3, you should receive an e-mail with a 25-character string which is your license key. When prompted, enter the license key and hit "Next >" to activate the product.
-
+
> [!NOTE]
> For multi-user license types, you will need to enter your e-mail address in addition to the license key. Tabular Editor 3 will prompt you to do so, if the license key you enter represents a multi-user license.
@@ -49,7 +58,7 @@ If you haven't used Tabular Editor 3 before, you are eligible to a free 30-day t
When Tabular Editor 3 is activated, you may change your license key in the Help menu by choosing "About Tabular Editor".
-
+
In the dialog, select "Change license key". Note that this option is only available if no model is loaded in Tabular Editor. IF you already loaded a model you can close it under File > Close model.
@@ -67,7 +76,7 @@ You can also use `regedit.exe` (Windows Registry Editor) and navigate to `HKEY_C
A system administrator may also proactively assign Tabular Editor 3 licenses to a machine by specifying the **LicenseKey** and **User** values under each user’s `SOFTWARE\Kapacity\Tabular Editor 3` registry key.
-
+
### Changing a license key through the registry
@@ -85,10 +94,4 @@ Alternatively, run the following command in a Windows Command Prompt (Start > Ru
REG DELETE "HKCU\Software\Kapacity\Tabular Editor 3" /va
```
-The next time you launch Tabular Editor 3, you will be prompted for a license key, just as when the tool was first installed on the machine.
-
-## Next steps
-
-- [Overview of Tabular Editor 3's user interface](xref:user-interface)
-- [What's new in Tabular Editor 3](whats-new.md)
-- [Tabular Editor 3 Onboarding Guide](xref:onboarding-te3)
\ No newline at end of file
+The next time you launch Tabular Editor 3, you will be prompted for a license key, just as when the tool was first installed on the machine.
\ No newline at end of file
diff --git a/content/te3/troubleshooting/locale-not-supported.md b/content/troubleshooting/locale-not-supported.md
similarity index 83%
rename from content/te3/troubleshooting/locale-not-supported.md
rename to content/troubleshooting/locale-not-supported.md
index c2b92b5..892cb68 100644
--- a/content/te3/troubleshooting/locale-not-supported.md
+++ b/content/troubleshooting/locale-not-supported.md
@@ -4,10 +4,17 @@ title: Locale Not Supported
author: Morten Lønskov
updated: 2025-09-02
applies_to:
- editions:
- - edition: Desktop
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Locale Not Supported
You may encounter the warning message:
@@ -56,4 +63,4 @@ Adjust your local system’s regional and language settings to match a supported
- **Recommended settings:**
- **Regional format:** English (United States)
- - **Windows Display Language:** English (United States)
+ - **Windows Display Language:** English (United States)
\ No newline at end of file
diff --git a/content/te3/proxy-settings.md b/content/troubleshooting/proxy-settings.md
similarity index 90%
rename from content/te3/proxy-settings.md
rename to content/troubleshooting/proxy-settings.md
index a488a16..3699cbf 100644
--- a/content/te3/proxy-settings.md
+++ b/content/troubleshooting/proxy-settings.md
@@ -4,10 +4,17 @@ title: Proxy settings
author: Daniel Otykier
updated: 2024-11-07
applies_to:
- editions:
- - edition: Desktop
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Proxy settings
@@ -16,7 +23,7 @@ Due to different proxy behavior between .NET Core (used by Tabular Editor 3) and
For example, you might see the following error message when trying to connect to the Power BI service:
-
+
Typical error messages you would see, are:
@@ -30,7 +37,7 @@ Typical error messages you would see, are:
When this happens, the first thing you should try is to change the proxy settings in Tabular Editor 3. You can find these settings under **Tools > Preferences > Proxy Settings**:
-
+
In most cases, changing the **Proxy Type** from `None` to `System` will resolve the issue. This setting tells Tabular Editor 3 to use the system-wide proxy settings configured in Windows. If you are still experiencing issues, you can try setting the **Proxy Type** to `Custom` and enter the proxy server address and port manually.
diff --git a/content/troubleshooting/toc.md b/content/troubleshooting/toc.md
new file mode 100644
index 0000000..c4e7b75
--- /dev/null
+++ b/content/troubleshooting/toc.md
@@ -0,0 +1,9 @@
+# @licensing-activation
+
+# @proxy-settings
+
+# @locale-not-supported
+
+# @calendar-blank-value
+
+# @direct-lake-entity-updates-reverting
\ No newline at end of file
diff --git a/content/te3/tutorials/calendars.md b/content/tutorials/calendars.md
similarity index 83%
rename from content/te3/tutorials/calendars.md
rename to content/tutorials/calendars.md
index a561677..24cf09c 100644
--- a/content/te3/tutorials/calendars.md
+++ b/content/tutorials/calendars.md
@@ -4,27 +4,33 @@ title: Calendars (Enhanced Time Intelligence)
author: Daniel Otykier
updated: 2025-09-15
applies_to:
- editions:
- - edition: Desktop
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ since: 3.23.0
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Calendars (Enhanced Time Intelligence)
The September 2025 release of Power BI Desktop introduced a new Public Preview feature called "Enhanced Time Intelligence". This feature lets you define custom calendars in your semantic model, and it also introduces 8 new DAX functions that work with these calendars, enabling week-based time intelligence calculations that were difficult to perform previously.
-Tabular Editor 3 has support for Calendars and the new DAX functions since version 3.23.0.
-
## Defining a Calendar
-
+
1. Right-click on a table in your model (typically a Date table) and select **Create > Calendar...**.
2. Give your calendar a name, e.g. "Fiscal"
Once calendars are added to a table, they will be shown in the TOM Explorer under the **Calendars** node:
-
+
Before you can use a calendar in your DAX calculations, you need to configure it by specifying which columns in the table represent the different calendar attributes. You can do this by right-clicking on the calendar in the TOM Explorer, then choosing the **Edit Column Mappings...** option:
@@ -32,7 +38,7 @@ Before you can use a calendar in your DAX calculations, you need to configure it
For each calendar, you can add one or more so-called **Column Associations**. Each such association maps a column from the table, to a specific **Time Unit** (e.g. Year, Month, Week, etc.). You can also add additional associated columns for each mapping, which are typically used for columns that represent the same time unit, but in a different format. For example, you might have a "Month" column that contains the month number (1-12), and a "Month Name" column that contains the month name ("January", "February", etc.). Both of these columns can be associated with the "MonthOfYear" time unit.
-
+
## Using Calendars in DAX
diff --git a/content/te3/tutorials/connecting-to-azure-databricks.md b/content/tutorials/connecting-to-azure-databricks.md
similarity index 97%
rename from content/te3/tutorials/connecting-to-azure-databricks.md
rename to content/tutorials/connecting-to-azure-databricks.md
index a1b4bcb..baddeba 100644
--- a/content/te3/tutorials/connecting-to-azure-databricks.md
+++ b/content/tutorials/connecting-to-azure-databricks.md
@@ -4,10 +4,18 @@ title: Connecting to Azure Databricks
author: David Bojsen
updated: 2025-08-05
applies_to:
- editions:
- - edition: Desktop
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ since: 3.15.0
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# (Tutorial) Connecting to Azure Databricks
diff --git a/content/tutorials/creating-macros.md b/content/tutorials/creating-macros.md
new file mode 100644
index 0000000..38d8c32
--- /dev/null
+++ b/content/tutorials/creating-macros.md
@@ -0,0 +1,75 @@
+---
+uid: creating-macros
+title: Creating macros
+author: Morten Lønskov
+updated: 2023-12-07
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ full: true
+ note: "Called Custom Actions"
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
+---
+# (Tutorial) Creating macros
+
+Macros are C# scripts that have been saved in Tabular Editor to be easily reused across semantic models.
+Saving a script as a Macro will allow that macro to be used when right clicking on the objects in the TOM Explorer making it simple to apply the script to your model.
+
+> [!NOTE]
+> In Tabular Editor 2, the feature to reuse C# Script is called @custom-actions.
+
+## Creating a Macro
+
+The first step in creating a Macro is to create and test a C# script.
+
+> [!TIP]
+>One easy way to get started with C# scripting is to use the built in record function that lets you record the actions you take in the TOM Explorer.
+>This way you can see how to interact with the different model objects and create reusable scripts.
+>Another way is to reuse existing scripts such as those in our [script library](xref:csharp-script-library).
+>In this tutorial we use the script [Format Numeric Measures](xref:script-format-numeric-measures) to showcase the Macro functionality.
+
+Once the script works according requirements the script can be saved using the toolbar button "Save as Macro" which will open the "Save Macro" window.
+
+
+
+The "Save Macro" window allows three options:
+1. Macro Name: Give the Macro a name and use backslash "\" to create folder path for the macro (See below)
+2. Provide a tooltip for the Macro to remember what it does in detail
+3. Select a context where the Macro should be available.
+
+
+
+In the above example the Macro will be saved in a folder called Formatting\Beginner and the script is called "Format Numeric Measures". It will be saved in the context of measures.
+
+### Macro Context
+Macros are saved in a "valid context" that determines which objects in the model the script can be applied to.
+
+This Macro can then be used when Right Clicking on a measure in the TOM Explorer. The context given while saving the Macro determines which objects will show the Macro when right clicking on that object.
+
+Tabular Editor will suggest a context based on the script that is being saved.
+
+
+
+## Edit a Macro
+
+A macro can be opened by double clicking it in the Macro pane and after editing the C# script saved using _Ctrl + S_ or the Edit Macro button.
+
+
+
+
+## Macro JSON file
+
+Macros are stored in the %LocalAppFolder%/TabularEditor3 as a JSON file called MacroActions.json. For more information on file types in Tabular Editor please see [Supported File Types](xref:supported-files#macroactionsjson)
+
+## Macro file example
+
+An example of a MacroActions.JSON file can be found here. It contains several of the C# scripts from our script library: [Download example MacroActions File](https://raw.githubusercontent.com/TabularEditor/TabularEditorDocs/main/content/assets/file-types/MacroActions.json)
+
+
diff --git a/content/te3/tutorials/data-security/data-security-about.md b/content/tutorials/data-security/data-security-about.md
similarity index 99%
rename from content/te3/tutorials/data-security/data-security-about.md
rename to content/tutorials/data-security/data-security-about.md
index fab2e5c..4731605 100644
--- a/content/te3/tutorials/data-security/data-security-about.md
+++ b/content/tutorials/data-security/data-security-about.md
@@ -4,10 +4,17 @@ title: What is Data Security?
author: Kurt Buhler
updated: 2023-03-02
applies_to:
- editions:
- - edition: Desktop
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# What is Data Security?
diff --git a/content/te3/tutorials/data-security/data-security-setup-ols.md b/content/tutorials/data-security/data-security-setup-ols.md
similarity index 96%
rename from content/te3/tutorials/data-security/data-security-setup-ols.md
rename to content/tutorials/data-security/data-security-setup-ols.md
index 8601dfe..2e53697 100644
--- a/content/te3/tutorials/data-security/data-security-setup-ols.md
+++ b/content/tutorials/data-security/data-security-setup-ols.md
@@ -4,10 +4,17 @@ title: Setup or Modify OLS
author: Kurt Buhler
updated: 2023-03-02
applies_to:
- editions:
- - edition: Desktop
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Setup or Modify Object-Level Security (OLS)
diff --git a/content/te3/tutorials/data-security/data-security-setup-rls.md b/content/tutorials/data-security/data-security-setup-rls.md
similarity index 97%
rename from content/te3/tutorials/data-security/data-security-setup-rls.md
rename to content/tutorials/data-security/data-security-setup-rls.md
index 1e3a80e..f565edd 100644
--- a/content/te3/tutorials/data-security/data-security-setup-rls.md
+++ b/content/tutorials/data-security/data-security-setup-rls.md
@@ -4,10 +4,17 @@ title: Setup or Modify RLS
author: Kurt Buhler
updated: 2023-03-14
applies_to:
- editions:
- - edition: Desktop
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Configure Row-Level Security (RLS)
diff --git a/content/te3/tutorials/data-security/data-security-testing.md b/content/tutorials/data-security/data-security-testing.md
similarity index 95%
rename from content/te3/tutorials/data-security/data-security-testing.md
rename to content/tutorials/data-security/data-security-testing.md
index 5aa2a73..1e96927 100644
--- a/content/te3/tutorials/data-security/data-security-testing.md
+++ b/content/tutorials/data-security/data-security-testing.md
@@ -4,11 +4,17 @@ title: Testing RLS/OLS
author: Kurt Buhler
updated: 2023-03-02
applies_to:
- editions:
- - edition: Desktop
- none: x
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Testing Data Security with Impersonation
diff --git a/content/te3/tutorials/direct-lake-guidance.md b/content/tutorials/direct-lake-guidance.md
similarity index 91%
rename from content/te3/tutorials/direct-lake-guidance.md
rename to content/tutorials/direct-lake-guidance.md
index 7283850..2f73524 100644
--- a/content/te3/tutorials/direct-lake-guidance.md
+++ b/content/tutorials/direct-lake-guidance.md
@@ -4,12 +4,18 @@ title: Direct Lake Guidance
author: Daniel Otykier
updated: 2024-06-18
applies_to:
- editions:
- - edition: Desktop
- none: x
- - edition: Business
- none: x
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ partial: true
+ - product: Tabular Editor 3
+ since: 3.22.0
+ editions:
+ - edition: Desktop
+ none: true
+ - edition: Business
+ none: true
+ - edition: Enterprise
+ full: true
---
# Direct Lake Guidance
@@ -64,23 +70,23 @@ For a **Direct Lake on SQL** model, the collation is case-insensitive for querie
To add Direct Lake tables using Tabular Editor 3's Table Import Wizard, choose **Microsoft Fabric Lakehouse**, **Microsoft Fabric Warehouse**, **Microsoft Fabric SQL Database** or **Microsoft Fabric Mirrored Database** as the source:
-
+
After signing in, you will be presented with a list of all available Fabric Lakehouses/Warehouses in workspaces you have access to. Select the one you want to connect to and hit **OK**:
-
+
Unless you want to specify a custom SQL query, or configure the tables for DirectQuery mode, simply hit **Next** to select the tables from a list of tables/views in the source:
-
+
Select the tables/views you wish to import. Note that **non-materialized views** are not supported in Direct Lake on OneLake mode. Attempting to add such a view to the model will result in an error upon saving the model metadata.
-
+
On the last page, choose which mode you want the table partition to be configured with:
-
+
The choices are:
@@ -101,7 +107,7 @@ To manually set up a table for **Direct Lake on OneLake** mode, you need to do t
1. **Create Shared Expression**: Direct Lake tables use "Entity" partitions, which much reference a Shared Expression in the model. Start out by creating this shared expression, if you don't have it already. Name it `DatabaseQuery`:
-
+
2. **Configure Shared Expression**: Set the **Kind** property of the expression you created in step 1 to "M", and set the *Expression** property to the following M query, replacing the IDs in the URL for your Fabric workspace and Lakehouse/Warehouse:
@@ -114,7 +120,7 @@ in
3. **Create Table and Entity Partition**: Create a new table in the model (Alt+5), then expand the table partitions in the TOM Explorer, and create new *Entity Partition*:
- 
+ 
Delete the regular import partition that was automatically created when you created the table.
@@ -130,11 +136,11 @@ in
The final result should look like this:
-
+
5. **Update column metadata**: At this stage, you should be able to use Tabular Editor's **Update Table Schema** feature to update the column metadata for the table. This will automatically retrieve the column names and data types from the Lakehouse/Warehouse:
-
+
Alternatively, manually add Data Columns to the table (Alt+4) and specify the `Name`, `Data Type`, `Source Column` and any other relevant properties for each column.
@@ -160,7 +166,7 @@ If you want to configure a table for **Import** mode while sourcing data from a
1. **Create table**: Create a new table in the model (Alt+5), then expand the table partitions in the TOM Explorer. By default, you should see a single partition of type "Import" created automatically:
-
+
2. **Configure Import Partition**: Set the following M query on the Import Partition:
diff --git a/content/tutorials/importing-tables.md b/content/tutorials/importing-tables.md
new file mode 100644
index 0000000..ca1a157
--- /dev/null
+++ b/content/tutorials/importing-tables.md
@@ -0,0 +1,21 @@
+---
+uid: importing-tables
+title: Importing Tables
+author: Daniel Otykier
+updated: 2021-09-06
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
+---
+# (Tutorial) Importing Tables
+
+[!include[importing-tables](~/content/features/import-tables.partial.md)]
\ No newline at end of file
diff --git a/content/te3/tutorials/incremental-refresh/incremental-refresh-about.md b/content/tutorials/incremental-refresh/incremental-refresh-about.md
similarity index 94%
rename from content/te3/tutorials/incremental-refresh/incremental-refresh-about.md
rename to content/tutorials/incremental-refresh/incremental-refresh-about.md
index 5f9344f..87a1ac4 100644
--- a/content/te3/tutorials/incremental-refresh/incremental-refresh-about.md
+++ b/content/tutorials/incremental-refresh/incremental-refresh-about.md
@@ -4,15 +4,21 @@ title: What is a Refresh Policy?
author: Kurt Buhler
updated: 2023-01-09
applies_to:
- editions:
- - edition: Desktop
- none: x
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# What is a Refresh Policy?
-
+
---
@@ -120,7 +126,7 @@ A _Refresh Policy_ determines how the data is partitioned, and which of these Po
### Refresh Policy properties
-
+
Four different kinds of properties make up a basic Refresh Policy:
1. __Incremental window__ __properties__: The period window wherein data is _kept up-to-date_.
@@ -128,7 +134,7 @@ Four different kinds of properties make up a basic Refresh Policy:
3. __Source expressions__: Define table schema and Power Query transformations of the table.
4. __Mode__: Whether `Import` or `Hybrid` tables are used.
-
+
---
@@ -136,7 +142,7 @@ Four different kinds of properties make up a basic Refresh Policy:
In Power BI Desktop, these properties are named differently. Below is an overview of how the properties match the Power BI Desktop user interface.
-
+
---
@@ -152,7 +158,7 @@ In the __*[hybrid](https://learn.microsoft.com/en-us
This is configured with the Mode property when set to Hybrid.
-
+
# [Only Refresh Complete Periods](#tab/completeperiods)
In this configuration, the policy range will not include the current period in the rolling window.
@@ -161,7 +167,7 @@ In the standard configuration of Incremental Refresh, the current period is alwa
This is configured with the IncrementalPeriodsOffset property. In the above example, a value of -1 for an IncrementalGranularity of Day will exclude the current date from the incremental window and thus the data scope; only complete days will be refreshed.
-
+
# [Detect Data Changes](#tab/datachanges)
In this configuration, not all records are refreshed in the incremental window. Instead, records are only refreshed if they change. Detect data changes can further optimize refresh performance when using incremental refresh. To identify data changes you use a _Polling Expression_. A Polling Expression is a separate property that expects a valid M Expression to identify a maximum date from a list of dates.
@@ -189,7 +195,7 @@ in
accountForNu11
```
-
+
***
diff --git a/content/te3/tutorials/incremental-refresh/incremental-refresh-modify.md b/content/tutorials/incremental-refresh/incremental-refresh-modify.md
similarity index 89%
rename from content/te3/tutorials/incremental-refresh/incremental-refresh-modify.md
rename to content/tutorials/incremental-refresh/incremental-refresh-modify.md
index 173ff60..0306805 100644
--- a/content/te3/tutorials/incremental-refresh/incremental-refresh-modify.md
+++ b/content/tutorials/incremental-refresh/incremental-refresh-modify.md
@@ -4,16 +4,22 @@ title: Modify an Existing Refresh Policy
author: Kurt Buhler
updated: 2023-01-09
applies_to:
- editions:
- - edition: Desktop
- none: x
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Modifying Incremental Refresh
-
+
---
@@ -35,17 +41,17 @@ Below is a general description of how you modify an existing Refresh Policy:
2. __Select the Table:__ Select the table already configured for Incremental Refresh.
3. __Find 'Refresh Policy' properties:__ In the _Properties_ window, go to the _Refresh Policy_ section.
-
+
4. __Change the property:__ Change the __Property__ specified in the below sections, depending on what you want to change. For an overview of all Refresh Policy properties and what they do, see [here](xref:incremental-refresh-about#overview-of-all-properties).
5. __Apply Changes:__ Deploy the model changes.
4. __Apply Refresh Policy:__ Right-click the table and select _Apply Refresh Policy_.
-
+
7. __Refresh all partitions:__ Shift-click to select all partitions. Right-click and select _Refresh > Full refresh (partition)_. You can right-click the table and select _'Preview data'_ to see the result.
-
+
---
diff --git a/content/te3/tutorials/incremental-refresh/incremental-refresh-schema.md b/content/tutorials/incremental-refresh/incremental-refresh-schema.md
similarity index 91%
rename from content/te3/tutorials/incremental-refresh/incremental-refresh-schema.md
rename to content/tutorials/incremental-refresh/incremental-refresh-schema.md
index 3619949..2cea45c 100644
--- a/content/te3/tutorials/incremental-refresh/incremental-refresh-schema.md
+++ b/content/tutorials/incremental-refresh/incremental-refresh-schema.md
@@ -4,16 +4,22 @@ title: Add or Remove Columns in a Table that uses Incremental Refresh
author: Kurt Buhler
updated: 2023-01-09
applies_to:
- editions:
- - edition: Desktop
- none: x
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Modifying Incremental Refresh Table Schemas
-
+
---
@@ -27,17 +33,17 @@ __When adding or removing columns from a table configured with Incremental Refre
1. __Detect schema changes:__ Right-click the table and select _'Update table schema...'_.
-
+
2. __Apply detected schema changes:__ In the _'Apply Schema Changes'_ dialogue, confirm the desired schema changes.
3. __Apply changes:__ Deploy the model changes.
4. __Apply Refresh Policy:__ Right-click the table and select _Apply Refresh Policy_.
-
+
5. __Refresh all partitions:__ Shift-click to select all partitions. Right-click and select _Refresh > Full refresh (partition)_. You can right-click the table and select _'Preview data'_ to see the result.
-
+
---
diff --git a/content/te3/tutorials/incremental-refresh/incremental-refresh-setup.md b/content/tutorials/incremental-refresh/incremental-refresh-setup.md
similarity index 90%
rename from content/te3/tutorials/incremental-refresh/incremental-refresh-setup.md
rename to content/tutorials/incremental-refresh/incremental-refresh-setup.md
index 2d58bc0..f6d8571 100644
--- a/content/te3/tutorials/incremental-refresh/incremental-refresh-setup.md
+++ b/content/tutorials/incremental-refresh/incremental-refresh-setup.md
@@ -4,15 +4,21 @@ title: Set Up a New Refresh Policy
author: Kurt Buhler
updated: 2023-01-09
applies_to:
- editions:
- - edition: Desktop
- none: x
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Setting up Incremental Refresh
-
+
---
@@ -47,7 +53,7 @@ To set up Incremental Refresh, you must configure a new Refresh Policy for the t
5. __Enable the Table Refresh Policy:__ In the _'Properties'_ window, set the `EnableRefreshPolicy` property on the table to `True`:
-
+
6. __Configure the Table Refresh:__ Next, select the table for which you want to configure incremental refresh. In the **Expression Editor** window, Select __'Source Expression'__ from the dropdown, insert your Power Query M Expression from step 4 and alter the Power Query M Expression such that there is a filter step on the date column for which you will enable incremental refresh.
@@ -81,7 +87,7 @@ To set up Incremental Refresh, you must configure a new Refresh Policy for the t
8. __Apply Model Changes:__ Save your model (Ctrl+S).
9. __Apply Refresh Policy:__ Right-click on the table and choose "Apply Refresh Policy".
-
+
__That's it!__ At this point, you should see that the Power BI service has automatically generated the partitions on your table, based on the policy you specified. All that's left is to refresh all the partitions.
@@ -89,7 +95,7 @@ To set up Incremental Refresh, you must configure a new Refresh Policy for the t
10. __Refresh all partitions:__ Shift-click to select all partitions. Right-click and select _Refresh > Full refresh (partition)_. You can right-click the table and select _'Preview data'_ to see the result.
-
+
Finally, you can configure the scheduled refresh in Power BI Service. Power BI will automatically handle the partitioning of your table. You can always connect to the remote model to view and validate the partitions, i.e. using the VertiPaq Analyzer.
@@ -209,15 +215,15 @@ If you have configured a native query, it may still be possible to configure and
1. __Author and Save the Native Query:__ Write your native query in SQL Server Management Studio or Azure Data Studio. Include a placeholder `WHERE` clause which filters >= a DateTime parameter, and < another DateTime parameter.
-
+
incremental-refresh-native-query-formatted.png
2. __Replace the Native Query String in the Source Expression:__ Copy the query and replace the existing query, which will be full of characters like (lf) (line feed), (cr) (carraige return) and (n) (new line). Doing this makes the query actually readable and editable without resorting to the Native Query user interface of Power BI Desktop.
-
+
Replace the above text in the `Query` parameter to the below, for example:
-
+
3. __Add `RangeStart` and `RangeEnd`:__ Concatenate "RangeStart" and "RangeEnd" inside of the `WHERE` clause, replacing the placeholder fields and converting the parameters to date with `Date.From` and to string data types using `Date.ToText` with the `Format` option set to `"yyyy-MM-dd`. Don't forget to include single quotes `'` on either side of the concatenation. Below is an example of what the final query would look like:
diff --git a/content/te3/tutorials/incremental-refresh/incremental-refresh-workspace-mode.md b/content/tutorials/incremental-refresh/incremental-refresh-workspace-mode.md
similarity index 83%
rename from content/te3/tutorials/incremental-refresh/incremental-refresh-workspace-mode.md
rename to content/tutorials/incremental-refresh/incremental-refresh-workspace-mode.md
index 2b1f694..276d6fc 100644
--- a/content/te3/tutorials/incremental-refresh/incremental-refresh-workspace-mode.md
+++ b/content/tutorials/incremental-refresh/incremental-refresh-workspace-mode.md
@@ -4,14 +4,18 @@ title: Using Workspace Mode on a Model with Incremental Refresh
author: Kurt Buhler
updated: 2023-01-09
applies_to:
- editions:
- - edition: Desktop
- none: x
- - edition: Business
- - edition: Enterprise
- versions:
- - version: 2.X
- - version: 3.4.2 and earlier
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ since: 3.4.2 and earlier
+ editions:
+ - edition: Desktop
+ none: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# Workspace mode and incremental refresh
@@ -22,7 +26,7 @@ applies_to:
---
-
+
---
@@ -37,13 +41,14 @@ Incremental Refresh creates new partitions upon the first scheduled refresh in a
### Workspace Mode is not Recommended
The reason is because _Workspace Mode_ will overwrite the remote model metadata with local metadata files; any out-of-sync changes (like to Policy Range partitions) will be lost. When working with _Workspace Mode_ on these models, you would need to _Apply refresh policy_ for tables using incremental refresh before saving changes every day.
- 
+ 
### Recommendation: Develop & Deploy from Local Metadata
__Instead, it is recommended to develop the model from the local metadata files.__ Changes can be deployed excluding partitions governed by a Refresh Policy, so there is no risk of overwriting the policies created by Power BI. A second read/refresh instance of Tabular Editor can be connected to the remote model for testing purposes.
To deploy the model, go _Model > Deploy..._ which opens the Deployment Wizard. Here you can select whether you want to include partitions governed by Incremental Refresh policies:
- 
+ 
+
By deploying the model without these Policy Range partitions, you are mitigating any potential impact due to out-of-sync incremental refresh partitions between the metadata and remote model.
\ No newline at end of file
diff --git a/content/tutorials/index.md b/content/tutorials/index.md
new file mode 100644
index 0000000..eff1a23
--- /dev/null
+++ b/content/tutorials/index.md
@@ -0,0 +1,22 @@
+# Tutorials
+
+This section contains comprehensive tutorials for learning Tabular Editor.
+
+## In this section
+
+- @calendars - Creating and managing calendar tables
+- @connecting-to-azure-databricks - Database connectivity
+- @creating-macros - Automation with macros
+- @direct-lake-guidance - Working with Direct Lake models
+- @powerbi-xmla - Editing through XMLA endpoint
+- @importing-tables - Data import workflows
+- @new-as-model - Creating AS models
+- @new-pbi-model - Creating Power BI models
+- @udfs - Creating custom functions
+- @workspace-mode-wt - Collaborative development
+- @data-security-about - Row-level and object-level security
+- @incremental-refresh-about - Large dataset management
+
+---
+
+*Navigate using the table of contents to find tutorials for your skill level.*
\ No newline at end of file
diff --git a/content/te3/tutorials/new-as-model.md b/content/tutorials/new-as-model.md
similarity index 95%
rename from content/te3/tutorials/new-as-model.md
rename to content/tutorials/new-as-model.md
index c25c8cf..6de11a0 100644
--- a/content/te3/tutorials/new-as-model.md
+++ b/content/tutorials/new-as-model.md
@@ -4,11 +4,18 @@ title: Create an Analysis Services Model
author: Daniel Otykier
updated: 2021-09-06
applies_to:
- editions:
- - edition: Desktop
- none: x
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ none: true
+ - edition: Business
+ partial: true
+ note: "Limited to SQL Server Standard Edition"
+ - edition: Enterprise
+ full: true
---
# (Tutorial) Creating your first Analysis Services Model
@@ -27,6 +34,9 @@ This page walks you through the process of creating a new Analysis Services tabu
- 1200 (Works with SQL Server 2016 or newer, and Azure Analysis Services)
- 1400 (Works with SQL Server 2017 or newer, and Azure Analysis Services)
- 1500 (Works with SQL Server 2019 or Azure Analysis Services)
+ - 1600 (Works with SQL Server 2022 or Azure Analysis Services)
+ - 1700 (Works with SQL Server 2025 or Azure Analysis Services)
+
- For the best development experience, check the "Use workspace database" option. This requires that you have an instance of Analysis Services available on which your workspace database will be deployed. This could be a local or a remote instance of SQL Server Analysis Services or it could be an instance of Azure Analysis Services. When you click OK, you will be prompted to enter the connection string for the Analysis Services instance in which you want the workspace database created.
[Learn more about workspace databases](xref:workspace-mode).
diff --git a/content/te3/tutorials/new-pbi-model.md b/content/tutorials/new-pbi-model.md
similarity index 64%
rename from content/te3/tutorials/new-pbi-model.md
rename to content/tutorials/new-pbi-model.md
index cf09cfe..485b4f8 100644
--- a/content/te3/tutorials/new-pbi-model.md
+++ b/content/tutorials/new-pbi-model.md
@@ -4,18 +4,25 @@ title: Create a Power BI Semantic Model
author: Daniel Otykier
updated: 2021-09-06
applies_to:
- editions:
- - edition: Desktop
- none: x
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ none: true
+ - edition: Business
+ partial: true
+ note: "Premium Per User XMLA Endpoints Only"
+ - edition: Enterprise
+ full: true
---
# (Tutorial) Creating your first Power BI semantic model
This page walks you through the process of creating a new Power BI semantic model from scratch using Tabular Editor 3.
> [!IMPORTANT]
-> Tabular Editor 3 Business Edition is limited to [Power BI Premium Per User](https://docs.microsoft.com/en-us/power-bi/admin/service-premium-per-user-faq). For Power BI Premium or Embedded capacity, you must upgrade to Tabular Editor 3 Enterprise Edition. In either case, the Power BI workspace in which the semantic model is to be deployed, must have its [XMLA read/write endpoint enabled](https://docs.microsoft.com/en-us/power-bi/admin/service-premium-connect-tools#enable-xmla-read-write).
+> Tabular Editor 3 Business Edition is limited to [Power BI Premium Per User](https://docs.microsoft.com/en-us/power-bi/admin/service-premium-per-user-faq). For Fabric/Power BI Premium or Embedded capacity, you must upgrade to Tabular Editor 3 Enterprise Edition. In either case, the Power BI workspace in which the semantic model is to be deployed, must have its [XMLA read/write endpoint enabled](https://docs.microsoft.com/en-us/power-bi/admin/service-premium-connect-tools#enable-xmla-read-write).
>
> Tabular Editor 3 Desktop Edition does not have any support for Power BI semantic models.
>
@@ -25,7 +32,7 @@ This page walks you through the process of creating a new Power BI semantic mode
1. From the File menu, choose New > Model... or hit `CTRL+N`
-
+
- Provide a name for your model or use the default value. Then, set the compatibility level to "1609 (Power BI / Fabric)".
- For the best development experience, check the "Use workspace database" option. This requires that you have a development workspace available in Power BI, with XMLA read/write enabled. When you click OK, you will be prompted to enter the connection string for the Power BI workspace in which you want the workspace database created.
diff --git a/content/te3/powerbi-xmla.md b/content/tutorials/powerbi-xmla.md
similarity index 83%
rename from content/te3/powerbi-xmla.md
rename to content/tutorials/powerbi-xmla.md
index 9833fb9..038d45f 100644
--- a/content/te3/powerbi-xmla.md
+++ b/content/tutorials/powerbi-xmla.md
@@ -4,12 +4,18 @@ title: Editing through XMLA endpoint
author: Daniel Otykier
updated: 2021-10-01
applies_to:
- editions:
- - edition: Desktop
- none: x
- - edition: Business
- partial: Tabular Editor 3 Business Edition only allows connecting to the XMLA endpoint of Premium-Per-User (PPU) workspaces.
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ full: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ none: true
+ - edition: Business
+ partial: true
+ note: Premium Per User XMLA Endpoints Only
+ - edition: Enterprise
+ full: true
---
# Editing a Power BI dataset through the XMLA endpoint
@@ -29,9 +35,6 @@ Tabular Editor requires the XMLA endpoint to allow both read/write access. This
When connecting to a dataset through the XMLA endpoint, all data modeling operations supported by the [Tabular Object Model (TOM)](https://docs.microsoft.com/en-us/analysis-services/tom/introduction-to-the-tabular-object-model-tom-in-analysis-services-amo?view=asallproducts-allversions) are available for editing. In other words, the [Power BI Desktop Limitations](xref:desktop-limitations) do not apply when editing a dataset through the XMLA endpoint of the Power BI Service.
-> [!WARNING]
-> Once a change is made to a Power BI dataset through the XMLA endpoint, it will not be possible to download the dataset as a .pbix file. [More information](https://docs.microsoft.com/en-us/power-bi/admin/service-premium-connect-tools#power-bi-desktop-authored-datasets).
-> Please see [Creating PBIX File from XMLA Endoint](xref:powerbi-xmla-pbix-workaround) for a workaround
## Workflow
diff --git a/content/tutorials/toc.md b/content/tutorials/toc.md
new file mode 100644
index 0000000..5e5849d
--- /dev/null
+++ b/content/tutorials/toc.md
@@ -0,0 +1,33 @@
+# Create a New Model
+## @new-as-model
+## @new-pbi-model
+## @direct-lake-guidance
+
+# Connect to a Model
+## @powerbi-xmla
+## @workspace-mode
+
+# Adding Tables & Data Sources
+## @importing-tables
+## @connecting-to-azure-databricks
+
+# Configuring Data Security
+## @data-security-about
+## @data-security-setup-rls
+## @data-security-setup-ols
+## @data-security-testing
+
+# Incremental Refresh
+## @incremental-refresh-about
+## @incremental-refresh-modify
+## @incremental-refresh-setup
+## @incremental-refresh-schema
+## @incremental-refresh-workspace-mode
+
+# Advanced Modelling
+## @udfs
+## @calendars
+
+# Automation with C# Scripting
+## @creating-macros
+## @csharp-script-library
diff --git a/content/te3/tutorials/udfs.md b/content/tutorials/udfs.md
similarity index 93%
rename from content/te3/tutorials/udfs.md
rename to content/tutorials/udfs.md
index 963d555..1f1002c 100644
--- a/content/te3/tutorials/udfs.md
+++ b/content/tutorials/udfs.md
@@ -4,10 +4,18 @@ title: DAX User-Defined Functions
author: Daniel Otykier
updated: 2025-09-15
applies_to:
- editions:
- - edition: Desktop
- - edition: Business
- - edition: Enterprise
+ products:
+ - product: Tabular Editor 2
+ partial: true
+ - product: Tabular Editor 3
+ since: 3.23.0
+ editions:
+ - edition: Desktop
+ full: true
+ - edition: Business
+ full: true
+ - edition: Enterprise
+ full: true
---
# DAX User-Defined Functions
@@ -39,10 +47,10 @@ First, verify your model's compatibility level is appropriate for UDFs:
1. Open your model in Tabular Editor 3
2. Select the root node ("Model") in the **TOM Explorer**
-2. In the **Properties** panel, expand the **Database** property, then check that the **Compatibility Level** is set to **1702** or higher
-3. If needed, update the compatibility level and save your model
+3. In the **Properties** panel, expand the **Database** property, then check that the **Compatibility Level** is set to **1702** or higher
+4. If needed, update the compatibility level and save your model
-
+
### Step 2: Add a New Function
@@ -51,13 +59,13 @@ First, verify your model's compatibility level is appropriate for UDFs:
3. Select **Create > User-Defined Function**
4. Give your function a descriptive name (spaces and special characters are not allowed; underscores and periods are permitted)
-
+
You can also add a UDFs through the **Model > Add User-Defined Function** menu option.
Alternatively, you can create UDFs directly from the **DEFINE** section of a DAX query, by hitting F7 (Apply) or using the **Query > Apply** menu option. If your query contains multiple query-scoped definitions, you can also select just a subset of them and hit F8 (Apply Selection).
-
+
### Step 3: Define Your Function
@@ -118,7 +126,7 @@ ROW(
Calling the above function with a measure reference for each parameter, e.g. `MyFunction([Some Measure], [Some Measure])`, will yield different results for the `y` parameter depending on the current filter context, as shown in the screenshot below:
-
+
In addition to specifying the evaluation mode, you can also constrain the parameter type by specifying a data type before the evaluation mode, e.g. `x: INT64 VAL` or `y: TABLE EXPR`.
@@ -154,7 +162,7 @@ MEASURE 'Date'[New Measure] = MyFuncRenamed(1,2)
Tabular Editor 3 adds powerful new features for working with UDFs in DAX queries. We already mentioned above how you can "apply" a UDF from the **DEFINE** section of a DAX query, to have it become a permanent part of your model. In addition, if using a UDF inside a DAX query, you can right-click on the function invocation and choose **Define Function** to automatically generate the function definition in the **DEFINE** section of your query:
-
+
As can be seen from the screen above, the following options are available when right-clicking on a UDF invocation:
@@ -180,7 +188,7 @@ When you rename a UDF, Tabular Editor 3 automatically updates all references thr
The **Peek Definition** feature works with UDFs, allowing you to quickly view the function's implementation without navigating away from your current context.
-
+
### Dependencies View
@@ -227,7 +235,7 @@ In Tabular Editor, UDFs also have a "Namespace" *property*, allowing you to cust
Tabular Editor 3 automatically picks up any comments and displays them appropriately in autocomplete suggestions and tooltips.
-
+
## Common Use Cases
diff --git a/content/tutorials/workspace-mode.md b/content/tutorials/workspace-mode.md
new file mode 100644
index 0000000..ec8fad8
--- /dev/null
+++ b/content/tutorials/workspace-mode.md
@@ -0,0 +1,21 @@
+---
+uid: workspace-mode-wt
+title: Workspace Mode
+author: Daniel Otykier
+updated: 2021-09-06
+applies_to:
+ products:
+ - product: Tabular Editor 2
+ none: true
+ - product: Tabular Editor 3
+ editions:
+ - edition: Desktop
+ none: true
+ - edition: Business
+ partial: true
+ note: Premium Per User XMLA Endpoints Only
+ - edition: Enterprise
+ full: true
+---
+# (Walkthrough) Workspace Mode
+[!include[workspace-mode](../features/workspace-mode.partial.md)]
\ No newline at end of file
diff --git a/content/whats-new/3-24-1.html b/content/whats-new/3-24-1.html
new file mode 100644
index 0000000..53d3ce7
--- /dev/null
+++ b/content/whats-new/3-24-1.html
@@ -0,0 +1,10 @@
+Release blog: October 2025 (v. 3.24.1, release notes)
+Release blog: October 2025 (v. 3.24.2, release notes)
+