Optimizing DAX Video Course
This video course teaches you how to optimize queries and measures in DAX.
DAX is the native language of Power Pivot for Excel, Power BI Desktop and SSAS Tabular models in Microsoft SQL Server Analysis Services. This video course is aimed at users of Power BI and Analysis Services developers who already know the DAX language and want to learn how to optimize DAX formulas and models for improving performance.
The goal of the video course is to enable you to find bottlenecks in DAX calculations using Performance Analyzer and DAX Studio, providing the knowledge to improve the performance by using different DAX formulas or by changing the data model, when required.
The video course is made up of almost 40 hours of lectures covering the formula engine, the VertiPaq storage engine, DirectQuery over SQL, and composite models. You can watch the videos at any time, and the system will keep track of your progress.
The companion content available to the students includes:
- The PDF version of Optimizing DAX: The book includes a detailed description of all the modules of the video course. You have access to the PDF version of the book, which is also on sale in printed version.
- PBIX files for all the demos
- DAX code for all the demos
- Backup of SQL Server databases to refresh the PBIX files
- BIM file to create Analysis Services databases used for demos with large models
Students have access to a private discussion area where they can interact with the instructors, asking questions related to the lectures and the exercises.
Prerequisites: Students need a good knowledge of the DAX Language, and a previous experience using Power BI Desktop or Analysis Services Tabular. You may acquire this knowledge by following the Mastering DAX Workshop, or by having equivalent real-world experience.
Collapse allCurriculum
-
Introduction
-
Introduction
FREE
-
Prerequisites
FREE
- Sections and naming conventions
-
Introduction
-
Download software, demos, and book
-
Software prerequisites
FREE
-
Hardware prerequisites
FREE
- Download the demo files
- Optimizing DAX book
-
Software prerequisites
-
Introducing optimization with examples
-
Introducing optimization with examples
FREE
-
Introduction
FREE
-
Optimizing DAX
FREE
- Optimizing the model
- Conclusions
- Links to external content
-
Introducing optimization with examples
-
Introducing the Tabular query architecture
-
Introducing the Tabular query architecture
FREE
- Introduction
- Introducing the formula engine
- Introducing VertiPaq and DirectQuery architectures
- Introducing the VertiPaq storage engine
- Introducing the DirectQuery over SQL storage engine
- Introducing DirectQuery over AS
- Introducing data islands and cross-island query resolution
- Different types of models
-
Introducing the Tabular query architecture
-
Using the Power BI Desktop performance analyzer
-
Using the Power BI Desktop performance analyzer
FREE
- Introduction
- Running Performance Analyzer
- Understanding the numbers reported by Performance Analyzer
- Optimizing queries or measures?
- What can be optimized
- Saving performance data
- Conclusions
- Links to external content
-
Using the Power BI Desktop performance analyzer
-
Using DAX Studio
-
Using DAX Studio
FREE
- Introduction
- Installing DAX Studio
- Introducing the metrics of a database
- Introducing All Queries
- Capturing Excel queries (MDX)
- Introducing Load Performance Data
- Introducing Query Plan and Server Timings
- Links to external content
-
Using DAX Studio
-
Introducing query plans
-
Introducing query plans
FREE
- Introduction
- Introducing the logical query plan
-
Introducing the physical query plan
FREE
- Introducing storage engine queries
- Query plans in DirectQuery
- Conclusions
-
Introducing query plans
-
Understanding the DAX Formula Engine
-
Understanding the DAX Formula Engine
FREE
- Introduction
- Understanding datacaches
- Understanding materialization
-
Understanding callbacks
FREE
- Formula engine with different storage engines
- Understanding vertical fusion
- Understanding horizontal fusion
-
Examples of formula engine calculations
- Sales of best products
- Top three colors
- Measuring performance
- Gathering important timings from the query plan
- Analyzing query plans and timings
- Conclusions
-
Understanding the DAX Formula Engine
-
Understanding query plans
-
Understanding query plans
FREE
- Introduction
- Query plan structure
- Query plan operator types
- Interactions between the formula engine and the storage engine
- Common query plan operators
-
Examples of query plans
- Comparing SUM versus SUMX
- IF versus IF.EAGER
- Filtering with DAX versus using relationships
- Understanding SWITCH optimization
- Conclusions
-
Understanding query plans
-
Optimizing the formula engine
-
Optimizing the formula engine
FREE
- Introduction
- Optimizing datacache use
- Sales of best products
- Running total of sales and ABC analysis
- Year-over-year customer growth as a percentage
- Conclusions
-
Optimizing the formula engine
-
Understanding the VertiPaq engine
-
Understanding the VertiPaq engine
FREE
- Introduction
- Using VertiPaq Analyzer
- Tabular data types
- Introduction to the VertiPaq columnar database
-
Understanding VertiPaq compression
FREE
- Understanding segmentation and partitioning
- Understanding the importance of sorting
- Understanding VertiPaq relationships
- Understanding attribute hierarchies
-
Optimizing VertiPaq model examples
- Sales amount versus quantity and net price
- Storing currency conversion data
- Date time versus date and time
- Conclusions
-
Understanding the VertiPaq engine
-
Understanding VertiPaq relationships
-
Understanding VertiPaq relationships
FREE
- Introduction
- Regular, unidirectional one-to-many relationships
- Regular, bidirectional one-to-many relationships
- Regular, one-to-one relationships
- Limited, many-to-many cardinality relationships
- Conclusions
-
Understanding VertiPaq relationships
-
Analyzing VertiPaq storage engine queries
-
Analyzing VertiPaq storage engine queries
FREE
- Introduction
- Analyzing simple xmSQL queries
- Introducing basic VertiPaq functionalities
- Introducing batches
- Understanding internal and external SE queries
- Understanding distinct count in xmSQL
-
Understanding VertiPaq joins and filters
-
Introducing VertiPaq joins
FREE
- Introducing bitmap indexes
- Introducing reverse joins
-
Introducing VertiPaq joins
-
Understanding VertiCalc and callbacks
- Understanding VertiCalc and callbacks
- Understanding CallbackDataID
- Understanding EncodeCallback
- Understanding LogAbsValueCallback
-
Understanding RoundValueCallback
FREE
- Understanding MinMaxColumnPositionCallback
- Understanding Cond
- Understanding the VertiPaq cache
- Choosing the correct data type for VertiPaq calculations
- Conclusions
-
Analyzing VertiPaq storage engine queries
-
Optimizing common DAX constructs
-
Optimizing common DAX constructs
FREE
- Introduction
- Optimizing nested iterations
- Understanding the effect of context transition
- Different ways of performing a distinct count
- Optimizing LASTDATE calculations
- Avoid using SUMMARIZE and clustering
- Optimizing division by checking for zeroes
- Reducing the extent of the search by removing blanks
- Optimizing time intelligence calculations
- Distinct count over large cardinality columns
- Conclusions
- Links to external content
-
Optimizing common DAX constructs
-
Moving and applying filters to tables
-
Moving and applying filters to tables
FREE
- Introduction
-
Different filters in CALCULATE
- Different filters in CALCULATE
- Analyzing single-column filters
- Analyzing multiple-column filters
- Analyzing filters over multiple tables
- Understanding sparse or dense filters
- Filter columns, not tables
-
Modeling many-to-many relationships
- Modeling many-to-many relationships
- Testing the bidirectional model
- Testing the star model
- Testing the snake model
- Testing the advanced snake model
- Conclusions
-
Moving and applying filters to tables
-
Optimization examples for VertiPaq
-
Optimization examples for VertiPaq
FREE
- Introduction
- Reducing nested iterations
- Optimizing complex filters in CALCULATE
- Running faster than Fusion
- Currency conversion
- Optimizing cumulative totals
- Average price variation of products over stores
- Optimizing number of days with no sales
- Computing open orders
- Optimizing SWITCH and nested measures
- Conclusions
-
Optimization examples for VertiPaq
-
Understanding security optimizations
-
Understanding security optimizations
FREE
- Introduction
- Testing security conditions and their performance impact
- Understanding when and where security is enforced
- Understanding cached bitmap indexes and embedded filters
- Optimizing dynamic security
- Optimizing static security on the fact table
- Optimizing dynamic security on the fact table
- Conclusions
-
Understanding security optimizations
-
Understanding DirectQuery over SQL
-
Understanding DirectQuery over SQL
FREE
- Introduction
- Reading SQL code in this course
- Reading the numbers in DAX Studio
- Callback operations
- Calculated tables
- Calculated columns
- How caching works in DirectQuery over SQL
- Understanding latency to send queries to the remote server
- Max number of rows in a data cache
-
Different types of relationships
- Regular one-to-many relationships
- Limited many-to-many relationships
- One-to-one relationships
- DirectQuery over SQL max parallel queries
- Using different data islands
- Introducing aggregations and hybrid tables
- Conclusions
-
Understanding DirectQuery over SQL
-
Optimizing DirectQuery over SQL
-
Optimizing DirectQuery over SQL
FREE
- Introduction
-
Building an SQL data model for Analysis Services
- Introduction
- Designing indexes
- Using columnstore indexes
- Choosing column data types
- Do not use Power Query transformations
-
Optimizing relationships
- Choosing the best data type for relationships
- Relying on referential integrity
- Using COMBINEVALUES to implement multi-column relationships
-
Using aggregations
- Introducing aggregations
- Introducing VertiPaq aggregation and Dual storage mode
- Designing aggregations for simple calculations
- Designing aggregations for row-level calculations
- Designing aggregations for distinct count
- Aggregations are not VertiPaq aliases of DirectQuery tables
- Manually activating aggregations in DAX
- Using automatic aggregations
-
Using hybrid tables
- Introducing hybrid tables
- Hybrid tables and distinct count
- Creating hybrid tables with incremental refresh
- Conclusions
-
Optimizing DirectQuery over SQL
-
Optimization examples for DirectQuery
-
Optimization examples for DirectQuery
FREE
- Introduction
- Optimizing LASTDATE calculations
- Optimizing division by checking for zeroes
- Optimizing time intelligence calculations
- Computing distinct counts
- Conclusions
-
Optimization examples for DirectQuery
-
Understanding composite models
Added Apr 15, 2024-
Understanding composite models
FREE
- Introduction
- Introducing composite models
- Understanding wholesale and retail calculations
- Calculated tables
- Calculated columns
- Tracing remote queries
- Understanding relationships between tables
- Understanding special DAX functions for composite models
- Splitting calculations between wholesale and retail
- Conclusions
-
Understanding composite models
-
Composite models optimization examples
Added Apr 15, 2024-
Composite models optimization examples
FREE
- Introduction
- Static segmentation
- Budget and time intelligence calculations
- Dynamic ABC analysis
- Conclusions
-
Composite models optimization examples
-
Understanding complex models
Added Apr 15, 2024-
Understanding complex models
FREE
- Introduction
- Understanding the role of the formula engine in complex models
- Calculated tables
- Calculated columns
- Relationships in complex models
- Using SQL Server features to avoid multiple data islands
- Using VertiPaq to snapshot expensive DirectQuery queries
- Conclusions
-
Understanding complex models
-
Conclusion
-
Conclusion
Added Apr 15, 2024
-
Conclusion
- Kenneth Barber (May 19, 2023)
This review is for the 2nd edition of this course before the content about DirectQuery and composite models was released. Anybody that works regularly with DAX should take this course. It succeeds in "teaching a man to fish" and gets you comfortable with looking at xmSQL code and query plans. There is great emphasis on analytical thinking, methodology, adaptability, and trial and error, and this approach prepares you for any Data Model in any version of Tabular, whether now or in the future. Because of this, you will leave the course feeling empowered rather than feeling powerful. Lastly, the delivery of this course's content is overall the best so far out of SQLBI's courses. I look forward to the rest of this course and any future courses by SQLBI!