Forum Discussion

ryanjparks's avatar
ryanjparks
Icon for Helper I rankHelper I
1 year ago
Solved

Statistical Grouping and Averages in Dataset

Hey everyone,   I'm curious if there is a way to get statistical averages based on dividing datasets into groups? For instance, I have the following chart as an example:     There are 18 c...
  • Anonymous's avatar
    Anonymous
    1 year ago

    Hi ryanjparks 

     

    Here's the sample data:

    Table:

    Then add a new measure:

    Percent Rank =
    VAR _vtable =
        VAR _vtable =
            SUMMARIZE (
                ALLSELECTED ( 'Table' ),
                'Table'[Customer Name        .],
                "_SALES", SUM ( 'Table'[Sales           .] )
            )
        RETURN
            ADDCOLUMNS (
                _vtable,
                "Percent Rank",
                    VAR CurrentSales = [_SALES]
                    VAR TotalRows =
                        COUNTROWS ( _vtable )
                    VAR _Rank =
                        RANKX ( _vtable, [_SALES],, DESC, DENSE )
                    VAR _minvalue =
                        MINX ( _vtable, [_SALES] )
                    RETURN
                        IF ( [_SALES] = _minvalue, 0, DIVIDE ( TotalRows - _Rank, TotalRows - 1 ) )
            )
    RETURN
        SUMX (
            FILTER ( _vtable, [_SALES] = SUM ( 'Table'[Sales           .] ) ),
            [Percent Rank]
        )
    

    Next, add 3 measures:

    Low Volume =
    VAR _vtable =
        VAR _vtable =
            SUMMARIZE (
                ALLSELECTED ( 'Table' ),
                'Table'[Customer Name        .],
                "_SALES", SUM ( 'Table'[Sales           .] ),
                "_AVG", AVERAGE ( 'Table'[$ / ea        .] )
            )
        RETURN
            ADDCOLUMNS (
                _vtable,
                "Percent Rank",
                    VAR CurrentSales = [_SALES]
                    VAR TotalRows =
                        COUNTROWS ( _vtable )
                    VAR _Rank =
                        RANKX ( _vtable, [_SALES],, DESC, DENSE )
                    VAR _minvalue =
                        MINX ( _vtable, [_SALES] )
                    RETURN
                        IF ( [_SALES] = _minvalue, 0, DIVIDE ( TotalRows - _Rank, TotalRows - 1 ) )
            )
    RETURN
        AVERAGEX (
            FILTER ( _vtable, [Percent Rank] >= 0 && [Percent Rank] <= 0.33 ),
            [_AVG]
        )
    
    Med Volume =
    VAR _vtable =
        VAR _vtable =
            SUMMARIZE (
                ALLSELECTED ( 'Table' ),
                'Table'[Customer Name        .],
                "_SALES", SUM ( 'Table'[Sales           .] ),
                "_AVG", AVERAGE ( 'Table'[$ / ea        .] )
            )
        RETURN
            ADDCOLUMNS (
                _vtable,
                "Percent Rank",
                    VAR CurrentSales = [_SALES]
                    VAR TotalRows =
                        COUNTROWS ( _vtable )
                    VAR _Rank =
                        RANKX ( _vtable, [_SALES],, DESC, DENSE )
                    VAR _minvalue =
                        MINX ( _vtable, [_SALES] )
                    RETURN
                        IF ( [_SALES] = _minvalue, 0, DIVIDE ( TotalRows - _Rank, TotalRows - 1 ) )
            )
    RETURN
        AVERAGEX (
            FILTER ( _vtable, [Percent Rank] >= 0.34 && [Percent Rank] <= 0.66 ),
            [_AVG]
        )
    
    High Volume =
    VAR _vtable =
        VAR _vtable =
            SUMMARIZE (
                ALLSELECTED ( 'Table' ),
                'Table'[Customer Name        .],
                "_SALES", SUM ( 'Table'[Sales           .] ),
                "_AVG", AVERAGE ( 'Table'[$ / ea        .] )
            )
        RETURN
            ADDCOLUMNS (
                _vtable,
                "Percent Rank",
                    VAR CurrentSales = [_SALES]
                    VAR TotalRows =
                        COUNTROWS ( _vtable )
                    VAR _Rank =
                        RANKX ( _vtable, [_SALES],, DESC, DENSE )
                    VAR _minvalue =
                        MINX ( _vtable, [_SALES] )
                    RETURN
                        IF ( [_SALES] = _minvalue, 0, DIVIDE ( TotalRows - _Rank, TotalRows - 1 ) )
            )
    RETURN
        AVERAGEX (
            FILTER ( _vtable, [Percent Rank] >= 0.67 && [Percent Rank] <= 1 ),
            [_AVG]
        )
    

    The result is as follow:

     

    Best Regards

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