Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
4 years ago

Suma de TOPN

Hola, chicos

He visto este video de youtube en un tiempo y me pregunté si sería posible tener tanto la información de "Otros" como el TOPN que se está filtrando. Por ejemplo, en la imagen adjunta a continuación muestro lo que pretendo calcular, pero aún no pude encontrar una manera de calcularlo, así que aquí estoy. 🙂

Las medidas son las siguientes

En primer lugar, se crea un parámetro:

TopN = GENERATESERIES ( 1, 20, 1 )

A continuación, se creó el nombre Otros y se agregó a la tabla original:

Product Names = UNION ( ALLNOBLANKROW ( 'Product'[Product Name] ), { "Others" } )

Posteriormente, se crea una medida de fila visible para mostrar solo aquellas líneas que son más pequeñas o iguales al valor en el parámetro creado anteriormente (esto se establece en el panel Filtro de la tabla):

Visible Row = 
VAR Ranking = [Ranking]
VAR TopNValue = [TopN Value]
VAR Result =
    IF ( NOT ISBLANK ( Ranking ),
        ( Ranking <= TopNValue ) - ( Ranking = TopNValue + 1 ))
RETURN Result

El último paso fue crear la medida que calcula el total para "Otros":

Sales Amt = 
VAR SalesOfAll =
    CALCULATE ( [Sales Amount],
        REMOVEFILTERS ( 'Product Names' ))
RETURN IF ( NOT ISINSCOPE ( 'Product Names'[Product Name] ),

        -- Calculation for a group of products 
        SalesOfAll,

        -- Calculation for one product name
        VAR ProductsToRank = [TopN Value]
        VAR SalesOfCurrentProduct = [Sales Amount]
        VAR IsOtherSelected =
            SELECTEDVALUE ( 'Product Names'[Product Name] ) = "Others"
        RETURN
            IF (
                NOT IsOtherSelected,
                
                -- Calculation for a regular product
                SalesOfCurrentProduct,

                -- Calculation for Others
                VAR VisibleProducts =
                    CALCULATETABLE (
                        VALUES ( 'Product' ),
                        ALLSELECTED ( 'Product Names'[Product Name] )
                    )
                VAR ProductsWithSales =
                    ADDCOLUMNS (
                        VisibleProducts,
                        "@SalesAmount", [Sales Amount]
                    )
                VAR SalesOfTopProducts =
                    SUMX (
                        TOPN (
                            ProductsToRank,
                            ProductsWithSales,
                            [@SalesAmount]
                        ),
                        [@SalesAmount]
                    )
                VAR SalesOthers = 
                    SalesOfAll - SalesOfTopProducts
                RETURN
                    SalesOthers))

Ahora pregunto: ¿alguien sabe cómo calcular el TOPN filtrado para mostrarlo junto con los Otros en la misma tabla?

¡Gracias de antemano!

Archivo Pbi aquí

5 Replies