Power BI and DAX: Three Reasons to use DAX Variables

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 ( allNetProductRevenueallProductUnits )

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 ( allNetProductRevenueallProductUnits )

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 >= AvgProductPriceNetPriceAvgProductPrice )

Posted in DAX

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s