DP-600 semantic models explained
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
| Mode | How data is read | Typical trade-off |
|---|---|---|
| Import | Data is loaded into the model’s in-memory store on refresh | Fast queries; data is as fresh as the last refresh |
| DirectQuery | Queries go to the source at query time | Fresh data; speed depends on the source |
| Dual | Table can behave as Import or DirectQuery depending on the query | Useful for dimensions in composite models |
| Direct Lake | Reads Delta tables in OneLake directly | Import-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
VARandRETURNmake a measure readable and avoid recomputing an expression. CALCULATEchanges filter context; combine it withFILTER,ALL,ALLEXCEPTandREMOVEFILTERS.- Iterators such as
SUMX,AVERAGEXandRANKXevaluate an expression row by row over a table. - Table filtering with
FILTER,TOPNandCALCULATETABLE. - Windowing functions such as
WINDOW,OFFSET,INDEXandRANKfor running totals, moving averages and comparisons with the previous row. - Information functions such as
ISBLANK,ISFILTEREDandHASONEVALUE, 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 OneLake | Direct Lake on SQL analytics endpoint | |
|---|---|---|
| Source | Delta tables in OneLake | Tables through the SQL analytics endpoint |
| DirectQuery fallback | Does not fall back | Can fall back to DirectQuery |
| Use when | You want predictable behaviour and no silent fallback | You 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.