Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

The Power BI DataViz World Championships are on! With four chances to enter, you could win a spot in the LIVE Grand Finale in Las Vegas. Show off your skills.

Reply
Syndicate_Admin
Administrator
Administrator

El total general es incorrecto al usar RANKX en DAX

Hola a todos,

Supongamos que tengo estado, ciudad y venta. Quiero calcular dinámicamente el rango en función del parámetro. Puedo obtener el estado y la ciudad correctos en función de las ventas, pero cuando busco el total general, no es correcto.

Esta es mi medida para filtrar el estado y la ciudad:

Clasificar las ventas =
Var RankCity = RANKX(TODOS SELECCIONADOS(Sales_data[Ciudad]),[ventas totales],,DESC,Denso)
Var RankState = RANKX(TODOS SELECCIONADOS(Sales_data[Estado]),[ventas totales],,DESC,Denso)

Var Resultados =
INTERRUPTOR(VERDADERO(),
ISINSCOPE(Sales_data[Ciudad]),RankCity
,ISINSCOPE(Sales_data[Estado]),RankState
)

DEVOLUCIÓN
SI(Resultados <= 'Rangos dinámicos'[Rangos de valor dinámico],SUMA(Sales_data[Ventas]))
¿Hay alguna manera de modificar esto y obtener el total general y el subtotal correctos: si lo estoy haciendo solo por estado usando otra medida, puedo lograr, pero en el momento en que intento la ciudad no es correcto?
qqqqqwwwweeerrr_0-1741188133419.png

Gracias de antemano

Saludos

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

Este era un problema interesante. Desea que el parámetro de rango numérico muestre las ventas de los X estados principales en función del cálculo de las ventas de las X ciudades principales, ¿verdad? Definitivamente implicó un poco de arreglo, pero creo que esto es lo que estás buscando.

Rank the sales = 
VAR _topXCitySales = 
GENERATE(
    ALLSELECTED( Sales_data[State] ),
    VAR _citySales = CALCULATETABLE( 
        SUMMARIZECOLUMNS( 
            Sales_data[City], 
            "TotalSales", CALCULATE( SUM( Sales_data[Sales] ) ) 
        ), 
        ALLSELECTED( Sales_data[City] ) 
    )
    VAR _topXCitySales = 
    WINDOW( 
        1, ABS, 'Ranks Dynamic'[Ranks Dynamic Value], ABS, 
        _citySales, ORDERBY( [TotalSales], DESC ) 
    )
    RETURN
    _topXCitySales
)
VAR _stateByTopXCitySales = 
CALCULATETABLE( 
    SUMMARIZECOLUMNS( 
        Sales_data[State], 
        "TopStateSales", CALCULATE( SUM( Sales_data[Sales] ), KEEPFILTERS( _topXCitySales ) ) ), 
    ALLSELECTED( Sales_data[State], Sales_data[City] ) 
)
VAR _topXStateByTopXCitySales = 
WINDOW( 
    1, ABS, 'Ranks Dynamic'[Ranks Dynamic Value], ABS, 
    _stateByTopXCitySales, ORDERBY( [TopStateSales], DESC ) 
)
VAR _topXStateVals = SUMMARIZE( _topXStateByTopXCitySales, Sales_data[State] )
VAR _topXTopXSummary = FILTER( _topXCitySales, Sales_data[State] IN _topXStateVals )
RETURN
CALCULATE( 
    SUM( Sales_data[Sales] ), 
    KEEPFILTERS( _topXTopXSummary )
)

MarkLaf_0-1741248035119.gif

Editar: se han limpiado un poco los nombres de DAX y variables, error tipográfico

View solution in original post

7 REPLIES 7
Syndicate_Admin
Administrator
Administrator

Ventas de rango =
VAR N = SELECTEDVALUE('Rangos dinámicos'[Rangos dinámicos], 3)
VAR Estado actual = SELECTEDVALUE(«Sales_data»[Estado])
VAR Ciudad actual = SELECTEDVALUE('Sales_data'[Ciudad])
VAR AllSelectedGeo = TODOS SELECCIONADOS('Sales_data' [Estado], 'Sales_data' [Ciudad])
DEVOLUCIÓN
INTERRUPTOR(
VERDADERO(),
ISINSCOPE('Sales_data'[Ciudad]),
VAR Filtro de estado = TREATAS({CurrentState}, 'Sales_data'[Estado])
VAR TopCities =
CALCULABLE(
TOPN(N, VALORES('Sales_data'[Ciudad]), [Ventas], DESC),
AllSelectedGeo,
StateFilter
)
DEVOLUCIÓN
SI(
CONTIENE(
TopCities,
'Sales_data'[Ciudad],
Ciudad Actual
),
[Ventas],
ESPACIO EN BLANCO()
),
ISINSCOPE(en lo sucesivo, «Sales_data»[Estado]),
SUMX(
TOPN(N,
CALCULABLE(VALORES('Sales_data'[Ciudad]), AllSelectedGeo),
[Ventas], DESC
),
[Ventas]
),
SUMX(
GENERAR(
VALORES(en lo sucesivo, «Sales_data»[Estado]),
TOPN(N,
CALCULABLE(VALORES('Sales_data'[Ciudad]), AllSelectedGeo),
[Ventas], DESC
)
),
[Ventas]
)
)
Syndicate_Admin
Administrator
Administrator

Este era un problema interesante. Desea que el parámetro de rango numérico muestre las ventas de los X estados principales en función del cálculo de las ventas de las X ciudades principales, ¿verdad? Definitivamente implicó un poco de arreglo, pero creo que esto es lo que estás buscando.

Rank the sales = 
VAR _topXCitySales = 
GENERATE(
    ALLSELECTED( Sales_data[State] ),
    VAR _citySales = CALCULATETABLE( 
        SUMMARIZECOLUMNS( 
            Sales_data[City], 
            "TotalSales", CALCULATE( SUM( Sales_data[Sales] ) ) 
        ), 
        ALLSELECTED( Sales_data[City] ) 
    )
    VAR _topXCitySales = 
    WINDOW( 
        1, ABS, 'Ranks Dynamic'[Ranks Dynamic Value], ABS, 
        _citySales, ORDERBY( [TotalSales], DESC ) 
    )
    RETURN
    _topXCitySales
)
VAR _stateByTopXCitySales = 
CALCULATETABLE( 
    SUMMARIZECOLUMNS( 
        Sales_data[State], 
        "TopStateSales", CALCULATE( SUM( Sales_data[Sales] ), KEEPFILTERS( _topXCitySales ) ) ), 
    ALLSELECTED( Sales_data[State], Sales_data[City] ) 
)
VAR _topXStateByTopXCitySales = 
WINDOW( 
    1, ABS, 'Ranks Dynamic'[Ranks Dynamic Value], ABS, 
    _stateByTopXCitySales, ORDERBY( [TopStateSales], DESC ) 
)
VAR _topXStateVals = SUMMARIZE( _topXStateByTopXCitySales, Sales_data[State] )
VAR _topXTopXSummary = FILTER( _topXCitySales, Sales_data[State] IN _topXStateVals )
RETURN
CALCULATE( 
    SUM( Sales_data[Sales] ), 
    KEEPFILTERS( _topXTopXSummary )
)

MarkLaf_0-1741248035119.gif

Editar: se han limpiado un poco los nombres de DAX y variables, error tipográfico

¡Gracias, esto es genial! Estaba pensando en la misma línea, pero no pude usar la función de ventana aquí. Nuevo aprendizaje para mí !!

Syndicate_Admin
Administrator
Administrator

Hola

Comparta el enlace de descarga del archivo PBI.

Hola @Ashish_Mathur ,

Aquí está

Syndicate_Admin
Administrator
Administrator

Hola @qqqqqwwwweeerrr

Por favor, intente:

Rank the sales =
VAR rankcity = RANKX(ALLSELECTED(Sales_data[City]), [total sales], , DESC, Dense)
VAR rankstate = RANKX(ALLSELECTED(Sales_data[State]), [total sales], , DESC, Dense)

VAR results =
    SWITCH(
        TRUE(),
        ISINSCOPE(Sales_data[City]), rankcity,
        ISINSCOPE(Sales_data[State]), rankstate
    )

VAR totalSales =
    SUMX(
        FILTER(
            ALLSELECTED(Sales_data),
            SWITCH(
                TRUE(),
                ISINSCOPE(Sales_data[City]), RANKX(ALLSELECTED(Sales_data[City]), [total sales], , DESC, Dense) <= 'Ranks Dynamic'[Ranks Dynamic Value],
                ISINSCOPE(Sales_data[State]), RANKX(ALLSELECTED(Sales_data[State]), [total sales], , DESC, Dense) <= 'Ranks Dynamic'[Ranks Dynamic Value],
                TRUE(), FALSE()
            )
        ),
        Sales_data[Sales]
    )

RETURN
    IF(
        HASONEVALUE(Sales_data[City]) || HASONEVALUE(Sales_data[State]),
        IF(results <= 'Ranks Dynamic'[Ranks Dynamic Value], SUM(Sales_data[Sales])),
        totalSales
    )

Saludos

Nono Chen

Si esta publicación ayuda, considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.

Hola @v-nuoc-msft ,

Gracias por su respuesta. Sigo obteniendo la misma salida

qqqqqwwwweeerrr_0-1741232021689.png

He adjuntado el archivo PBI para su referencia en cuestión.

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!

FebPBI_Carousel

Power BI Monthly Update - February 2025

Check out the February 2025 Power BI update to learn about new features.

Feb2025 NL Carousel

Fabric Community Update - February 2025

Find out what's new and trending in the Fabric community.

Top Solution Authors
Top Kudoed Authors