Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Get Fabric Certified for FREE during Fabric Data Days. Don't miss your chance! Request now

Reply
Anonymous
Not applicable

Problem when creating a ranking using several tables in Power BI DAX

Hi team.

 

I'm trying to do this, for each couple year-month I need to create the ranking of my revenue. The rankin must restart everytime the year changes. This is an image of my model

 

db2907_0-1684429497470.png

And this is the formula that I've created:

 

Ranking Revenue =
VAR RevenuePerMonth =
    SUMX('sales', 'sales'[quantity] * RELATED('products'[price]))
RETURN
    RANKX(
        FILTER(
            ALL('datedim'),
            'datedim'[MonthNo] = MAX('datedim'[MonthNo]) ||
            'datedim'[Year] = MAX('datedim'[Year])
        ),
        RevenuePerMonth,
        ,
        ASC,
        Dense
    )
However, I'm getting always the same value when I create the table chart using the year and monthNo from the datedim table:
db2907_0-1684430384940.png

What is missing or what is wrong?

1 ACCEPTED SOLUTION
johnt75
Super User
Super User

Variables in DAX aren't really variables, they're constants, so the RevenuePerMonth variable is only calculated once, it is not recalculated for each year / month combination. 

Take your code from the variable declaration and use it to create a new measure, and then reference that measure in your ranking code.

View solution in original post

3 REPLIES 3
johnt75
Super User
Super User

Variables in DAX aren't really variables, they're constants, so the RevenuePerMonth variable is only calculated once, it is not recalculated for each year / month combination. 

Take your code from the variable declaration and use it to create a new measure, and then reference that measure in your ranking code.

Anonymous
Not applicable

Thanks @johnt75  for your help. I have made the modifications and right now the metric is working. However, I would like to understand something. If I write this expression the ranking is ok:

 

Ranking Revenue Test =
    RANKX(
        ALL(DateDim[YYYYMM],'DateDim'[MonthNo]),
        [Revenue Measure],,
        DESC,
        Dense
    )
 
But, when I write this one the metric always returns the same value 1:
 
Ranking Revenue Test =
    RANKX(
        ALL(DateDim[YYYYMM],'DateDim'[MonthNo]),
        SUMX(sales, sales[quantity] * RELATED(products[price] )),,
        DESC,
        Dense
    )
 
What is happening in the second definition?

In the first version context transition is happening because you are calling a measure. In the second it is not happening and so the same value is being calculated for every row. If you wrapped the SUMX inside CALCULATE then it would work OK.

Helpful resources

Announcements
Fabric Data Days Carousel

Fabric Data Days

Advance your Data & AI career with 50 days of live learning, contests, hands-on challenges, study groups & certifications and more!

October Power BI Update Carousel

Power BI Monthly Update - October 2025

Check out the October 2025 Power BI update to learn about new features.

FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.