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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Rankx en mesas virtuales devuelve solo 1

Hola chicos

Estoy tratando dentro de una medida de generar el ranking por país basado en ACT vs BUD.

La tabla de hechos y la tabla de dimensiones DimEntities están conectadas en el modelo.

La tabla de hechos tiene solo una columna con los valores y una columna para diferenciar el escenario (por lo tanto, ACT, BUD, etc.).

Entiendo que RANKX funciona en el contexto de filas, por lo que apenas puedo usarlo en medidas ya existentes. Es por eso que estoy tratando de construir estas tablas virtuales.

También entendí que para calcular ACT - BUD, primero deben crearse en una primera tabla virtual.

Ahora me estoy volviendo loco, porque hagas lo que hagas, obtengo el ranking "1" para todos los países.

Aquí está el código DAX que uso:

Ranking de los países =
Dónde vTabla1 = CALCULATETABLE(
ADDCOLUMNS(
RESUMIR(
'Hecho',
'Hecho'[Fecha],
'Hecho'[Entidad],
DimEntities[País]),
"ACTO S", CALCULAR( SUMA('Hecho'[Valor]), 'Hecho'[Escenario]= "Actual") ,
"BUD S", CALCULAR(SUMA('Hecho'[Valor]), 'Hecho'[Escenario]= "Presupuesto"),
"PY S", CALCULAR( SUMA('Hecho'[Valor]), 'Hecho'[Escenario]= "Actual", SAMEPERIODEL año pasado(DimDate[Fecha])) ,
"POR S", CALCULAR( SUMA('Hecho'[Valor]), DimDate[Año]=2019)
))

Dónde vTabla2 = CALCULATETABLE(
ADDCOLUMNS(vTabla1,
"ACT vs BUD S", [ACTO S]- [BUD S],
"ACT vs PY S", [ACTO S] - [PY S],
"ACT vs BY S", [ACTO S] - [POR S]
)
)

devolución RANKX(vTabla2, CALCULAR( suma( Tabla resumida[ACT vs BUD S])), , DESC)
Pregunta 1 --> ¿qué es esta tabla resumida y no la vTable2?
Pregunta 2: ¿cómo funciona el ranking?!!?
Gracias por cualquier ayuda / sugerencia.
Bien
G.
2 ACCEPTED SOLUTIONS
Syndicate_Admin
Administrator
Administrator

Hola, chicos

Creo que encontré la solución:

DÓNDE _tmpTable = RESUMIR(TODOSELECCIONADO('Hecho'), DimEntities[País], "Valor1", [ACT VS BUD])
DÓNDE _curCountry = VALOR SELECCIONADO(DimEntities[País])
DÓNDE _rankedTable = ADDCOLUMNS(FILTRO(_tmpTable, [País] <> ESPACIO EN BLANCO()), "rango",
RANKX(_tmpTable, [Valor1], ,DESC,Saltarse))
DEVOLUCIÓN
MAXX(FILTRO(_rankedTable, [País] = _curCountry ), [rango])

Mi inspiración vino de este post:

View solution in original post

Syndicate_Admin
Administrator
Administrator

Hola, chicos

Siguiendo esta idea

He podido resolver mi problema actual.
Esta medida ahora está funcionando:
Ranking basado en RANKING 2h WORKING =
DÓNDE _tmpTable = RESUMIR(TODOSELECCIONADO('Hecho'), DimEntities[País], "Valor1", [ACT VS BUD])
DÓNDE _curCountry = VALOR SELECCIONADO(DimEntities[País])
DÓNDE _rankedTable = ADDCOLUMNS(FILTRO(_tmpTable, [País] <> ESPACIO EN BLANCO()), "rango",
RANKX(_tmpTable, [Valor1], ,DESC,Saltarse))
DEVOLUCIÓN
MAXX(FILTRO(_rankedTable, [País] = _curCountry ), [rango])
Saludos y gracias por su ayuda

View solution in original post

8 REPLIES 8
Syndicate_Admin
Administrator
Administrator

Hola, chicos

Siguiendo esta idea

He podido resolver mi problema actual.
Esta medida ahora está funcionando:
Ranking basado en RANKING 2h WORKING =
DÓNDE _tmpTable = RESUMIR(TODOSELECCIONADO('Hecho'), DimEntities[País], "Valor1", [ACT VS BUD])
DÓNDE _curCountry = VALOR SELECCIONADO(DimEntities[País])
DÓNDE _rankedTable = ADDCOLUMNS(FILTRO(_tmpTable, [País] <> ESPACIO EN BLANCO()), "rango",
RANKX(_tmpTable, [Valor1], ,DESC,Saltarse))
DEVOLUCIÓN
MAXX(FILTRO(_rankedTable, [País] = _curCountry ), [rango])
Saludos y gracias por su ayuda
Syndicate_Admin
Administrator
Administrator

Me alegro de que pudieras resolverlo.

RANKX es una función simple pero no fácil de usar.

Estoy agregando para otros referencia futura y para usted también:

Creo que está buscando calcular el rango dinámicamente en función de múltiples columnas (tabla).

Puede consultar este artículo para obtener más información:

https://www.sqlbi.com/articles/rankx-on-multiple-columns-with-dax-and-power-bi/

Sección: Ranking dinámico de ventas redondeadas y nombre del cliente

https://www.sqlbi.com/articles/introducing-rankx-in-dax/

https://blog.enterprisedna.co/rankx-dax-function-in-power-bi-a-comprehensive-overview/

Todavía estoy desconcertado, si este enfoque funciona o no en su escenario:

  • Estoy usando AdventureWorks Sales como ejemplo.
  • La tabla de ventas tiene transacciones, las dimensiones son Producto, Territorio de ventas y vinculadas a la tabla de ventas

sevenhills_0-1684352470024.png

Creé la medida de beneficio como se muestra a continuación

sevenhills_1-1684352505830.png

Creé la medida de rango como se muestra a continuación

Rank Profit By Product Category By Sales Territory Country = 
 
 IF ( HASONEVALUE('Product'[Category]) &&  HASONEVALUE('Sales Territory'[Country]) && not ISBLANK(Sales[Profit]), 
    RANKX ( ALLSELECTED(Sales), CALCULATE( [Profit], ALLEXCEPT(Sales, 'Product'[Category], 'Sales Territory'[Country])) , , DESC, DENSE) 
 )

Veo la salida como se muestra a continuación

sevenhills_3-1684352617991.png

🙂

Syndicate_Admin
Administrator
Administrator

Hola, chicos

Creo que encontré la solución:

DÓNDE _tmpTable = RESUMIR(TODOSELECCIONADO('Hecho'), DimEntities[País], "Valor1", [ACT VS BUD])
DÓNDE _curCountry = VALOR SELECCIONADO(DimEntities[País])
DÓNDE _rankedTable = ADDCOLUMNS(FILTRO(_tmpTable, [País] <> ESPACIO EN BLANCO()), "rango",
RANKX(_tmpTable, [Valor1], ,DESC,Saltarse))
DEVOLUCIÓN
MAXX(FILTRO(_rankedTable, [País] = _curCountry ), [rango])

Mi inspiración vino de este post:
Syndicate_Admin
Administrator
Administrator

Ahora estoy probando suerte con la función no tan comunicada "RANK", sin "X".

Si alguien tiene ideas allí...

Bien

Syndicate_Admin
Administrator
Administrator

agradable, pero aún no funciona 😞

Al final, necesito tenerlo en medida de trabajo.

Ir ahora a la cama. Quizás mañana lo resuelva. Bien

Syndicate_Admin
Administrator
Administrator

Para depurar, puede ver cuáles son los datos que vienen aquí, como crear una tabla dax

ADDCOLUMNS(
RESUMIR(
'Hecho',
'Hecho'[Fecha],
'Hecho'[Entidad],
DimEntities[País]),
"ACTO S", CALCULAR( SUMA('Hecho'[Valor]), 'Hecho'[Escenario]= "Actual") ,
"BUD S", CALCULAR(SUMA('Hecho'[Valor]), 'Hecho'[Escenario]= "Presupuesto"),
"PY S", CALCULAR( SUMA('Hecho'[Valor]), 'Hecho'[Escenario]= "Actual", SAMEPERIODEL año pasado(DimDate[Fecha])) ,
"POR S", CALCULAR( SUMA('Hecho'[Valor]), DimDate[Año]=2019)
)
No creo que necesitemos CALCULATETABLE si estamos haciendo solo un contenedor para agregar columnas.
Syndicate_Admin
Administrator
Administrator

Hola

Gracias ¡Amitchandak!
Desafortunadamente no resuelve el problema.

De alguna manera, el ranking ahora es del 1 al 4.

¿Alguna idea de cómo podría depurar esto?

Estoy intentando más basándome en su idea.

Bien

G.

Syndicate_Admin
Administrator
Administrator

@Ghuiles, Prueba como

rankx(
RESUMIR(
allselected('Hecho'),
«Hecho» [fecha],
'Hecho' [Entidad],
DimEntities[País]), CALCULATE( SUM('Fact'[Value]), 'Fact'[Scenario]= "Actual")- CALCULATE(SUM('Fact'[Value]), 'Fact'[Scenario]= "Budget"),,desc,dense)

Clasificación de Power BI en tablas de dimensiones: https://youtu.be/X59qp5gfQoA

Helpful resources

Announcements
PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.