Microsoft Certified: Power BI Data Analyst AssociateModel the dataMedium

A data analyst is designing a Power BI model for a retail company. The 'Sales' table contains 'TransactionID', 'ProductID', 'Quantity', and 'Price' columns. The analyst needs to calculate the 'Total Sales Amount' as 'Quantity * Price' for each transaction. This calculation will be used frequently in various visuals and measures. Which is the most appropriate way to implement this calculation in the Power BI model?

  1. ACreate a measure named 'SalesAmount' with the expression 'SUMX(Sales, Sales[Quantity] * Sales[Price])'.
  2. BCreate a calculated column named 'SalesAmount' in the 'Sales' table with the expression 'Sales[Quantity] * Sales[Price]'.
  3. CCreate a measure named 'SalesAmount' with the expression 'SUM(Sales[Quantity]) * SUM(Sales[Price])'.
  4. DPerform the calculation in Power Query during data transformation, creating a new column.
Show answer & explanation

Correct answer: A. Create a measure named 'SalesAmount' with the expression 'SUMX(Sales, Sales[Quantity] * Sales[Price])'.

The most appropriate way is to create a measure using SUMX. The calculation 'Quantity * Price' needs to happen at the row level for each transaction. SUMX correctly iterates through each row of the 'Sales' table, calculates 'Quantity * Price' for that row, and then sums up these row-level results. This approach is memory-efficient compared to a calculated column and accurately aggregates the individual transaction amounts.

Why the other options are wrong

  • B. A calculated column would store the 'SalesAmount' for every row in the model, consuming memory. While correct, it's less memory-efficient than a measure if the calculation is primarily for aggregation.
  • C. This expression calculates the sum of all quantities and multiplies it by the sum of all prices, which is mathematically incorrect for total sales amount. (e.g., (1+2)*(5+10) != (1*5)+(2*10)).
  • D. Performing this in Power Query creates a new column that is materialized in the model, similar to a calculated column. While it can be efficient for simple, static row-level calculations, for aggregations in Power BI, a DAX measure is often preferred for flexibility and memory optimization.

SUMX for Row-Level Aggregation

SUMX is a DAX iterator function that evaluates an expression for each row of a specified table and then sums the results. It's essential for calculations that require row-by-row context before aggregation.

  • Iterates over each row of a table.
  • Evaluates an expression for each row.
  • Sums the results of the expression.
  • Crucial for 'sum of products' or similar row-level calculations.
  • More memory efficient than a calculated column for aggregated values.

Memory trick: When multiplying sums, SUMX first, then sum the products.

More Model the data questions