Introduction to the second edition
Introduction to the first edition
Understanding the direction of a relationship
Excel and DAX: Two functional languages
DAX as a programming and querying language
Subqueries and conditions in DAX and SQL
Multidimensional versus Tabular
DAX as a programming and querying language
Understanding DAX calculations
Understanding calculated columns and measures
Handling errors in DAX expressions
Introducing aggregators and iterators
Chapter 3 Using basic table functions
Understanding VALUES, DISTINCT, and the blank row
Chapter 4 Understanding evaluation contexts
Introducing evaluation contexts
Testing your understanding of evaluation contexts
Using SUM in a calculated column
Using the row context with iterators
Nested row contexts on different tables
Nested row contexts on the same table
Understanding FILTER, ALL, and context interactions
Row contexts and relationships
Filter context and relationships
Using DISTINCT and SUMMARIZE in filter contexts
Chapter 5 Understanding CALCULATE and CALCULATETABLE
Introducing CALCULATE and CALCULATETABLE
Using CALCULATE to compute percentages
Filtering with complex conditions
Understanding context transition
Row context and filter context recap
Introducing context transition
Context transition in calculated columns
Context transition with measures
Understanding circular dependencies
Understanding ALL in CALCULATE
Introducing ALL and ALLSELECTED with no parameters
Understanding that variables are constant
Understanding the scope of variables
Common patterns using variables
Chapter 7 Working with iterators and with CALCULATE
Understanding iterator cardinality
Leveraging context transition in iterators
Solving common scenarios with iterators
Computing averages and moving averages
Changing calculation granularity
Chapter 8 Time intelligence calculations
Automatic Date/Time in Power BI
Automatic date columns in Power Pivot for Excel
Date table template in Power Pivot for Excel
Using CALENDAR and CALENDARAUTO
Handling multiple relationships to the Date table
Understanding basic time intelligence calculations
Introducing basic time intelligence functions
Using year-to-date, quarter-to-date, and month-to-date
Computing time periods from prior periods
Mixing time intelligence functions
Computing a difference over previous periods
Computing a moving annual total
Using the right call order for nested time intelligence functions
Understanding semi-additive calculations
Using LASTDATE and LASTNONBLANK
Working with opening and closing balances
Understanding advanced time intelligence calculations
Understanding FIRSTDATE, LASTDATE, FIRSTNONBLANK, and LASTNONBLANK
Using drillthrough with time intelligence
Custom year-to-date, quarter-to-date, and month-to-date
Introducing calculation groups
Understanding calculation groups
Understanding calculation item application
Understanding calculation group precedence
Including and excluding measures from calculation items
Understanding sideways recursion
Chapter 10 Working with the filter context
Using HASONEVALUE and SELECTEDVALUE
Introducing ISFILTERED and ISCROSSFILTERED
Understanding differences between VALUES and FILTERS
Understanding the difference between ALLEXCEPT and ALL/VALUES
Using ALL to avoid context transition
Introducing data lineage and TREATAS
Understanding arbitrarily shaped filters
Chapter 11 Handling hierarchies
Computing percentages over hierarchies
Handling parent/child hierarchies
Chapter 12 Working with tables
Narrowing sales computation to the first year’s customers
Reusing table expressions with DETAILROWS
Creating static tables with ROW
Creating static tables with DATATABLE
Introducing the EVALUATE syntax
Implementing common DAX query patterns
Using GENERATE and GENERATEALL
Using NATURALINNERJOIN and NATURALLEFTOUTERJOIN
Understanding the auto-exists behavior in DAX queries
Chapter 14 Advanced DAX concepts
Using RELATED in calculated columns
Understanding the difference between table filters and column filters
Using table filters in measures
Understanding active relationships
Difference between table expansion and filtering
Context transition in expanded tables
Understanding ALLSELECTED and shadow filter contexts
Introducing shadow filter contexts
ALLSELECTED returns the iterated rows
ALLSELECTED without parameters
Chapter 15 Advanced relationships
Implementing calculated physical relationships
Computing multiple-column relationships
Implementing relationships based on ranges
Understanding circular dependency in calculated physical relationships
Implementing virtual relationships
Transferring a filter using TREATAS
Transferring a filter using INTERSECT
Transferring a filter using FILTER
Implementing dynamic segmentation using virtual relationships
Understanding physical relationships in DAX
Using bidirectional cross-filters
Understanding one-to-many relationships
Understanding one-to-one relationships
Understanding many-to-many relationships
Implementing many-to-many using a bridge table
Implementing many-to-many using a common dimension
Implementing many-to-many using MMR weak relationships
Choosing the right type of relationships
Managing ambiguity in relationships
Understanding ambiguity in active relationships
Solving ambiguity in non-active relationships
Chapter 16 Advanced calculations in DAX
Computing the working days between two dates
Showing budget and sales together
Computing previous year sales up to last date of sales
Understanding the architecture of the DAX engines
Introducing the formula engine
Introducing the storage engine
Introducing the VertiPaq (in-memory) storage engine
Introducing the DirectQuery storage engine
Understanding the VertiPaq storage engine
Introducing columnar databases
Understanding VertiPaq compression
Understanding segmentation and partitioning
Using Dynamic Management Views
Understanding the use of relationships in VertiPaq
Choosing hardware for VertiPaq
Best practices in hardware selection
Chapter 18 Optimizing VertiPaq
Gathering information about the data model
Optimizing complex filters with Boolean calculated columns
Processing of calculated columns
Choosing the right columns to store
Using column split optimization
Optimizing high-cardinality columns
Disabling attribute hierarchies
Optimizing drill-through attributes
Managing VertiPaq Aggregations
Chapter 19 Analyzing DAX query plans
Introducing logical query plans
Introducing physical query plans
Introducing storage engine queries
Capturing profiling information
Reading VertiPaq storage engine queries
Understanding DISTINCTCOUNT internals
Understanding parallelism and datacache
Understanding the VertiPaq cache
Reading DirectQuery storage engine queries
Using aggregations in the data model
Defining optimization strategies
Identifying a single DAX expression to optimize
Analyzing server timings and query plan information
Identifying bottlenecks in the storage engine or formula engine
Implementing changes and rerunning the test query
Optimizing bottlenecks in DAX expressions
Optimizing context transitions
Reducing the impact of CallbackDataID
Avoiding table filters for DISTINCTCOUNT
54.198.37.250