Forum Discussion

Roman_Zalesskii's avatar
3 years ago
Solved

top 10 and other in stack chart

Hi everyone, i'm trying to find a solution to the next problem. I need to build a stock chart with top 10 models and other values divided by date. Here is what i need it to look like.   I've ...
  • Anonymous's avatar
    Anonymous
    3 years ago

    Hi  Roman_Zalesskii ,

    I created some data:

    Here are the steps you can follow:

    1. Copy two of these tables as Table2 and Table3 in Power BI.

    Click [Other] - Right click - Remove column

    Table3:

    Click on [Groupr] and [Amount] - Right click - Remove column

    Click on  [Other] – Unpivot Columns.

    Select New Columns - Change Names to [Group], [Amount]

    2. Append Queries to both tables.

    Result:

    3. Result:

     

    Best Regards,

    Liu Yang

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

  • PaulDBrown's avatar
    PaulDBrown
    3 years ago

    Ok, here is one way. Set up the model with a Date Table, a dimension table for Model, and a discnnected table (I've called it Disconnected Legend). For this Disconnected Legend Table, I've used:

     

    Disconnected Legend =
    VAR _Model =
        ADDCOLUMNS (
            VALUES ( fTable[Model] ),
            "Order", RANKX ( VALUES ( fTable[Model] ), fTable[Model],, ASC, DENSE )
        )
    VAR _Other = { ( "Other", 1000000000000 ) }
    RETURN
        UNION ( _Model, _Other )
    

     

    (Use the Order column to sort the model column)

    The model looks like this:

    Next create the measures (in my example I'm showing top 3 & Other, so adapt the measures to your needs for Top10 & Other):

     

    Option A) TopN by date & other:

     

    SUM Price = 
    SUM('fTable'[Price])
    RANK by Date =
    IF (
        ISBLANK ( [SUM Price] ),
        BLANK (),
        RANKX ( ALL ( 'Model Table'[Model] ), [SUM Price],, DESC, DENSE )
    )
    
    Value for visual =
    VAR _T3 =
        CALCULATE (
            [SUM Price],
            FILTER ( 'Model Table', [RANK by Date] <= 3 ),
            TREATAS ( VALUES ( 'Disconnected Legend'[Model] ), 'Model Table'[Model] )
        )
    VAR _Other =
        CALCULATE (
            [SUM Price],
            FILTER ( ALL ( 'Model Table'[Model] ), [RANK by Date] > 3 )
        )
    RETURN
        IF ( MAX ( 'Disconnected Legend'[Model] ) = "Other", _Other, _T3 )
    

     

    Create the Stacked column visual with the Date Table[Date] for the x-axis, the Disconnected Legend[Model] for the Legend, and the [Value for visual] for the y-axis to get:

     

    Option B: Overall TopN & Others:

     

    RANK by Model =
    IF (
        ISBLANK ( [SUM Price] ),
        BLANK (),
        CALCULATE (
            RANKX ( ALL ( 'Model Table'[Model] ), [SUM Price],, DESC, DENSE ),
            ALL ( 'Date Table' )
        )
    )
    
    Value for visual All dates =
    VAR _T3 =
        CALCULATE (
            [SUM Price],
            FILTER ( 'Model Table', [RANK by Model] <= 3 ),
            TREATAS ( VALUES ( 'Disconnected Legend'[Model] ), 'Model Table'[Model] )
        )
    VAR _Other =
        CALCULATE (
            [SUM Price],
            FILTER ( ALL ( 'Model Table'[Model] ), [RANK by Model] > 3 )
        )
    RETURN
        IF ( MAX ( 'Disconnected Legend'[Model] ) = "Other", _Other, _T3 )
    

     

     

     

    Sample PBIX attached