DP-600 semantic models explained

Updated October 9, 2026

Implement and manage semantic models is worth 25–30% of DP-600. It splits into designing and building models (storage modes, schema, relationships, DAX, calculation groups, composite models) and optimising them at enterprise scale (performance, Direct Lake, incremental refresh). Scenario questions here usually ask which choice avoids a problem, such as slow queries, fallback or a refresh that takes too long.

Design and build semantic models

Storage modes

ModeHow data is readTypical trade-off
ImportData is loaded into the model’s in-memory store on refreshFast queries; data is as fresh as the last refresh
DirectQueryQueries go to the source at query timeFresh data; speed depends on the source
DualTable can behave as Import or DirectQuery depending on the queryUseful for dimensions in composite models
Direct LakeReads Delta tables in OneLake directlyImport-like speed without a full data copy

Choose by freshness, volume and speed. A composite model mixes modes across tables, for example Import dimensions with a DirectQuery fact table, and can also combine several sources. The large semantic model storage format lets models grow past the default size limit and is the option to know for large models.

Schema and relationships

Build a star schema in the model: fact tables on the many side, dimensions on the one side, single-direction filters by default. Where a dimension has a many-to-many link to a fact, such as customers who belong to several segments, use a bridge table to keep relationships one-to-many rather than relying on a direct many-to-many relationship. Avoid bidirectional filtering unless a scenario needs it, because it adds ambiguity and cost.

DAX you need to know

  • Variables with VAR and RETURN make a measure readable and avoid recomputing an expression.
  • CALCULATE changes filter context; combine it with FILTER, ALL, ALLEXCEPT and REMOVEFILTERS.
  • Iterators such as SUMX, AVERAGEX and RANKX evaluate an expression row by row over a table.
  • Table filtering with FILTER, TOPN and CALCULATETABLE.
  • Windowing functions such as WINDOW, OFFSET, INDEX and RANK for running totals, moving averages and comparisons with the previous row.
  • Information functions such as ISBLANK, ISFILTERED and HASONEVALUE, used to make a measure behave differently by context.

Calculation groups, dynamic format strings, field parameters

A calculation group holds calculation items that wrap any selected measure, using SELECTEDMEASURE(). One group with items for current period, year to date and prior year replaces dozens of duplicated measures. A dynamic format string changes how a measure displays depending on context, for example currency or percentage. A field parameter lets report users switch which measure or column a visual shows; it changes the fields, not the logic.

Optimize enterprise-scale semantic models

Performance

Tuning has two sides. In reports, reduce the number of visuals on a page, simplify visual interactions, and use Performance Analyzer to see which visual is slow. In the model, remove unused columns, lower column cardinality, use proper data types, avoid calculated columns that could be computed upstream, and review measures. Tools you should recognise are Performance Analyzer, DAX query view, DAX Studio and VertiPaq Analyzer. Writing a measure with variables and with simple filters is usually faster than filtering a whole table repeatedly.

Direct Lake

Direct Lake loads columns from Delta files in OneLake on demand. Two flavours appear on the exam:

Direct Lake on OneLakeDirect Lake on SQL analytics endpoint
SourceDelta tables in OneLakeTables through the SQL analytics endpoint
DirectQuery fallbackDoes not fall backCan fall back to DirectQuery
Use whenYou want predictable behaviour and no silent fallbackYou need SQL endpoint features, such as views, accepting fallback

Fallback happens when a query cannot be served directly, for example when the source is a view or the data exceeds capacity limits. It keeps the report working but can make queries slower, so Microsoft lets you configure the fallback behaviour. Refresh in Direct Lake is a framing operation: it updates the model’s metadata to point at the latest Delta data, rather than copying the data, and you can have it follow changes automatically.

Incremental refresh

Incremental refresh refreshes only recent partitions instead of the whole table. In an Import model you create two date/time parameters named RangeStart and RangeEnd, filter the date column with them in Power Query, then define the policy: how much history to keep and how much to refresh. The source must support query folding to get the benefit.

Example questions

Question 1. A fact table with five years of orders takes hours to refresh in full every night, but only the last seven days change. What should you configure?

  • A. A field parameter on the date column
  • B. Incremental refresh using RangeStart and RangeEnd parameters
  • C. A larger capacity, with refresh left unchanged
  • D. A calculation group on the date table
Show answer

Answer: B

Incremental refresh with RangeStart and RangeEnd parameters refreshes only recent partitions and keeps history unchanged. Switching to DirectQuery changes the storage mode and query behaviour, a larger capacity only makes the full refresh faster, and field parameters are unrelated to refresh.

Want more questions like this? Full DP-600 practice tests →

Question 2. A measure repeats the same SUMX expression three times, and a report using it is slow. What is the best improvement?

  • A. Store the expression in a VAR and reference the variable
  • B. Make the relationships bidirectional
  • C. Convert the measure to a calculated column
  • D. Hide the table that the measure uses
Show answer

Answer: A

Storing the repeated expression in a variable evaluates it once and reuses the result, which improves both readability and speed. Bidirectional relationships add cost, converting the measure to a calculated column would store a row-level value that cannot respond to filter context, and hiding the table has no effect on evaluation.

Want more questions like this? Full DP-600 practice tests →

Question 3. Each customer can belong to several loyalty segments, and each segment has many customers. You need to filter sales by segment while keeping clean one-to-many relationships. What should you add?

  • A. A single text column listing all segments per customer
  • B. Delete the Segment table and ignore segments
  • C. A bridge table of customer and segment pairs
  • D. A measure that counts segments
Show answer

Answer: C

A bridge table with one row per customer and segment lets both Customer and Segment relate to it as one-to-many, which resolves the many-to-many link cleanly. Merging segments into one text column breaks filtering, deleting the segment table loses the attribute, and a calculated measure cannot replace a relationship.

Want more questions like this? Full DP-600 practice tests →

Next, the practical pages: prerequisites and exam tips.