There are many reasons to use variables in your DAX code. I decided to make a video about the following three:
- Readability
- Caching
- Performance
If you find the video to be helpful, you can find the DAX I used in the video below.
Net Price =
DIVIDE ( Sales[Gross Sales] – Sales[Rebates] – Sales[Discounts], Sales[Units] )
Net Price (var) =
–DIVIDE(Sales[Gross Sales] – Sales[Rebates] – Sales[Discounts],Sales[Units])
VAR netSales = Sales[Gross Sales] – Sales[Rebates] – Sales[Discounts]
RETURN
DIVIDE ( netSales, Sales[Units] )
Avg Product Price =
DIVIDE (
SUMX (
FILTER ( ALL ( Sales ), Sales[Product] = EARLIER ( Sales[Product] ) ),
Sales[Gross Sales] – Sales[Discounts] – Sales[Rebates]
),
SUMX (
FILTER ( ALL ( Sales ), Sales[Product] = EARLIER ( Sales[Product] ) ),
Sales[Units]
)
)
Avg Product Price (var) =
VAR allNetProductRevenue =
SUMX (
FILTER ( ALL ( Sales ), Sales[Product] = EARLIER ( Sales[Product] ) ),
Sales[Gross Sales] – Sales[Discounts] – Sales[Rebates]
)
VAR allProductUnits =
SUMX (
FILTER ( ALL ( Sales ), Sales[Product] = EARLIER ( Sales[Product] ) ),
Sales[Units]
)
RETURN
DIVIDE ( allNetProductRevenue, allProductUnits )
Avg Product Price (var) 2 =
VAR productForCurrentRecord = Sales[Product]
VAR allNetProductRevenue =
SUMX (
FILTER ( ALL ( Sales ), Sales[Product] = productForCurrentRecord ),
Sales[Gross Sales] – Sales[Discounts] – Sales[Rebates]
)
VAR allProductUnits =
SUMX (
FILTER ( ALL ( Sales ), Sales[Product] = productForCurrentRecord ),
Sales[Units]
)
RETURN
DIVIDE ( allNetProductRevenue, allProductUnits )
highest price =
IF (
DIVIDE ( Sales[Gross Sales] – Sales[Rebates] – Sales[Discounts], Sales[Units] )
>= DIVIDE (
SUMX (
FILTER ( ALL ( Sales ), Sales[Product] = EARLIER ( Sales[Product] ) ),
Sales[Gross Sales] – Sales[Discounts] – Sales[Rebates]
),
SUMX (
FILTER ( ALL ( Sales ), Sales[Product] = EARLIER ( Sales[Product] ) ),
Sales[Units]
)
),
DIVIDE ( Sales[Gross Sales] – Sales[Rebates] – Sales[Discounts], Sales[Units] ),
DIVIDE (
SUMX (
FILTER ( ALL ( Sales ), Sales[Product] = EARLIER ( Sales[Product] ) ),
Sales[Gross Sales] – Sales[Discounts] – Sales[Rebates]
),
SUMX (
FILTER ( ALL ( Sales ), Sales[Product] = EARLIER ( Sales[Product] ) ),
Sales[Units]
)
)
)
highest price (var) =
VAR NetPrice =
DIVIDE ( Sales[Gross Sales] – Sales[Rebates] – Sales[Discounts], Sales[Units] )
VAR AvgProductPrice =
DIVIDE (
SUMX (
FILTER ( ALL ( Sales ), Sales[Product] = EARLIER ( Sales[Product] ) ),
Sales[Gross Sales] – Sales[Discounts] – Sales[Rebates]
),
SUMX (
FILTER ( ALL ( Sales ), Sales[Product] = EARLIER ( Sales[Product] ) ),
Sales[Units]
)
)
RETURN
IF ( NetPrice >= AvgProductPrice, NetPrice, AvgProductPrice )