πŸ”’ Guided

Pre-launch preview. Authorised access only.

Incorrect code

Guided by A Guide to Cloud
Explore AB-900 AI-901
Guided DP-600 Domain 3
Domain 3 β€” Module 3 of 8 38%
24 of 29 overall

DP-600 Study Guide

Domain 1: Maintain a Data Analytics Solution

  • Workspace Access Controls
  • Row-Level & Object-Level Security
  • Sensitivity Labels & Endorsement
  • Git Version Control in Fabric
  • Deployment Pipelines: Dev β†’ Test β†’ Prod
  • Impact Analysis & Dependencies
  • XMLA Endpoint & Reusable Assets

Domain 2: Prepare Data

  • Microsoft Fabric: The Big Picture Free
  • Lakehouses: Your Data Foundation Free
  • Warehouses in Fabric Free
  • Choosing the Right Data Store Free
  • Data Connections & OneLake Catalog
  • Shortcuts & OneLake Integration
  • Ingesting Data: Dataflows Gen2 & Pipelines
  • Star Schema Design Free
  • SQL Objects: Views, Functions & Stored Procedures
  • Transforming Data: Reshape & Enrich
  • Data Quality & Cleansing
  • Querying with SQL
  • Querying with KQL
  • Querying with DAX

Domain 3: Implement and Manage Semantic Models

  • Semantic Models: Storage Modes
  • Relationships & Advanced Modeling
  • DAX Essentials: Variables & Functions
  • Calculation Groups & Field Parameters
  • Large Models & Composite Models
  • Direct Lake Mode
  • DAX Performance Optimization
  • Incremental Refresh

DP-600 Study Guide

Domain 1: Maintain a Data Analytics Solution

  • Workspace Access Controls
  • Row-Level & Object-Level Security
  • Sensitivity Labels & Endorsement
  • Git Version Control in Fabric
  • Deployment Pipelines: Dev β†’ Test β†’ Prod
  • Impact Analysis & Dependencies
  • XMLA Endpoint & Reusable Assets

Domain 2: Prepare Data

  • Microsoft Fabric: The Big Picture Free
  • Lakehouses: Your Data Foundation Free
  • Warehouses in Fabric Free
  • Choosing the Right Data Store Free
  • Data Connections & OneLake Catalog
  • Shortcuts & OneLake Integration
  • Ingesting Data: Dataflows Gen2 & Pipelines
  • Star Schema Design Free
  • SQL Objects: Views, Functions & Stored Procedures
  • Transforming Data: Reshape & Enrich
  • Data Quality & Cleansing
  • Querying with SQL
  • Querying with KQL
  • Querying with DAX

Domain 3: Implement and Manage Semantic Models

  • Semantic Models: Storage Modes
  • Relationships & Advanced Modeling
  • DAX Essentials: Variables & Functions
  • Calculation Groups & Field Parameters
  • Large Models & Composite Models
  • Direct Lake Mode
  • DAX Performance Optimization
  • Incremental Refresh
Domain 3: Implement and Manage Semantic Models Premium ⏱ ~15 min read

DAX Essentials: Variables & Functions

Write DAX that works. Variables, iterators, table filtering, windowing, and information functions β€” with line-by-line explanations.

DAX for DP-600

β˜• Simple explanation

Think of DAX like a spreadsheet formula language that works on entire tables.

In Excel, you write formulas for individual cells. In DAX, you write formulas that operate on columns and tables. A SUM in Excel adds a range of cells. A SUM in DAX adds an entire column, filtered by whatever context the report visual provides.

This module covers the DAX patterns the exam tests most: variables (store intermediate results), iterators (row-by-row calculations), table filtering (CALCULATE), windowing (ranking, running totals), and information functions (type checking).

DAX (Data Analysis Expressions) is the formula language for Power BI semantic models. The DP-600 exam tests your ability to write measures using specific function categories: variables (VAR/RETURN for readability and performance), iterators (SUMX, AVERAGEX, MAXX β€” row-by-row evaluation), table filtering (CALCULATE, CALCULATETABLE, FILTER, ALL, ALLEXCEPT), windowing functions (OFFSET, WINDOW, INDEX β€” relative row access), and information functions (ISBLANK, HASONEVALUE, SELECTEDVALUE).

Variables: VAR / RETURN

Variables store intermediate results, improving readability and performance (the expression is evaluated once, not twice).

Profit Margin =
VAR TotalRevenue = SUM(Sales[Revenue])
VAR TotalCost = SUM(Sales[Cost])
VAR Margin =
    DIVIDE(TotalRevenue - TotalCost, TotalRevenue)
RETURN
    Margin

What’s happening:

  1. VAR TotalRevenue β€” calculates total revenue once and stores it
  2. VAR TotalCost β€” calculates total cost once
  3. VAR Margin β€” computes margin using both stored values
  4. RETURN β€” returns the final result

Without variables, you would write DIVIDE(SUM(Sales[Revenue]) - SUM(Sales[Cost]), SUM(Sales[Revenue])) β€” SUM(Sales[Revenue]) is evaluated twice.

Iterators: SUMX, AVERAGEX, MAXX, COUNTX

Iterators evaluate an expression row by row across a table, then aggregate the results.

SUMX β€” row-by-row sum

Total Revenue (Extended) =
SUMX(
    Sales,
    Sales[Quantity] * Sales[UnitPrice]
)

What’s happening: For each row in the Sales table, multiply Quantity by UnitPrice. Then sum all the results. This handles the case where revenue is not pre-calculated in a column.

AVERAGEX β€” row-by-row average

Average Transaction Value =
AVERAGEX(
    Sales,
    Sales[Quantity] * Sales[UnitPrice]
)

When to use iterators vs simple aggregators

UseWhen
SUM(column)The value is already in a column
SUMX(table, expression)The value needs calculation per row
AVERAGE(column)Average of a single column
AVERAGEX(table, expression)Average of a per-row calculation
πŸ’‘ Exam tip: Iterator performance

Iterators evaluate every row in the table. For a fact table with 200 million rows, SUMX processes 200 million calculations. This is usually fast (the VertiPaq engine is optimised for this), but:

  • Nested iterators (SUMX inside SUMX) can be extremely slow β€” avoid if possible
  • CALCULATE inside an iterator changes the filter context per row β€” powerful but expensive
  • If the calculation can be pre-computed as a column, a simple SUM is faster than SUMX

Table filtering: CALCULATE

CALCULATE is the most important DAX function. It evaluates an expression in a modified filter context.

Previous Year Revenue =
CALCULATE(
    [Total Revenue],
    SAMEPERIODLASTYEAR(Dates[Date])
)

What’s happening:

  1. Start with the current filter context (whatever the visual is showing)
  2. Modify the date filter to show the same period last year
  3. Evaluate Total Revenue in this modified context

Common CALCULATE modifiers

ModifierWhat It DoesExample
ALL(table)Remove all filters from a table% of Grand Total
ALLEXCEPT(table, column)Remove all filters except the specified column% of Category Total
FILTER(table, condition)Apply a row-by-row filterSales where amount > 1000
KEEPFILTERS(filter)Add filter without overriding existing onesIntersect, not replace
Time intelligence functionsShift or expand date rangesYTD, QTD, previous year

Percentage of total pattern

% of Total Revenue =
VAR CurrentRevenue = [Total Revenue]
VAR AllRevenue =
    CALCULATE(
        [Total Revenue],
        ALL(Stores)
    )
RETURN
    DIVIDE(CurrentRevenue, AllRevenue)

What’s happening:

  1. CurrentRevenue β€” revenue in the current filter context (e.g., one region)
  2. AllRevenue β€” revenue with ALL store filters removed (grand total)
  3. DIVIDE β€” safe division that returns BLANK instead of error for division by zero

Windowing functions: OFFSET, WINDOW, INDEX

Windowing functions (added in recent DAX updates) provide relative row access β€” similar to SQL window functions.

OFFSET β€” access relative rows

Previous Month Revenue =
CALCULATE(
    [Total Revenue],
    OFFSET(-1, ALLSELECTED(Dates[Month]), ORDERBY(Dates[Month]))
)

WINDOW β€” access a range of rows

3-Month Moving Average =
AVERAGEX(
    WINDOW(
        -2, REL, 0, REL,
        ALLSELECTED(Dates[Month]),
        ORDERBY(Dates[Month])
    ),
    [Total Revenue]
)

Information functions

Information functions check data types, blank values, and context:

FunctionReturnsUse Case
ISBLANK(value)TRUE if blankConditional formatting, error handling
HASONEVALUE(column)TRUE if exactly one value in contextDynamic titles (β€œRevenue for [Region]β€œ)
SELECTEDVALUE(column, default)The single selected value, or defaultSlicer-driven parameters
ISINSCOPE(column)TRUE if the column is in the current groupingSubtotal vs detail row logic
ISFILTERED(column)TRUE if a filter is active on the columnConditional measure behavior
Dynamic Title =
IF(
    HASONEVALUE(Stores[Region]),
    "Revenue for " & SELECTEDVALUE(Stores[Region]),
    "Revenue β€” All Regions"
)
Question

Why use VAR/RETURN in DAX?

Click or press Enter to reveal answer

Answer

Variables (VAR) store intermediate results for reuse. Benefits: (1) Readability β€” complex measures broken into named steps. (2) Performance β€” the expression is evaluated once, not multiple times. (3) Debugging β€” you can inspect intermediate values.

Click to flip back

Question

What is the difference between SUM and SUMX?

Click or press Enter to reveal answer

Answer

SUM(column) aggregates an existing column. SUMX(table, expression) evaluates an expression row-by-row then sums the results. Use SUMX when the value needs per-row calculation (e.g., Quantity * Price). Use SUM when the value already exists as a column.

Click to flip back

Question

What does CALCULATE do?

Click or press Enter to reveal answer

Answer

CALCULATE evaluates an expression in a modified filter context. It takes a measure expression and one or more filter arguments. Example: CALCULATE([Revenue], Dates[Year] = 2026) evaluates Revenue with the date filter set to 2026, regardless of what the visual is showing.

Click to flip back

Question

What does HASONEVALUE do?

Click or press Enter to reveal answer

Answer

HASONEVALUE(column) returns TRUE if exactly one distinct value exists in the current filter context for that column. Used for dynamic titles, conditional formatting, and slicer-driven parameters. Example: IF(HASONEVALUE(Region), SELECTEDVALUE(Region), 'All Regions').

Click to flip back

Knowledge Check

Raj at Atlas Capital writes a measure: Profit Margin = DIVIDE(SUM(Trades[Revenue]) - SUM(Trades[Cost]), SUM(Trades[Revenue])). His colleague says this can be improved. How?

Knowledge Check

Anita at FreshCart needs a measure that calculates the average revenue per transaction, where revenue = Quantity x UnitPrice (there is no pre-calculated revenue column). Which DAX function should she use?

🎬 Video coming soon


Next up: Calculation Groups & Field Parameters β€” reduce measure proliferation with reusable calculation patterns.

← Previous

Relationships & Advanced Modeling

Next β†’

Calculation Groups & Field Parameters

Guided

I learn, I simplify, I share.

A Guide to Cloud YouTube Feedback

© 2026 Sutheesh. All rights reserved.

Guided is an independent study resource and is not affiliated with, endorsed by, or officially connected to Microsoft. Microsoft, Azure, and related trademarks are property of Microsoft Corporation. Always verify information against Microsoft Learn.