Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
10 years ago
Solved

Rankx all return 1

First time using the rankx. Trying to use the rankx function to return employee sales rank but somehow all return 1.

table 1 is the simple sales table. hoping to return result like table 2. 

 

My sales rank = rankx(allselected(sales[employee number]), sum(sales[sales amount]))

 

Can anyone see what is wrong here? thanks.

 

 

 

employee number sales amount sales date
100801 1 02/04/16
100801203/05/16
100801406/05/16
100806201/04/16
100806101/05/15
100806101/05/16
100806403/04/16
100806308/05/16
100807402/05/15

 

crew employee number sales amount sales rank
   
10080172
100806111
10080743
  • Anonymous's avatar
    Anonymous
    10 years ago

    Anonymous CALCULATE() converts a row context to a filter context. Without it the row context at each step in the iteration doesn't work properly with the filter context coming from the ALLSELECTED(). You get an implicit CALCULATE when you reference an existing measure like this:

     

    Total Sales = SUM(sales[sales amount])

     

    Sales Rank = RANKX (ALLSELECTED(sales[employee number]), [Total Sales])

     

    ...but when you spell out the expression instead of using a measure you also have to spell out the invisible CALCULATE yourself. The above formula is identical to your

     

    Sales Rank = RANKX( ALLSELECTED(sales[employee number]), CALCULATE( SUM(sales[sales amount]))

     

    This article might help to explain it.

6 Replies

  • Anonymous's avatar
    Anonymous
    Not applicable

    Ended up with this. It worked but still no idea why?

     

    sales rank = rankx(allselected(sales[employee number]), calculate(sum(sales[sales amount])))

    • Anonymous's avatar
      Anonymous
      Not applicable

      Anonymous CALCULATE() converts a row context to a filter context. Without it the row context at each step in the iteration doesn't work properly with the filter context coming from the ALLSELECTED(). You get an implicit CALCULATE when you reference an existing measure like this:

       

      Total Sales = SUM(sales[sales amount])

       

      Sales Rank = RANKX (ALLSELECTED(sales[employee number]), [Total Sales])

       

      ...but when you spell out the expression instead of using a measure you also have to spell out the invisible CALCULATE yourself. The above formula is identical to your

       

      Sales Rank = RANKX( ALLSELECTED(sales[employee number]), CALCULATE( SUM(sales[sales amount]))

       

      This article might help to explain it.

      • Anonymous's avatar
        Anonymous
        Not applicable

        Anonymous Absolutely spot on! The link is also very useful. An eye opening lesson for Dax. Thanks.