SQL Server Analysis Services: The Complete DBA Guide

SQL Server Analysis Services: The Complete DBA Guide | SQLYARD

SQL Server Analysis Services: The Complete DBA Guide


SQL Server 2019
SQL Server 2022
SQL Server 2025

SQL Server Analysis Services (SSAS) is the analytical engine built into SQL Server. It sits between the relational database and BI tools like Power BI, Excel, and SSRS, delivering fast query responses over large volumes of data by storing pre-aggregated or compressed analytical models. SSAS runs as a separate Windows service from the Database Engine and is installed and managed independently.

Understanding SSAS means understanding the two distinct modes it supports, the query languages each mode uses, the compatibility level system for tabular models, how SSAS integrates with Power BI and Excel, and where SSAS fits in Microsoft’s current analytics roadmap versus Azure Analysis Services and Microsoft Fabric.

Data Mining is discontinued in SQL Server 2022 Analysis Services. SQL Server Analysis Services Data Mining was deprecated in SQL Server 2017 and is discontinued in SQL Server 2022. It is not available in SSAS 2022 or SSAS 2025. Organizations that relied on SSAS Data Mining algorithms (decision trees, clustering, neural networks, naive Bayes) must migrate to alternative platforms such as Azure Machine Learning, Python-based ML pipelines, or SQL Server Machine Learning Services.
1

Two Modes: Tabular and Multidimensional

Beginner

SQL Server Analysis Services installs in one of two server modes: Tabular or Multidimensional. The mode is selected during installation and cannot be changed afterward without uninstalling and reinstalling. Each SSAS instance runs in exactly one mode. To run both modes, install two separate SSAS instances on the same server — though this is resource-intensive and only recommended on high-end hardware.

AttributeTabular ModeMultidimensional Mode
Default mode at installationYesNo (must be explicitly selected)
Storage engineVertiPaq (in-memory columnar compression)MOLAP (pre-aggregated multidimensional storage)
Primary query languageDAX (Data Analysis Expressions)MDX (Multidimensional Expressions)
Supported in Azure Analysis ServicesYesNo — cloud deployment requires tabular or Azure VM
Supported in Power BI PremiumYes (compatibility level 1500+)No
Model development toolVisual Studio with Analysis Services Projects extensionVisual Studio with Analysis Services Projects extension
Write-back (users modify cell values)Not supportedSupported
Microsoft’s strategic directionPrimary investment areaMature, maintained, no new cloud path
Multidimensional models have no cloud migration path to Azure or Power BI. Multidimensional mode is only available in SQL Server Analysis Services on-premises. There is no way to deploy a multidimensional model to Azure Analysis Services or Power BI Premium. The only way to run multidimensional models in Azure is to install SQL Server Analysis Services in Multidimensional mode on an Azure Virtual Machine. There are no automated conversion tools from multidimensional to tabular — migration requires manually redesigning the model.
2

Storage Engines: VertiPaq, MOLAP, ROLAP, DirectQuery

Intermediate
EngineModeHow Data Is StoredQuery Speed
VertiPaq Tabular (default) Columnar in-memory compression. Data is loaded from the source and stored in a highly compressed columnar format in RAM. Queries are processed entirely in memory. Fastest — sub-second on billions of rows in sufficient RAM
MOLAP Multidimensional (default) Pre-aggregated multidimensional data stored on disk in SSAS proprietary format. Aggregations are computed during processing, not at query time. Very fast for pre-defined aggregation paths; slower for ad-hoc queries outside pre-built aggregations
ROLAP Multidimensional (optional) No local storage — queries go directly to the relational source at query time. Configured per-partition or per-storage group. Slower — relational query performance at query time; no pre-aggregation benefit
DirectQuery Tabular (optional) No local in-memory storage — queries translated to SQL and sent to the relational source at query time. Model metadata is stored in SSAS but data lives in the source. Source database query performance; useful for real-time data requirements or models too large for RAM
3

Query Languages: DAX and MDX

Beginner
LanguageFull NamePrimary UseSupported By
DAX Data Analysis Expressions Calculations and queries against tabular models. Also used in Power BI and Excel Power Pivot. Relational-style syntax familiar to Excel formula users. Tabular models (calculations and queries); Multidimensional models (queries only, read-only)
MDX Multidimensional Expressions Queries and calculations against multidimensional cubes. Used by Excel PivotTables connecting to SSAS, SSRS MDX query designer, and many third-party BI tools. Multidimensional models (calculations and queries); Tabular models (queries only)
TMSL Tabular Model Scripting Language Scripting and management of tabular models: creating, altering, processing, and backing up databases. Used over XMLA. Available from compatibility level 1200+. Tabular models at compatibility level 1200 and higher
ASSL Analysis Services Scripting Language Scripting multidimensional models and older tabular models (compatibility levels 1050–1103). Used over XMLA. Multidimensional models; Tabular models at compatibility levels 1050–1103
4

Tabular Model Architecture

Intermediate

A tabular model organizes data into tables, columns, relationships, and measures — a structure familiar to anyone who has worked with relational databases or Power BI Desktop. Tabular models are developed in Visual Studio using the Analysis Services Projects extension, then deployed to an SSAS Tabular instance where they run as a database.

The core objects in a tabular model:

ObjectDescription
TableHolds columns and rows of data, sourced from one or more data source partitions. Analogous to a relational table.
ColumnA typed column within a table. Stored in VertiPaq as a compressed columnar segment.
RelationshipDefines how tables join to each other. Supports one-to-many, many-to-many (from compatibility level 1400+), and bidirectional cross-filter.
MeasureA DAX formula that computes a value at query time based on current filter context. Measures are the primary calculation mechanism in tabular models.
Calculated ColumnA DAX formula evaluated at process time and stored in the model. Increases model size; use sparingly compared to measures.
PartitionDivides a table into independently processable segments, typically by date range. Allows incremental refresh of large tables without full reprocessing.
Calculation GroupA collection of calculation items (for example, Year-to-Date, Prior Year) that modify how measures calculate. Available from compatibility level 1500.
PerspectiveA named subset of the model’s tables and measures, used to simplify the model surface for specific user groups.
RoleDefines access permissions and row-level security (RLS) filters for the model. Users and groups are assigned to roles.
5

Compatibility Levels

Intermediate

Tabular models have a compatibility level that determines which features are available. The compatibility level is set when the model project is created in Visual Studio and can be upgraded — but not downgraded — after deployment. Higher compatibility levels unlock modern features but reduce backward compatibility with older SSAS server versions.

Compatibility LevelSupported InKey Features Introduced
1700SQL Server 2025, Power BI Premium, Azure Analysis ServicesHorizontal Fusion query optimization, DAX LINEST/LINESTX regression functions, selection expressions in calculation groups
1600SQL Server 2022, Power BI Premium, Azure Analysis ServicesMDX Fusion (improved MDX query performance), QueryMemoryLimit applies to MDX queries
1500SQL Server 2022, SQL Server 2019, Power BI Premium, Azure Analysis ServicesCalculation groups, many-to-many relationships, DirectQuery improvements, enhanced metadata
1400SQL Server 2022, SQL Server 2019, SQL Server 2017, Azure Analysis ServicesGet Data (M queries) for data sources, bi-directional cross-filtering, detail rows expressions
1200SQL Server 2022, SQL Server 2019, SQL Server 2017, SQL Server 2016, Azure Analysis ServicesTabular metadata (TMSL scripting replaces ASSL), JSON-based object model
1100/1103SQL Server 2017 and earlier onlyOriginal tabular format. Discontinued in SQL Server 2022. Must be upgraded to 1200+ before migrating to SSAS 2022.
Use compatibility level 1600 for new SQL Server 2022 deployments. For new tabular models on SQL Server 2022, start at compatibility level 1600. This is the highest level supported by SSAS 2022 and aligns with the latest Power BI and Azure Analysis Services functionality. If the model will also be deployed to SSAS 2019, use 1500.
6

DirectQuery Mode

Intermediate

In DirectQuery mode, the tabular model stores no data locally. When a client queries the model, SSAS translates the DAX query into SQL and sends it to the source relational database. The source executes the SQL and returns results to SSAS, which assembles the final response.

DirectQuery is appropriate when:

  • The dataset is too large to fit in server RAM in VertiPaq mode
  • Real-time or near-real-time data freshness is required (no processing latency)
  • The source database has its own caching and performance optimization

DirectQuery has trade-offs: query performance depends entirely on the source database, some DAX functions and model features are not supported in DirectQuery mode, and every user query results in a relational query against the source. For mixed scenarios, SSAS supports hybrid partitions where some table partitions use VertiPaq and others use DirectQuery.

Power BI DirectQuery to SSAS is different from SSAS DirectQuery mode. Power BI supports DirectQuery connections to a deployed SSAS tabular model — meaning Power BI queries the SSAS model at query time rather than importing the data into Power BI. This is not the same as the SSAS DirectQuery storage mode described above. They are independent settings at different layers.
7

Multidimensional Model Architecture

Intermediate

Multidimensional models have been the foundation of enterprise OLAP analytics since SQL Server 2000. They organize data using a cube metaphor: a central fact table (measures) is surrounded by dimension tables that provide context. The model is processed — queries are run against the source, aggregations are pre-computed — and the result is stored in SSAS’s MOLAP format for fast query response.

Multidimensional models are the correct choice when:

  • Complex MDX calculations are required: named sets, custom rollups, many-to-many dimension relationships using intermediate measure groups
  • Write-back capability is needed (users write values back to specific cells for what-if analysis or budgeting)
  • The organization has an existing multidimensional estate that would be cost-prohibitive to redesign as tabular
  • Large volumes of pre-aggregated data need to be served consistently to many concurrent users
No new multidimensional features are being developed. Multidimensional mode is supported and maintained in SQL Server 2022 and 2025, but Microsoft’s analytical investment is focused on the tabular engine. New features in DAX, calculation groups, DirectQuery improvements, and cloud deployment are all tabular-only capabilities. Organizations starting new OLAP projects should choose tabular unless they have a specific requirement only multidimensional can meet.
8

Cubes, Dimensions, and Measures

Beginner
ObjectDescription
CubeThe top-level multidimensional database object. Contains one or more measure groups and dimensions. Users connect to a cube to run MDX queries.
Measure GroupA collection of measures sharing the same granularity and fact table. A cube can have multiple measure groups from different fact tables.
MeasureA numeric value derived from the fact table: Sales Amount, Order Count, Profit Margin. Measures are evaluated in the context of dimension filter selections.
DimensionProvides context for measures: Date, Product, Customer, Geography. Contains attributes and hierarchies used to slice and filter the cube.
AttributeA property of a dimension member: Product Name, Product Category, Customer City, Order Date (year, quarter, month, day).
HierarchyAn ordered structure of attributes within a dimension, enabling drill-down: Year → Quarter → Month → Day, or Country → Region → City.
AggregationPre-computed summary values stored during processing. SSAS’s aggregation design determines which combinations of dimension attributes have pre-built summaries.
PartitionDivides a measure group into processable segments, typically by time period. Allows incremental processing of the current period without reprocessing historical data.
Named SetA named MDX expression that defines a reusable set of dimension members: “Top 10 Customers”, “East Region Products”. A multidimensional-only feature.
Calculated MemberA MDX expression defining a virtual measure or dimension member: Gross Margin %, Moving Average, Year-over-Year Growth. Evaluated at query time.
9

Installation and Server Mode

Beginner

SSAS is installed through the SQL Server installation wizard as a separate feature from the Database Engine. On the Feature Selection page, select Analysis Services. On the Analysis Services Configuration page, choose the server mode and add the Windows accounts or groups that will be SSAS server administrators.

The mode selected at installation sets the DeploymentMode property in the msmdsrv.ini configuration file: 0 = Multidimensional, 2 = Tabular. This property must not be changed manually after installation — doing so is not supported and corrupts the server state. If the wrong mode was selected, uninstall and reinstall.

-- Verify SSAS server mode and version via DMV query
-- Connect to the SSAS instance in SSMS, open a new MDX or DAX query
-- For tabular instances, use DAX Studio or the SSMS DAX query window

-- Query server properties via XMLA (works for both modes in SSMS)
-- In SSMS: connect to Analysis Services > New Query > MDX or XMLA

SELECT * FROM $SYSTEM.DISCOVER_PROPERTIES
WHERE PROPERTYNAME = 'ServerMode'

-- Returns: 'Multidimensional' or 'Tabular'

-- Check SSAS version
SELECT * FROM $SYSTEM.DISCOVER_PROPERTIES
WHERE PROPERTYNAME = 'ProductVersion'
SSAS 2025 is not supported on Windows Arm64. SQL Server Analysis Services 2025 supports only Intel and AMD x86-64 CPUs with up to 64 cores per NUMA node. Windows Arm64 is not supported for SSAS 2025.
10

Security and Roles

Intermediate

SSAS uses its own role-based security model at two levels: server level and database level. Server administrators are configured during installation and have full control. Database roles control access to model data.

Security LevelScopeHow Configured
Server administratorFull server management: create and delete databases, manage server properties, process any databaseConfigured at installation; managed through SSAS server properties in SSMS
Database role (Full Control)Full control of one database: process, read, modify modelCreated in the model project or SSMS; Windows users and groups added as members
Database role (Process)Permission to process (refresh) the database without read access to dataUsed for ETL service accounts that refresh the model
Database role (Read)Query the model data; typically assigned to end usersThe standard role for BI tool users connecting to SSAS
Row-level security (tabular)DAX filter expressions on table rows within a role — users in the role only see rows matching the filterDefined as DAX filter expressions on table objects within a Read role
Dimension security (multidimensional)Restricts which dimension members are visible to a roleConfigured on dimension objects within a role in the model project or SSMS
-- Example tabular row-level security DAX filter
-- Applied to the Customer table within a Read role
-- Users in this role only see customers in their assigned region

-- In the model role definition, set the DAX filter on the Customer table:
[Region] = USERNAME()

-- Or map to a security table:
[CustomerID] IN SELECTCOLUMNS(
    FILTER(SecurityMapping, SecurityMapping[UserPrincipalName] = USERNAME()),
    "CID", SecurityMapping[CustomerID]
)
11

Processing Models

Intermediate

Processing is the operation that loads data from the source into the SSAS model. For tabular models this means refreshing the VertiPaq in-memory store. For multidimensional models this means re-reading fact and dimension data and recomputing aggregations.

Process TypeWhat It DoesWhen to Use
Process FullDrops all existing data and reloads from scratch. Clears all partition data and re-queries all source data.Initial load, schema changes, corrupted data recovery
Process DataLoads data into partitions without rebuilding aggregations (multidimensional) or recalculating calculated columns (tabular).Faster than Process Full when only raw data has changed and aggregations will be rebuilt separately
Process Add Appends new rows to existing partitions without reprocessing existing data. Multidimensional only. Incremental load of new fact records when no existing records have changed
Process RecalcRecalculates aggregations and hierarchies without reloading data. Multidimensional only.After Process Data, to rebuild aggregations as a separate step
Process ClearRemoves all data from a partition or database without reloading. Leaves the structure intact.Clearing test data; partition management
Process DefaultDetermines the minimum processing needed based on current state: unprocessed objects get full processing; already-processed objects may be skipped.Efficient processing when the state is known and not all objects need full reprocessing

Processing is typically scheduled through SQL Server Agent jobs that call SSAS processing via XMLA, TMSL, or PowerShell. The Analysis Services PowerShell module provides Invoke-ProcessASDatabase and related cmdlets for scripting processing operations.

12

Client Connectivity: Power BI, Excel, SSRS

Beginner
ClientConnection TypeSupported Model TypesNotes
Power BI Desktop / Service Live Connection or DirectQuery to SSAS Tabular (all compatibility levels); Multidimensional (read-only MDX) From May 2022, Power BI supports DirectQuery connections to SSAS 2022 tabular models. Live Connection uses the SSAS model’s own DAX engine.
Microsoft Excel PivotTable using Analysis Services data connection Tabular (MDX queries generated by Excel); Multidimensional (native MDX) Excel generates MDX queries against both model types. MDX Fusion in SSAS 2022 improves Excel performance against tabular models.
SQL Server Reporting Services Analysis Services data source using MDX query designer Tabular and Multidimensional MDX query designer in SSRS provides drag-and-drop report building against SSAS cubes and tabular models.
Azure Analysis Services Any SSAS-compatible client using XMLA endpoint Tabular only AAS does not support multidimensional models. Shares the same tabular engine as on-premises SSAS.
DAX Studio Direct SSAS connection for DAX query development Tabular Community tool (daxstudio.org); essential for DAX query performance analysis and model exploration.
13

SSAS Roadmap: On-Premises vs Azure vs Fabric

Intermediate

Microsoft’s analytical platform strategy has shifted toward cloud-native services. Understanding where SSAS fits versus Azure Analysis Services and Microsoft Fabric is important for both new project decisions and long-term planning.

PlatformModel SupportWhere It RunsStrategic Direction
SQL Server Analysis Services Tabular and Multidimensional On-premises Windows Server; Azure VM Supported and maintained through SQL Server lifecycle (SQL Server 2022 supported until 2033). New features added in SSAS 2025. No official end-of-life announced. Multidimensional innovation has slowed; tabular receives ongoing DAX and query engine improvements.
Azure Analysis Services Tabular only Azure managed service Fully managed cloud SSAS tabular. Microsoft is steering customers toward Power BI Premium / Fabric for new projects. AAS remains supported but Fabric semantic models are the forward-looking path.
Power BI Premium / Fabric semantic models Tabular only (compatibility level 1500+) Microsoft cloud Microsoft’s primary investment area. Uses the same tabular engine. Fabric semantic models are the successor to both AAS and Power BI Premium datasets for new analytical model development.
No official end-of-life has been announced for SQL Server Analysis Services. As of June 2026, Microsoft has not announced an end-of-support date for SSAS. SSAS 2022 is supported through January 2033 as part of the SQL Server 2022 lifecycle. SSAS 2025 ships with SQL Server 2025. Organizations with established SSAS estates can continue operating them while evaluating Fabric for new projects.
14

SQL Server 2025 SSAS Changes

Intermediate

SQL Server Analysis Services 2025 introduced the following changes, all verified against Microsoft Learn:

ChangeDetails
Compatibility level 1700New tabular compatibility level for SSAS 2025, Power BI Premium, and Azure Analysis Services
Horizontal FusionQuery execution plan optimization that fuses multiple smaller data source queries into fewer larger queries, reducing round trips and improving DAX performance in DirectQuery mode
Improved DirectQuery parallelismMultiple data source queries are parallelized for a single DAX query, reducing the impact of source database latency on query response times
DAX LINEST and LINESTXNew DAX functions for linear regression using the least squares method — first regression functions natively available in DAX
Selection expressions in calculation groupsAdditional control over calculation item behavior when multiple items are selected or no specific selection is made
Schema write operation encryption enhancementTabular and multidimensional model databases may need to be upgraded to ensure proper encryption compatibility
Windows Arm64 not supportedSSAS 2025 runs only on Intel and AMD x86-64 processors

Workshop: Build and Query a Tabular Model

This workshop builds a minimal SSAS tabular model, deploys it to a local SSAS instance, and queries it with DAX. Prerequisites: SQL Server 2019 or later with SSAS Tabular installed, Visual Studio 2022 with the Analysis Services Projects extension, SSMS, and DAX Studio (optional but recommended).

Step 1: Create the tabular model project

  1. Open Visual Studio 2022. Select File → New → Project. Search for “Analysis Services Tabular Project” and select it.
  2. Name the project SalesAnalysis. On the Tabular model designer dialog, select the compatibility level matching the SSAS instance (1600 for SSAS 2022, 1700 for SSAS 2025). Select the local SSAS workspace server.
  3. In the model designer, right-click Model.bim in Solution Explorer and select Import from Data Source.

Step 2: Import data

  1. Connect to the AdventureWorksDW database (or any SQL Server database with fact and dimension tables). Import at minimum: FactInternetSales, DimProduct, DimDate, DimCustomer.
  2. In the model diagram view, verify that relationships are detected automatically. If not, create relationships manually by dragging between key columns.

Step 3: Create a measure

  1. Click the FactInternetSales table in the model designer. In the measure grid at the bottom, click in an empty cell.
  2. Type the following DAX measure and press Enter:
Total Sales := SUM(FactInternetSales[SalesAmount])
  1. Create a second measure for year-to-date:
Sales YTD :=
TOTALYTD(
    [Total Sales],
    DimDate[FullDateAlternateKey]
)

Step 4: Deploy and process the model

  1. Right-click the project in Solution Explorer and select Properties. On the Deployment Server tab, set the Server to the local SSAS Tabular instance name (for example, localhost\TABULAR or just localhost for the default instance).
  2. Select Build → Deploy SalesAnalysis. Visual Studio deploys the model to SSAS and processes it, loading data from the source.
  3. After deployment, connect to the SSAS instance in SSMS. Expand Databases to confirm SalesAnalysis appears.

Step 5: Query the model with DAX

  1. In SSMS, right-click the SalesAnalysis database and select New Query → MDX (or open DAX Studio and connect to the deployed model).
  2. Run the following DAX query to return total sales by product category:
EVALUATE
SUMMARIZECOLUMNS(
    DimProduct[EnglishProductCategoryName],
    "Total Sales", [Total Sales],
    "Sales YTD",   [Sales YTD]
)
ORDER BY [Total Sales] DESC
  1. Verify results return correctly. If using DAX Studio, the query execution pane shows server timings broken down by Formula Engine and Storage Engine time — useful for understanding query performance.

Step 6: Connect Power BI or Excel

  1. In Power BI Desktop: Home → Get Data → Analysis Services. Enter the SSAS server name. Select Live Connection. Browse to the SalesAnalysis model and connect. Build a report using the Total Sales and Sales YTD measures.
  2. In Excel: Data → Get Data → From Database → From Analysis Services. Enter the server name and select the SalesAnalysis database. Create a PivotTable connected to the deployed model.

The technical information in this article was verified against Microsoft documentation at the time of publication. SQL Server features, cloud service capabilities, licensing terms, and configuration requirements can change between versions and cumulative updates. Always validate implementation details against current Microsoft Learn documentation before deploying to production. References in this article link directly to the authoritative Microsoft sources.


Discover more from SQLYARD

Subscribe to get the latest posts sent to your email.

Leave a Reply

Discover more from SQLYARD

Subscribe now to keep reading and get access to the full archive.

Continue reading