Fabric Analytics Engineer Associate · 27% of the exam

Implement and manage semantic models: free practice questions

5 sample questions from our 68-question bank for this domain — answers and explanations included. These are the same scenario-based style as the real Microsoft exam.

1. A developer needs to write a DAX measure that returns the sales total for the previous quarter, regardless of which quarter is currently selected in a slicer. The model has a standard DimDate table with a Date column. Which DAX expression is correct?

  • A. PrevQtrSales = CALCULATE([Total Sales], PREVIOUSQUARTER(DimDate[Date]))✓ Correct
  • B. PrevQtrSales = CALCULATE([Total Sales], DATEADD(DimDate[Date], -1, QUARTER))
  • C. PrevQtrSales = CALCULATE([Total Sales], PARALLELPERIOD(DimDate[Date], -1, QUARTER))
  • D. PrevQtrSales = CALCULATE([Total Sales], DATESINPERIOD(DimDate[Date], MIN(DimDate[Date]), -1, QUARTER))
Explanation

PREVIOUSQUARTER returns the set of dates in the quarter immediately preceding the last date in the current filter context, making it the standard function for this use case. DATEADD with QUARTER shifts the current period by one quarter, which is equivalent but PREVIOUSQUARTER is the idiomatic choice — DATEADD is also correct in behavior, but PREVIOUSQUARTER is the most direct answer. PARALLELPERIOD shifts by a complete period and is similar but typically used for same-quarter comparisons across years. DATESINPERIOD counts back one quarter from MIN(Date), which would return dates from the beginning of the selection minus one quarter, not necessarily the prior complete quarter, making it inaccurate for this purpose.

2. A data modeler is optimizing a Power BI semantic model. The model has a FactSales table with 200 million rows and several dimension tables. The model refresh is taking over 4 hours. The modeler wants to reduce refresh time while keeping full historical data accessible in reports. Which approach is the BEST solution?

  • A. Switch the FactSales table to DirectQuery mode to eliminate the need to import data during refresh.
  • B. Enable incremental refresh on FactSales with a policy that stores 5 years of history and refreshes only the last 30 days incrementally.✓ Correct
  • C. Split the FactSales table into yearly archive tables and create a union query in Power Query to combine them at query time.
  • D. Enable the large semantic model storage format and increase the Fabric capacity SKU to allow larger in-memory footprints.
Explanation

Incremental refresh is specifically designed to solve this problem: by partitioning the data and only refreshing recent partitions (e.g., the last 30 days), the majority of historical data (which rarely changes) does not need to be re-imported on every refresh cycle, dramatically reducing refresh duration. Option A (DirectQuery) would eliminate import refresh entirely but at the cost of query performance — every report interaction would hit the source database, which is not appropriate for a 200M row fact table used in interactive reports. Option C (splitting into yearly tables) is an anti-pattern that increases model complexity, breaks single-table measures, and does not actually reduce the time to refresh historical data if the union query still loads all rows. Option D (large model format + SKU increase) allows the model to grow larger in memory but does not address the root cause of slow refresh — the volume of data being re-imported each cycle.

3. A senior data modeler needs to implement a dynamic format string in a calculation group so that the displayed unit (e.g., '$1.2M' vs '$1,200,000') changes based on the magnitude of the measure result. Which approach correctly implements this in a calculation group?

  • A. Set the Format String Expression property of the calculation item to a DAX expression such as IF(SELECTEDMEASURE() >= 1000000, "$#,##0.0,,\"M\"", "$#,##0")✓ Correct
  • B. Set the calculation item's expression to return a text string that includes the formatted value concatenated with the unit suffix.
  • C. Create a separate calculation group named 'Format' with items for each format string and use SELECTEDMEASUREFORMATSTRING() to apply them.
  • D. Use a field parameter to let users choose a format string at runtime, referencing the field parameter inside the calculation item expression.
Explanation

The Format String Expression property on a calculation item accepts a DAX expression that returns a format string. Using IF(SELECTEDMEASURE() >= 1000000, ...) evaluates the magnitude of the current measure at runtime and returns the appropriate Excel-style format string, which Power BI then applies to the displayed value. This is the purpose-built mechanism for dynamic format strings in calculation groups. Returning a text string with the formatted value concatenated would change the measure's data type to text, breaking further aggregations and numeric operations. A separate 'Format' calculation group could theoretically work but would require users to manually select a format item — it does not dynamically respond to value magnitude. Field parameters control which field/measure is displayed, not how values are formatted; they cannot supply dynamic format strings to a calculation group.

4. A senior developer needs to write a DAX measure that calculates cumulative (running total) sales from the beginning of the current year up to the latest date available in the data, using the WINDOW function. The model has a DimDate table with a Date column and a measure [Total Sales]. Which DAX expression correctly implements this using WINDOW?

  • A. YTD Sales = CALCULATE([Total Sales], WINDOW(1, ABS, 0, REL, ALLSELECTED(DimDate[Date]), ORDERBY(DimDate[Date])))
  • B. YTD Sales = CALCULATE([Total Sales], WINDOW(1, ABS, 0, REL, ALL(DimDate[Date]), ORDERBY(DimDate[Date], ASC)))✓ Correct
  • C. YTD Sales = CALCULATE([Total Sales], DATESYTD(DimDate[Date]))
  • D. YTD Sales = CALCULATE([Total Sales], WINDOW(-1, REL, 0, REL, ALLSELECTED(DimDate[Date]), ORDERBY(DimDate[Date], ASC)))
Explanation

WINDOW(1, ABS, 0, REL, ALL(DimDate[Date]), ORDERBY(DimDate[Date], ASC)) defines a window that starts at absolute position 1 (the first row in the ordered partition, i.e., the first date of all time) and ends at relative position 0 (the current row). This creates a running total from the very beginning of the data to the current date. Using ALL ensures all dates are considered regardless of filter context, which is appropriate for a cumulative total. Option A uses ALLSELECTED, which would respect slicer filters and could truncate the window start if a date slicer is applied. Option C (DATESYTD) is a valid YTD approach but does not use WINDOW as specified. Option D uses REL for the start position (-1, REL) which means 'one row before the current row,' producing a one-row lag rather than starting from the beginning of the dataset.

5. A developer writes the following DAX measure: Top10Revenue = CALCULATE( [Total Revenue], TOPN(10, ALL(DimProduct), [Total Revenue], DESC) ) When placed in a table visual that already has DimProduct[ProductName] on rows, the measure returns the same value for every product. What is the most likely reason?

  • A. TOPN requires a RANKX function to work correctly inside CALCULATE
  • B. ALL(DimProduct) removes the visual's row context, so TOPN evaluates over all products and CALCULATE overrides the existing filter with all 10 top products, making every row show the same aggregated total✓ Correct
  • C. CALCULATE cannot be nested with TOPN; FILTER should be used instead
  • D. The measure needs KEEPFILTERS to preserve the visual's row context while also applying the TOPN filter
Explanation

ALL(DimProduct) removes the row-level filter from the visual, and TOPN then selects the global top 10 products. CALCULATE replaces the existing product filter with this set of 10 products, so every row in the visual evaluates [Total Revenue] over the same 10 products, returning the same grand total for each row. TOPN does not require RANKX; it is a standalone table function. CALCULATE can be used with TOPN and this is a common pattern. KEEPFILTERS would intersect filters rather than replace them, but the core issue is ALL removing row context, not missing KEEPFILTERS.

63 more questions in this domain

Practice the full bank with instant grading, flashcards, and a timed mock exam.

Start practicing free
Implement and manage semantic models — Free Fabric Analytics Engineer Associate Practice Questions | DataCertPrep — Certification Prep