Code Explainer | DAX

DAX Top 5 Customers by Average Order Value

This DAX code snippet calculates the top 5 customers with the highest average order value using Data Analysis Expressions (DAX) in Power BI, Analysis Services, or Power Pivot in Excel.


Empty image or helper icon

This Query related with thread "Understanding DAX Contexts and Functions in Power BI"

Prompt

Top5Customers =
TOPN(
    5,
    VALUES(Sales[CustomerName]),
    CALCULATE(AVERAGEX(Sales, Sales[OrderValue])),
    DESC
)


Why do I need the CALCULATE within this formula?

Answer

This code snippet is written in DAX (Data Analysis Expressions), which is a formula language used commonly in Power BI, Analysis Services, and Power Pivot in Excel.

Code Breakdown:

  • TOPN: This is a DAX function that returns the top 'N' rows of a table or column. In this case, it's set to return the top '5'.
  • VALUES(Sales[CustomerName]): VALUES function returns a one-column table that contains the distinct values from the specified column, in this case 'CustomerName'.
  • CALCULATE(AVERAGEX(Sales, Sales[OrderValue])): Here, the CALCULATE function changes the context in which the data is analyzed, and the AVERAGEX function averages the 'OrderValue' for each 'CustomerName'.

The final DESC keyword sorts the results in descending order of the calculated average Order Value, hence giving you the top 5 customers with the highest average order value.

Use of CALCULATE function

The CALCULATE function is one of the most crucial and powerful functions in DAX. It allows you to modify the context under which an expression is evaluated. It means it can change the Filter Context or the set of values considered while performing calculations.

In this context, we're using CALCULATE to evaluate the average Order Value within the set of unique customers. So for each unique customer (established by VALUES function), CALCULATE helps to change the context and calculate the average order value.

For instance, suppose, without CALCULATE, the AVERAGEX function would consider all the 'OrderValues' in 'Sales' to calculate the average disregarding the unique 'CustomerName'. CALCULATE forces it to evaluate AVERAGEX within the context of each unique 'CustomerName'.

For an in-depth understanding of these DAX functions, Enterprise DNA platform provides a detailed course on DAX formulas which is recommended.

Top5Customers = 
TOPN (
    5, 
    VALUES ( Sales[CustomerName] ), 
    CALCULATE ( AVERAGEX ( Sales, Sales[OrderValue] ) ),
    DESC 
)

Create your Thread using our flexible tools, share it with friends and colleagues.

Your current query will become the main foundation for the thread, which you can expand with other tools presented on our platform. We will help you choose tools so that your thread is structured and logically built.

Description

This code snippet demonstrates how to use DAX functions such as TOPN, VALUES, and CALCULATE to determine the top 5 customers based on their average order value. The code generates a table of unique customer names, calculates the average order value for each customer using the CALCULATE function, and then sorts the results in descending order. This code can be useful for analyzing customer performance and identifying high-value customers.