Instiq
Chapter 2 · Model the data·v1.0.0·Updated 6/29/2026·~14 min

What's changed: Created PL-300 Chapter 2 (domain: Model the data): data model design (star schema, table/column properties, role-playing dimensions, cardinality/cross-filter direction, date table, calculated columns/tables), DAX calculations (measures vs calculated columns, CALCULATE, time intelligence, semi-additive, quick measures, calculation groups), and model performance optimization (remove unnecessary rows/columns, Performance Analyzer/DAX query view, reduce granularity).

2.2Create calculations with DAX

Key points

Understand measures vs calculated columns, aggregation measures, CALCULATE, time intelligence, statistical/semi-additive, quick measures, and calculation groups.

DAX is the language that adds calculations to a model. Start with measures vs calculated columns.

2.2.1Measures vs calculated columns

A calculated column computes and stores a per-row value in row context (increases model size; usable on slicers/axes); a measure computes aggregations dynamically in filter context (not stored; ideal for aggregating values). Aggregations (sum/average/ratio) should generally be measures.

2.2.2Aggregation and CALCULATE

Build basic aggregations with SUM/AVERAGE/COUNT. CALCULATE is DAX’s core function that modifies filter context to aggregate, expressing "sales under a condition" or "year-over-year" (e.g., CALCULATE(SUM(Sales[Amount]), Sales[Region]="East")). DAX also handles statistical functions (stdev/median) and semi-additive measures that cannot simply be summed (e.g., inventory balance).

2.2.3Time intelligence, quick measures, calculation groups

Time intelligence (TOTALYTD, SAMEPERIODLASTYEAR, DATEADD) concisely expresses period comparisons given a date table. Quick measures generate templated DAX from the GUI, helpful for learning. Calculation groups let you define calculation items once and reuse them across many measures (e.g., YTD/PY/YoY), preventing measure explosion (created in Tabular Editor, etc.).

Exam point

Cues: "store per-row, use on axis" = calculated column. "aggregate dynamically" = measure. "aggregate by changing filter context" = CALCULATE. "YTD/same period last year" = time intelligence (needs date table). "reuse the same time calc across many measures" = calculation groups. "balance you cannot sum" = semi-additive measure.

Warning

Watch the mix-ups: (1) Aggregate with measures (not calculated columns). (2) CALCULATE differs from SUM etc. (it changes context). (3) Time intelligence needs a date table. (4) Calculation groups reuse calculation items, not a replacement for a single measure.

Diagram: distinguish calculated columns (per-row in row context, for slicers/axes) from measures (dynamic aggregation in filter context); aggregate with SUM, change context with CALCULATE, use time intelligence (YTD/SAMEPERIODLASTYEAR) given a date table, and reuse YTD/PY/YoY via calculation groups.
Master context

2.2.4Section summary

  • Calculated column=per-row stored / measure=dynamic aggregation; aggregate via measures
  • CALCULATE=modify filter context; time intelligence needs a date table
  • Calculation groups reuse time calcs and prevent measure explosion

Sign in to track progress — Log in.

Quick check

(just a quick review)

Q1. You want to store a category value per row for use on slicers/axes. Best?

Q2. You want to aggregate total sales dynamically per filters/slicers. Best?

Q3. You want to change filter context during aggregation, e.g., "sales limited to the East region". Best DAX function?

Q4. You want to compute YoY and YTD concisely. Which prerequisite-and-means is correct?

Q5. You want to reuse "YTD/PY/YoY" across many measures and limit the number of measures. Best?

Check your understandingPractice questions for Chapter 2: Model the data