Forum Discussion

DLB13's avatar
DLB13
Helper I
6 years ago
Solved

TOPN Across Multiple Columns

Hi all - 

 

I am new to PowerBI - I know the measure I need to use (TOPN), but I can't quite figure out how to set it up properly.

 

I have ~20 columns across which I need to identify and display (as text) the top three selections. I've attached a really basic example of how the data looks. So in this case, if this were sports that high schoolers played, I would need to have a measure to calculate and display the column name for the top three most commonly played sports.

 

Any tips?

 

RespondentSoccerFootballGolfBaseballHockeyTrack
ASoccer   HockeyTrack
BSoccer  Baseball  
C Football Baseball  
DSoccer  BaseballHockey 
E  Golf   
FSoccer  Baseball Track
GSoccerFootball   Track
H Football Baseball  
I Football    
  • Hi DLB13 ,

    1. Select the 'Respondent' column and right click to unpivot other columns in power queries, close and apply it.

    2. Create a measure like this:

     

    TOP3 =
    VAR tab =
        ADDCOLUMNS (
            DISTINCT ( 'Table'[Attribute] ),
            "Count",
            VAR attr = 'Table'[Attribute]
            RETURN
                COUNTROWS (
                    FILTER ( ALL ( 'Table' ), 'Table'[Attribute] = attr && 'Table'[Value] = attr )
                )
        )
    VAR newtab =
        ADDCOLUMNS ( tab, "Rank", RANKX ( tab, [Count],, DESC, DENSE ) )
    RETURN
        CONCATENATEX ( FILTER ( newtab, [Rank] = 1 ), [Attribute], "," ) & " "
            & CONCATENATEX ( FILTER ( newtab, [Rank] = 2 ), [Attribute], "," ) & " "
            & CONCATENATEX ( FILTER ( newtab, [Rank] = 3 ), [Attribute], "," )
    ​

     

    3. Put the measure in a card visual and you will get the top3 sports:

     

    Here is the sample file that hopes to help you, please try it: PBIX 

    In this sample file I also created a rank table for reference that you can refer.

     

    Best Regards,
    Yingjie Li

    If this post helps then please consider Accept it as the solution to help the other members find it more quickly.

4 Replies

  • Anonymous's avatar
    Anonymous
    Not applicable

    Looks like your data comes from a pivoted report. Unpivot the data using Power Query so that it is in proper databse format. That will allow you to perform ranking.

     

    Thanks

  • v-yingjl's avatar
    v-yingjl
    Community Support

    Hi DLB13 ,

    1. Select the 'Respondent' column and right click to unpivot other columns in power queries, close and apply it.

    2. Create a measure like this:

     

    TOP3 =
    VAR tab =
        ADDCOLUMNS (
            DISTINCT ( 'Table'[Attribute] ),
            "Count",
            VAR attr = 'Table'[Attribute]
            RETURN
                COUNTROWS (
                    FILTER ( ALL ( 'Table' ), 'Table'[Attribute] = attr && 'Table'[Value] = attr )
                )
        )
    VAR newtab =
        ADDCOLUMNS ( tab, "Rank", RANKX ( tab, [Count],, DESC, DENSE ) )
    RETURN
        CONCATENATEX ( FILTER ( newtab, [Rank] = 1 ), [Attribute], "," ) & " "
            & CONCATENATEX ( FILTER ( newtab, [Rank] = 2 ), [Attribute], "," ) & " "
            & CONCATENATEX ( FILTER ( newtab, [Rank] = 3 ), [Attribute], "," )
    ​

     

    3. Put the measure in a card visual and you will get the top3 sports:

     

    Here is the sample file that hopes to help you, please try it: PBIX 

    In this sample file I also created a rank table for reference that you can refer.

     

    Best Regards,
    Yingjie Li

    If this post helps then please consider Accept it as the solution to help the other members find it more quickly.