SKILL PATH · POWER BI (SIMULATED)

DAX Sandbox

Write DAX measures against a real table and have them evaluated. A simulation, not Power BI, but the same thinking.

THE TABLE

One Table Called Sales

Twelve rows, six columns. In DAX you refer to a column as Sales[Value], with the table name first and the column in square brackets.

DateRegionProductUnitsValueRefund
2026-03-02NorthPro plan24800
2026-03-03SouthStarter1600
2026-03-05NorthAdd-on313545
2026-03-08EastPro plan12400
2026-03-11SouthPro plan2480240
2026-03-14NorthStarter1600
2026-03-18WestAdd-on41800
2026-03-21EastPro plan24800
2026-03-24SouthAdd-on14545
2026-03-27WestPro plan12400
2026-03-29NorthPro plan24800
2026-03-30EastStarter16060

This is a simulation, clearly labelled. It runs a teaching subset of DAX in your browser: SUM, COUNTROWS, AVERAGE, MIN, MAX, DIVIDE, CALCULATE and FILTER, plus arithmetic. It is not Power BI, but the thinking transfers directly.

SIX EXERCISES

Write, Evaluate, Check

Each exercise teaches the function first. Unlimited attempts, a hint whenever you want one, and the worked answer after three tries.

0 of 6 exercises solved

1

Exercise 1 of 6

Add up a column

Not attempted

First, the function: SUM

A measure is a calculation that runs over whatever the report is filtered to. SUM adds one column of a table, written as Table[Column].

The pattern

Total Revenue = SUM(Sales[Value])

Your task

Write a measure that totals the Value column.

=
2

Exercise 2 of 6

Count the rows

Not attempted

First, the function: COUNTROWS

COUNTROWS counts rows rather than values, which is what you want when you are counting orders rather than adding money.

The pattern

Orders = COUNTROWS(Sales)

Your task

Write a measure that counts how many orders there are.

=
3

Exercise 3 of 6

Divide safely

Not attempted

First, the function: DIVIDE

DIVIDE is the safe division. If the bottom is zero it returns blank rather than an error, which keeps a dashboard from breaking on a quiet day.

The pattern

Avg Order Value = DIVIDE(SUM(Sales[Value]), COUNTROWS(Sales))

Your task

Write a measure for average order value: total value divided by the number of orders.

=
4

Exercise 4 of 6

Change the filter

Not attempted

First, the function: CALCULATE

CALCULATE is the one that matters. It runs a calculation with the filters you give it, replacing whatever the report had for that column.

The pattern

North Revenue = CALCULATE(SUM(Sales[Value]), Sales[Region]="North")

Your task

Write a measure for revenue in the North region only.

=
5

Exercise 5 of 6

Filter a table

Not attempted

First, the function: FILTER

FILTER returns a table of rows that pass a test, and is used inside CALCULATE when the condition is more than a simple equals.

The pattern

Big Orders = CALCULATE(SUM(Sales[Value]), FILTER(Sales, Sales[Value] > 200))

Your task

Write a measure that totals only the orders worth more than 200.

=
6

Exercise 6 of 6

Net it off

Not attempted

First, the function: Combining measures

Measures are built from other measures. Writing one big expression is harder to read and harder to fix than two small ones.

The pattern

Net Revenue = SUM(Sales[Value]) - SUM(Sales[Refund])

Your task

Write a measure for net revenue: total value less total refunds.

=

Build Your Confidence with Data

Every skill path on Insyt is built around practice like this.