Forum Discussion

arcanri's avatar
arcanri
Frequent Visitor
2 years ago

Return Second Highest Value in Matrix

Hello, 

 

I have calculated the maximum value of each row for a Power BI matrix with the below DAX; my question is: How do I modify it to calculate the 2nd highest value in each row, rather than the maximum?

 

MaxBidPrice NetAfterHaul per MBF =
VAR MaxBidPriceMBF =
CALCULATETABLE(
    ADDCOLUMNS(
        SUMMARIZE(BidPriceFlat3,DestinationPQ6[DestID])
        ,
        "Amount",[Net After Haul per MBF]),
        ALLSELECTED(DestinationPQ6[DestID]))

        VAR MaxValue = MAXX(MaxBidPriceMBF,[Amount])
        VAR CurrentValue=[Net After Haul per MBF]
        VAR Result = Switch(True(),
            CurrentValue = MaxValue,MaxValue)
        RETURN
        Result
 
Thank you!

3 Replies

  • Use RANKX, TOPN(1(TOPN(2)), or any of the window functions.  Lots of choices.

     

    Please provide sample data that covers your issue or question completely, in a usable format (not as a screenshot).

    Do not include sensitive information or anything not related to the issue or question.

    If you are unsure how to upload data please refer to https://community.fabric.microsoft.com/t5/Community-Blog/How-to-provide-sample-data-in-the-Power-BI-Forum/ba-p/963216

    Please show the expected outcome based on the sample data you provided.

    Want faster answers? https://community.fabric.microsoft.com/t5/Desktop/How-to-Get-Your-Question-Answered-Quickly/m-p/1447523

  • Anonymous's avatar
    Anonymous
    Not applicable

    Thanks for the reply from lbendlin , please allow me to provide another insight:

     

    Hi arcanri ,

     

    You can try below formula to create measure:

    Second_ = 
    VAR RankedValues =
        ADDCOLUMNS(
            BidPriceFlat3,
            "Rank", RANKX(
                FILTER(BidPriceFlat3, BidPriceFlat3[DestinationID] = EARLIER(BidPriceFlat3[DestinationID])),
                BidPriceFlat3[NetAfterHaulPerMBF],
                ,
                DESC,
                DENSE
            )
        )
    VAR SecondHighestValue =
        CALCULATE(
            MAXX(
                FILTER(RankedValues, [Rank] = 2),
                [NetAfterHaulPerMBF]
            ),
            ALLEXCEPT(BidPriceFlat3, BidPriceFlat3[DestinationID])
        )
    RETURN
        SecondHighestValue
    

     

     

    Best Regards,
    Adamk Kong

     

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

     

    • arcanri's avatar
      arcanri
      Frequent Visitor

      Thank you.  I think we're closer to a solution. The above solution returned a ranked list of values; however, it did not return a value of the 2nd highest price.  I have exported out the report into an excel file and modified to mask corporate data.  The yellow highlighted cells are what I am trying to return with the formula.  Thank you again for your help. 

       

      Thank you!