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

Enhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.

Reply
ChandeepChhabra
Impactful Individual
Impactful Individual

ALL function seems weird - HELP

Hello Ninjas,

 

Consider this data model.

ChandeepChhabra_0-1748493407494.png

 

with the following data

 

Data 1 Table

ChandeepChhabra_1-1748493451365.png

 

Dimension 1 Table

ChandeepChhabra_2-1748493493928.png

 

And the following measures

 

Sales 1 = SUM('Data 1'[Value])

Rank 1 = RANKX ( ALL('Dimension 1'[Group 2]), [Sales 1],, DESC )

 

 

And the visual comes up like this (where Group1 and Group 2 are coming from the Dimension 1 Table)

 

ChandeepChhabra_0-1748496643015.png

Nothing unusual here - As expected the ALL function overrides the visual filter and takes all unique values from Group 2 and sustains Group 1 Filter therefore the ranking is done within each value of Group 1.

 

Cool. Now comes another similar model.

ChandeepChhabra_1-1748496766538.png

 

With the following data

 

Dates Data (Group 2 is intentionally converted to date type)

ChandeepChhabra_2-1748496798713.png

 

Dates Dim (Group 2 is intentionally converted to date type)

ChandeepChhabra_3-1748496822963.png

 

And the following measures

Sales 3 = SUM('Dates Data'[Value])
Rank 3 = RANKX( ALL('Dates Dim'[Group 2]), [Sales 3],, DESC )

 

and then this visual (where group 1 and group 2 are coming from the dates dim table)

ChandeepChhabra_7-1748494442367.png

 

Notice the Rank 3 measure calculates overall Rank and not the rank within the Group 1. 

 

Now my question

  1. Why does the ALL function behaves differently when used with Dates.
  2. If I change the data type in the second model from dates to text or numbers the ALL function behaves as expected.
  3. If I write a query using the CALCULATE function the ALL behaves as expected but not when I use it in an iterator function.

    Here are a few queries

Query on the first model:

 

 ChandeepChhabra_8-1748494744328.png

 

Query on the seond model:

ChandeepChhabra_9-1748494818043.png

 

Notice the behaviour of the ALL function is as expected when used with CALCULATE but not in the case of the CONCATENATEX function.

WHY is that?

 

pbix file

1 ACCEPTED SOLUTION
OwenAuger
Super User
Super User

Hi @ChandeepChhabra 

The short answer is that if:

  • A column of type date is the primary key of a relationship ( 'Dates Dim'[Group 2] in your example ); and
  • A filter is applied to that column within CALCULATE

then the DAX engine treats the table containing the column of type date as though it had been marked as a date table, and automatically removes filters on that table when applying the filter on the specific date column.

 

See this SQLBI article.

 

In your example, within the Rank 3 measure

  1. RANKX iterates over the rows of ALL( 'Dates Dim'[Group 2] ).
  2. For each of those rows, it evaluates the measure [Sales 3].
  3. In the course of evaluating [Sales 3], context transition adds the current row's value of 'Dates Dim'[Group 2] as a filter.
  4. Due to the "automatic date table" behaviour described above, the automatic ALL ( 'Dates Dim' ) removes all filters on 'Dates Dim'.

So you end up with a rank for each value of 'Dates Dim'[Group 2] which is determined ignoring any other filters on 'Dates Dim', namely the filter on 'Dates Dim'[Group 1] due to grouping in the visual.

 

A possible fix still using RANKX could be:

Rank 3 =
VAR DatePartition =
    CALCULATETABLE (
        VALUES ( 'Dates Dim'[Group 2] ),
        REMOVEFILTERS ( 'Dates Dim'[Group 2] )
    )
RETURN
    RANKX (
        DatePartition,
        CALCULATE (
            [Sales 3],
            KEEPFILTERS ( DatePartition )
        ),
        ,
        DESC
    )

or you could write a measure using RANK specifying partitioning explicity.


Owen Auger
Did I answer your question? Mark my post as a solution!
Blog
LinkedIn

View solution in original post

4 REPLIES 4
OwenAuger
Super User
Super User

Hi @ChandeepChhabra 

The short answer is that if:

  • A column of type date is the primary key of a relationship ( 'Dates Dim'[Group 2] in your example ); and
  • A filter is applied to that column within CALCULATE

then the DAX engine treats the table containing the column of type date as though it had been marked as a date table, and automatically removes filters on that table when applying the filter on the specific date column.

 

See this SQLBI article.

 

In your example, within the Rank 3 measure

  1. RANKX iterates over the rows of ALL( 'Dates Dim'[Group 2] ).
  2. For each of those rows, it evaluates the measure [Sales 3].
  3. In the course of evaluating [Sales 3], context transition adds the current row's value of 'Dates Dim'[Group 2] as a filter.
  4. Due to the "automatic date table" behaviour described above, the automatic ALL ( 'Dates Dim' ) removes all filters on 'Dates Dim'.

So you end up with a rank for each value of 'Dates Dim'[Group 2] which is determined ignoring any other filters on 'Dates Dim', namely the filter on 'Dates Dim'[Group 1] due to grouping in the visual.

 

A possible fix still using RANKX could be:

Rank 3 =
VAR DatePartition =
    CALCULATETABLE (
        VALUES ( 'Dates Dim'[Group 2] ),
        REMOVEFILTERS ( 'Dates Dim'[Group 2] )
    )
RETURN
    RANKX (
        DatePartition,
        CALCULATE (
            [Sales 3],
            KEEPFILTERS ( DatePartition )
        ),
        ,
        DESC
    )

or you could write a measure using RANK specifying partitioning explicity.


Owen Auger
Did I answer your question? Mark my post as a solution!
Blog
LinkedIn

Thanks a lot Owen. I'd been intuitvely working with dual behaviour for a long time until I ran some tests.
I owe you a beer when we meet. Big fan otherwise 🙏🏻 

You're welcome Chandeep. Sounds good, looking forward to it!

😊🍻


Owen Auger
Did I answer your question? Mark my post as a solution!
Blog
LinkedIn

Perfect

Helpful resources

Announcements
July PBI25 Carousel

Power BI Monthly Update - July 2025

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

Join our Fabric User Panel

Join our Fabric User Panel

This is your chance to engage directly with the engineering team behind Fabric and Power BI. Share your experiences and shape the future.

June 2025 community update carousel

Fabric Community Update - June 2025

Find out what's new and trending in the Fabric community.