Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
1 year ago
Solved

RANK with PARTITION BY Like SQL

Hi,

 

I am looking to use a DAX formula, similar to the RANK with Partition By window function within SQL.

 

My desired result is the below:


IDDateRank
101-Jan-211
101-Jan-211
102-Jan-212
103-Jan-213
201-Jan-211
202-Jan-212
301-Jan-001
401-Jan-001

 

This DAX is not working, I am receiving all 1 values as below:

Ranker =
RANKX(
    ALL(Table[ID]), Table[Date])
 
 
IDDateRank
101-Jan-211
101-Jan-211
102-Jan-211
103-Jan-211
201-Jan-211
202-Jan-211
301-Jan-001
401-Jan-001
 
 Thanks for your help.
  • The newer RANK function should make this easier than it used to be.

     

    Try this:

    RANK (
        DENSE,
        ORDERBY ( 'Table'[Date], ASC ),
        PARTITIONBY ( 'Table'[ID] )
    )
  • Calculate column on Table, where you add a column to calculate the year

     

    Year = YEAR ( Tabella[Date] )

     

    Finale Column

    RANK ( DENSE, ORDERBY( Tabella[Date] ), DEFAULT, PARTITIONBY( Tabella[YEAR]))
     

    If this helped, please consider giving kudos and mark as a solution

    me in replies or I'll lose your thread

    consider voting this Power BI idea

    Francesco Bergamaschi

    MBA, M.Eng, M.Econ, Professor of BI

8 Replies

  • The newer RANK function should make this easier than it used to be.

     

    Try this:

    RANK (
        DENSE,
        ORDERBY ( 'Table'[Date], ASC ),
        PARTITIONBY ( 'Table'[ID] )
    )
    • Anonymous's avatar
      Anonymous
      Not applicable

      Thanks mate, perfect.

  • Anonymous's avatar
    Anonymous
    Not applicable

    Apologies, I desire this to be ranked by earliest date.

    • FBergamaschi's avatar
      FBergamaschi
      Super User

      I do not understand the following

       

      1  are yo ulooking for a column to add to the table or to a measure?

       

      2 your desred result is confusing

       

      IDDateRank
      101-Jan-211
      101-Jan-211
      102-Jan-212
      103-Jan-213
      201-Jan-211
      202-Jan-212
      301-Jan-001
      401-Jan-001

       

      do you want the rank within a year?

       

      Thanks

       

      If this helped, please consider giving kudos and mark as a solution

      me in replies or I'll lose your thread

      consider voting this Power BI idea

      Francesco Bergamaschi

      MBA, M.Eng, M.Econ, Professor of BI

      • Anonymous's avatar
        Anonymous
        Not applicable

        Hi mate,

         

        A new column, which ranks the dates grouped by each ID.

         

        The actual date value is irrelevant, I just want the earliest to be 1 for each ID, and the second 2, and so forth.

    • Anonymous's avatar
      Anonymous
      Not applicable

      Same issue, utilised exactly, still receiving all 1 values.

      rn =
      VAR CurrentDate =
          SELECTEDVALUE ( Table[Date] )
      VAR RankingTable =
          CALCULATETABLE (
              SUMMARIZE ( Table, Table[Date] ),
              ALLSELECTED (), -- filter context of visual
              VALUES ( Table[ID]) -- retain current Category filter
          )
      RETURN
          RANKX (
              RankingTable,
              Table[Date],
              CurrentDate,
              ASC
          )