
Introduction
Please view this before getting started. It is important.
An introduction to data modeling and the Star Schema
In this lecture we discuss normalizing and denormalizing data models.
In this lecture we talk about the foundation for a star schema, dimensions and facts
In this lecture we give five reasons why a Star schema is preferred
An introduction to the VertiPaq engine
In this lecture we talk about how the VertiPaq engines achieves compression via value encoding and why this matters.
In this lecture we talk about hash encoding to achieve compression and better performance
In this lecture we discuss run length encoding and why it's important.
All your DAX queries are executed by one of two engines. We discuss those engines in this lecture.
In this lecture we briefly discuss the roll of SQL Profiler in DAX performance monitoring
In this lecture we discuss the DAX Studio and how important it is to every DAX developer and performance monitoring.
In this lecture we will be discussing all the incredibly useful information which can be found in a VPAX file to help you optimize your data model and DAX code.
In this lecture we discuss a practical use case for using the VertiPaq Analyzer using a large sales database.
In this lecture we talk about xmSQL and the types of queries the storage engine can process
An explanation of the data cache, what is stored there and what uses it
In this lecture we discuss the CallbackDataId and why it can cause havoc with the performance of your queries.
The question of using SUM vs. SUMX is discussed in this lecture, which also has an impact on your data model design.
You wouldn't think that attempting to prevent a divide by zero could cause performance problems, but it can if it's done the wrong way.
We have already seen why we want to remove IF statements from our DAX expressions and how to remove them in simple cases. In this lecture we covert scenarios that are a bit more complex.
In this lecture we correct two bad practices in a query that is using the CALCULATE function with a FILTER.
The use of variables almost always makes your DAX code easier to understand and maintain. And, sometimes, it can also improve performance.
SUMMARIZE can be a bit problematic to use at times. If not used correctly it can lead to very bad performance.
In this lecture we talk about the Power BI performance analyzer
Exercise 1
Exercise 2
Exercise 3
Exercise 4
Exercise 5
Exercise 6
Test your knowledge - group 1 questions
Test your knowledge - group 2 questions
DAX can seem simple when just learning but then gets progressively more difficult and it is very hard to master. There are so many subtilties. This makes trying to figure out why your DAX code is underperforming, and fixing it, overwhelming at times. This course attempts to make this process easier. The course starts with the importance of proper data modeling and why a Star schema is so critical. We then cover the concepts of normalization and denormalization along with the use of dimension and fact tables. We cover in depth the importance of using the VertiPaq Analyzer when exploring the makeup of your data model.
The course then jumps into the VertiPaq engine and the techniques used to compress data. We cover why choosing the correct data types in your model is so critical and the importance of data cardinality in how well data is compressed, which directly affects the performance of all your DAX code.
We then explore the two engines that make up VertiPaq, the formula engine and storage engine. SQL Server Profiler and DAX Studio are introduced as two tools you can use to perform performance monitoring. DAX Studio is used heavily and many DAX Studio examples are used in demonstrating how important the tool is for performance monitoring and evaluation utilizing the server timings feature. We cover xmSQL and how useful it is in getting a handle on what the engines are doing when executing your DAX code. Multiple threads and the data cache are what makes the storage engine blazingly fast and we cover this in detail. The CallbackDataId is extensively covered and why we want to avoid it and how to avoid it.
We wrap up with at least a half dozen common optimization problems / scenarios and how to address them.