Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
5 years ago
Solved

Return largest category based on a sum

Hi there,

 

I am looking for a (hopefully) simple DAX measure to solve the following problem.

 

I have a range consisting of a number of employees, a chosen product, and their savings in each product. In a different table, I need to create a measure that returns the name of the product that contains the largest combined sum of savings. For e.g. Person 1, this would be "Product B", because the 750,000 in Product B exceeds the 500,000 in Product A (had it been opposite, the measure should return "Product A").

 

 

I am working in PowerPivot in Excel 2013 and have previously relied on "FIRSTNONBLANK" since the ranges have contained no dublicate values. However, that solution is no longer sufficient. Any help is greatly appreciated.

 

Thanks!

  • Hi,

    These measures work

    Total amount = SUM(Data[Amount])

    Top product = FIRSTNONBLANK ( TOPN ( 1, VALUES ( Data[Product] ), [Total amount] ), 1 )

    Hope this helps.

20 Replies

  • Hi,

    These measures work

    Total amount = SUM(Data[Amount])

    Top product = FIRSTNONBLANK ( TOPN ( 1, VALUES ( Data[Product] ), [Total amount] ), 1 )

    Hope this helps.

    • Anonymous's avatar
      Anonymous
      Not applicable

      Apologies for my delayed response, did not have a chance to try and implement the suggestions.

       

      Ashish_Mathur, you solution worked perfectly, thanks. And likewise, thanks to everyone else who came with suggestions, very appreciated!

  • Anonymous , Based on what I got

     

    Create a rank Measure and filter Rank =1

    rank measure =

    Rankx(all(Table[product]), calculate(Sum(Table[Amount])))

     

     

  • FrankAT's avatar
    FrankAT
    Icon for Community Champion rankCommunity Champion

    Hi Anonymous 

    take a look at the following solution:

     

     

     

    Max Amount = 
    Var _Rank = RANKX(ALL('Table'[Product]),[Sum of Amount],,DESC)
    RETURN
        IF(_Rank = 1, [Sum of Amount], BLANK())

     

     

    With kind regards from the town where the legend of the 'Pied Piper of Hamelin' is at home
    FrankAT (Proud to be a Datanaut)

    • Anonymous's avatar
      Anonymous
      Not applicable

      Thanks FrankAT, worked a charm in PowerBI.

       

      However, when trying to convert the formula to Excel PowerPivot, I cannot seem to make it work.

       

      I believe the problem is that Excel will not let you return a text string in a pivot table (unless it is used with e.g. FIRSTNONBLANK).

       

      How do I adjust the formula, so I get the formula to return the correct Product as a text string (I do not need to show the actual amounts in the table, just the product)?

      • Anonymous's avatar
        Anonymous
        Not applicable

        Hi Anonymous,

        Excel and power bi use different logic and structure to store data tables.

        Perhaps you can try to convert your table to the query table and use the 'M query' to create a reference query to summarize raw table records.

        let
            Source = RawTable,//change to your query table name
            #"Changed Type" = Table.TransformColumnTypes(Source,{{"Name", type text}, {"Product", type text}, {"Amount", Int64.Type}}),
            #"Grouped Rows" = Table.Group(#"Changed Type", {"Name", "Product"}, {{"Total", each List.Sum([Amount]), type nullable number}}),
            #"Grouped Rows1" = Table.Group(#"Grouped Rows", {"Name"}, {{"Count", each Table.LastN(_, 1), type table}}),
            #"Expanded Count" = Table.ExpandTableColumn(#"Grouped Rows1", "Count", {"Product", "Total"}, {"Product", "Total"})
        in
            #"Expanded Count"


        Regards,

        Xiaoxin Sheng