Forum Discussion

czaldumbide's avatar
czaldumbide
Helper II
2 years ago
Solved

Add Ranking Column with filters

Hi Everyone,

 

I need some help creating an index column using DAX.  I have a table named ACCOUNTEXCEPTION with columns [ID] , [Key] and [Status]. I first want to create a ranking column, that sorts records in ascending order based on [ID] grouped by [Key]. 
 

To achieve this I can use the following code which works perfectly. 

Order by key =
VAR CurrentKey =  'ACCOUNTEXCEPTION'[Key]
VAR CurrentID =  'ACCOUNTEXCEPTION'[ID]

RETURN
CALCULATE
(
    COUNTROWS('ACCOUNTEXCEPTION'),
    FILTER
    (
     ALL('ACCOUNTEXCEPTION'),
     'ACCOUNTEXCEPTION'[Key] = CurrentKey
        && 'ACCOUNTEXCEPTION'[ID] <= CurrentID
    )
)

Now the issue I can't seem to solve is how to apply this ranking to only certain keys that meet a criteria. If the first ID within a key has the status = 'Research', then I want to go ahead with the ranking, otherwise I want to leave it blank. Below is how the final table should look like:
 
KeyIDStatusOrder by Key
A

1

Research1
A2In progress2
A3Completed3
B1Initiated 
B2In progress 
C1Research1
C2Completed2

 

Any help would be appreciated!
Thanks

  • Jihwan_Kim's avatar
    Jihwan_Kim
    2 years ago

    Hi,

    Please check the below picture and the attached pbix file.

     

     

     

    Order by key CC = 
    VAR _firstid =
        MINX (
            FILTER (
                ACCOUNTEXCEPTION,
                ACCOUNTEXCEPTION[Key] = EARLIER ( ACCOUNTEXCEPTION[Key] )
            ),
            ACCOUNTEXCEPTION[ID]
        )
    VAR _condition =
        COUNTROWS (
            FILTER (
                ACCOUNTEXCEPTION,
                ACCOUNTEXCEPTION[Key] = EARLIER ( ACCOUNTEXCEPTION[Key] )
                    && ACCOUNTEXCEPTION[ID] = _firstid
                    && ACCOUNTEXCEPTION[Status] = "Research"
            )
        ) = 1
    RETURN
        IF (
            _condition,
            SUMX (
                FILTER (
                    ACCOUNTEXCEPTION,
                    ACCOUNTEXCEPTION[Key] = EARLIER ( ACCOUNTEXCEPTION[Key] )
                        && ACCOUNTEXCEPTION[ID] <= EARLIER ( ACCOUNTEXCEPTION[ID] )
                ),
                1
            )
        )

4 Replies

  • Hi,

    Please check the below picture and the attached pbix file.

    It is for creating a new column.

     

     

    RANK function (DAX) - DAX | Microsoft Learn

     

    Order by key CC =
    VAR _condition =
        COUNTROWS (
            FILTER (
                ACCOUNTEXCEPTION,
                ACCOUNTEXCEPTION[Key] = EARLIER ( ACCOUNTEXCEPTION[Key] )
                    && ACCOUNTEXCEPTION[ID] = 1
                    && ACCOUNTEXCEPTION[Status] = "Research"
            )
        ) = 1
    RETURN
        IF (
            _condition,
            RANK (
                SKIP,
                ACCOUNTEXCEPTION,
                ORDERBY ( ACCOUNTEXCEPTION[ID], ASC ),
                ,
                PARTITIONBY ( ACCOUNTEXCEPTION[Key] ),
                MATCHBY ( ACCOUNTEXCEPTION[Key], ACCOUNTEXCEPTION[ID] )
            )
        )
    

     

    • czaldumbide's avatar
      czaldumbide
      Helper II

      Thanks for the code @Jihwan_kin. I need to modify slightly the way my ID column works since it doesnt't always start with a 1 per each key. Please see below the updated example and let me know how we could modify the ranking column. I appreciate your help. 

       

      KeyIDStatusRanking

      A

      24Research1
      A28In Progress2
      A29Completed3
      B231Initiated 
      B236Completed 
      C72Research1
      C73In Progress2
      C77Completed3
      • Jihwan_Kim's avatar
        Jihwan_Kim
        Super User

        Hi,

        Please check the below picture and the attached pbix file.

         

         

         

        Order by key CC = 
        VAR _firstid =
            MINX (
                FILTER (
                    ACCOUNTEXCEPTION,
                    ACCOUNTEXCEPTION[Key] = EARLIER ( ACCOUNTEXCEPTION[Key] )
                ),
                ACCOUNTEXCEPTION[ID]
            )
        VAR _condition =
            COUNTROWS (
                FILTER (
                    ACCOUNTEXCEPTION,
                    ACCOUNTEXCEPTION[Key] = EARLIER ( ACCOUNTEXCEPTION[Key] )
                        && ACCOUNTEXCEPTION[ID] = _firstid
                        && ACCOUNTEXCEPTION[Status] = "Research"
                )
            ) = 1
        RETURN
            IF (
                _condition,
                SUMX (
                    FILTER (
                        ACCOUNTEXCEPTION,
                        ACCOUNTEXCEPTION[Key] = EARLIER ( ACCOUNTEXCEPTION[Key] )
                            && ACCOUNTEXCEPTION[ID] <= EARLIER ( ACCOUNTEXCEPTION[ID] )
                    ),
                    1
                )
            )