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 over 35 hours of lectures covering the formula engine, the VertiPaq storage engine, and DirectQuery over SQL – other hours of lectures will be added by early 2024 with the additional section for 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 draft versions before the book is published by the end of 2023.
  • 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
  • Download software, demos, and book

    • Software prerequisites
      FREE
    • Hardware prerequisites
      FREE
    • Download the demo files
    • Optimizing DAX book
  • Introducing optimization with examples

    • Introducing optimization with examples
      FREE
    • Introduction
      FREE
    • Optimizing DAX
      FREE
    • Optimizing the model
    • Conclusions
    • Links to external content
  • 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
  • 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 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
  • 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
  • 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 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
  • 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
  • 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 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
  • 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
    • 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
  • 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
  • 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
  • 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
  • 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 DirectQuery over SQL
    Added Nov 20, 2023

    • 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
  • Optimizing DirectQuery over SQL
    Added Nov 20, 2023

    • 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
  • Optimization examples for DirectQuery
    Added Nov 20, 2023

    • Optimization examples for DirectQuery
      FREE
    • Introduction
    • Optimizing LASTDATE calculations
    • Optimizing division by checking for zeroes
    • Optimizing time intelligence calculations
    • Computing distinct counts
    • Conclusions
  • Conclusion

    • Conclusion
Student Rating
4.8
61 ratings
90%
5%
3%
0%
2%
Student Reviews (38)
  • Alexander Feygin (Dec 20, 2022)

    I guess I'll continue buying your couses even when i'll stop using Power BI.

  • Paweł Zieliński (Nov 28, 2022)

    Hi Alberto, Hi Marco That was very interesting course. I learned a lot. Thanks to that I have now completely different view on DAX and opimization process. Thanks!

  • Alexey Zidymakov (Nov 13, 2022)

    This is a great course. Thanks!

  • Marian Szetyinszki (Jun 28, 2022)

    it is fine, sometimes difficult to follow , some videos look outdated, so it would be wort adding annotation or comments on outdated parts below video with the latest info or link to articles with new content. Also it is now not really needed to comment /show what used to be before 2016 or even 2014 and how things were being solved in the past anymore... The Optimizing DAX Exercises.pdf is little bit confusing and difficult to follow in relation to what is shown in the Solution videos (mainly LAB 4 Solutions chapter) , looks like some solutions were not part of the video?

    • Thank you Marian for your valuable feedback. As a matter of fact Marco and Alberto are currently tackling exactly that, a new updated version of Optimizing DAX. Current students of Optimizing DAX at the time of that release will be upgraded to the new and improved version of the video course! Stay tuned, Claire
      Reply by Claire Costa (Jun 28, 2022)
  • Javier Mc Calla Vaz (Jan 17, 2022)

    Interesting course and topics

  • Ezequiel Matos (Jan 6, 2022)

    Excellent course.

  • Richard Lee (Jul 16, 2021)

    The course is useful, but it seems a bit out of date now and the presentation could be better. The free Power BI Tools course is excellent and seems more recent. I find the presentation difficult to watch. The English skills could be better for teaching a complex subject like this; it pushes unnecessary workload onto the listener trying to figure out what exactly they mean and this distracts from understanding the subject matter. The big screen is a big mistake - the presenter stands in front of the screen and blocks the view; the screen wastes valuable space. Presenters on edX, Coursera, and YouTube manage to avoid this mistake. The sound quality has an echo. They are also talking in very loud voices as though they have a large audience. In the Power BI Tools course, they present individually and the overall presentation is much better. More use of good diagrams would help to explain conceptual information -- they rely too much on words and bullet point PowerPoint slides.

  • Mark Levy (Jun 7, 2021)

    Not related to Review: I like to use the yellow color pen when reading along with your commentary: Is it possible to have other color options as well? e.g orange, and green?? Also I notice that when I print off the commentary - even though I am using color setting - I am unable to print the color highlights that I make . It would be useful to allow color printing to the allow that highlighted sections to print. Related to REVIEW: Very detailed and has complex information that needs time to be digested. I will go through this course many more times in order to be comfortable with it.

  • Mark Levy (Jun 6, 2021)

    Very detailed and has complex information that needs time to be digested. I will go through this course many more times in order to be comfortable with it.

  • Igor Poleshchuk (Jan 25, 2021)

    For a long time, I doubted whether I needed this course or not. In the end, I decided to go through it and did not regret it for a single second! I feel that after completing the course, I have moved to a new level in my understanding of DAX.

  • Ross Waterston (Nov 18, 2020)

    That was great, really enjoyed the challenges set in the labs. This has been a fantastic rebalance of my DAX. Correcting some of the "lazy" that have no doubt crept in while also firming up the reasoning behind some of the things I do "just because" now.

  • Leo Godin (Oct 26, 2020)

    Great course. I'd read a lot of articles on optimization, but this course walks you through a process for optimizing and shows great solutions. The important part is it teaches you how to think about optimizing DAX code.

  • David Williams (Jun 3, 2020)

    A fabulous training course that I will start using immediately and that I will have to review a few times to be able to use all of the value provided! I absolutely recommend it.

  • Kenneth Barber (Apr 23, 2020)

    SQLBI has done it again! Very thorough and very well explained. This is a great supplement to Mastering DAX and is essential for writing fast DAX code. DAX (or at least Power Pivot in Excel) is a bit sensitive; it doesn't take much for DAX code to run slowly and have you wondering how to make it faster.

  • Paulo Rocha (Mar 12, 2020)

    Very important to learn the concepts of Formula Engine and Store Engine and understand how Vertipaq works. The course is helping me to think optimization every step of the way. Thanks again to Maestros Alberto and Marco for being the guiding stars of the Power BI Community.

Would you prefer a classroom course?

This video course is based on a classroom course we teach all around the world. If you prefer a classroom learning experience, take a look at the dates below for a list of our upcoming classroom courses!
Sorry, there are no classroom courses scheduled at this time.