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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Anonymous
Not applicable

Uso de RANKX() para cálculos adicionales

Hola a todos

Tengo esta tabla que viene ordenada al azar:

FechaProductoLoteCambio
27-04-2020Producto 12N7JMañana
08-05-2020Producto 15R3EMañana
19-05-2020Producto 2848YNoche
19-05-2020Producto 2848YNoche
19-05-2020Producto 28S9GNoche
22-05-2020Producto 18V2UNoche
22-05-2020Producto 48V3TNoche
26-05-2020Producto 1Ax3sMañana
08-06-2020Producto 1CL7RNoche
12-06-2020Producto 1DR2FNoche
19-06-2020Producto 1FF4PNoche
08-07-2020Producto 1LD4NMañana
07-07-2020Producto 3LL7AMañana
13-07-2020Producto 1NH8UMañana
16-04-2020Producto 1WS9VNoche
16-04-2020Producto 1WS9WNoche

Lo que necesito es clasificar los baños por fecha y turno, pasando de más viejo a más nuevo que primero es la fecha más reciente y el turno es la primera noche, luego mañana y más viejo es turno de noche.

He tratado de hacerlo con

Rank á RANKX(FILTER('Table','Table'[Product]-EARLIER('Table'[Product])),'Table'[Batch],,DESC,Dense) sólo para clasificar las fechas, pero parece que como la tabla no está ordenada por fecha, el rango no funciona correctamente.
Esto es lo que me gustaría obtener es algo como esto, con el fin de elegir los últimos tres para los cálculos adicionales:
FechaProductoLoteCambiorango
27-04-2020Producto 12N7JMañana9
08-05-2020Producto 15R3EMañana8
19-05-2020Producto 2848YNoche1
19-05-2020Producto 2848YNoche1
19-05-2020Producto 28S9GNoche2
22-05-2020Producto 18V2UNoche7
22-05-2020Producto 48V3TNoche1
26-05-2020Producto 1Ax3sMañana6
08-06-2020Producto 1CL7RNoche5
12-06-2020Producto 1DR2FNoche4
19-06-2020Producto 1FF4PNoche3
08-07-2020Producto 1LD4NMañana2
07-07-2020Producto 3LL7AMañana1
13-07-2020Producto 1NH8UMañana1
16-04-2020Producto 1WS9VNoche10
16-04-2020Producto 1WS9WNoche11

Lo cual, si lo ordeno por fecha para verlo mejor:

FechaProductoLoteCambiorango
13-07-2020Producto 1NH8UMañana1
08-07-2020Producto 1LD4NMañana2
07-07-2020Producto 3LL7AMañana1
19-06-2020Producto 1FF4PNoche3
12-06-2020Producto 1DR2FNoche4
08-06-2020Producto 1CL7RNoche5
26-05-2020Producto 1Ax3sMañana6
22-05-2020Producto 18V2UNoche7
22-05-2020Producto 48V3TNoche1
19-05-2020Producto 2848YNoche1
19-05-2020Producto 2848YNoche1
19-05-2020Producto 28S9GNoche2
08-05-2020Producto 15R3EMañana8
27-04-2020Producto 12N7JMañana9
16-04-2020Producto 1WS9VNoche10
16-04-2020Producto 1WS9WNoche11

¿Alguna ayuda, por favor?

Gracias de antemano!

1 ACCEPTED SOLUTION

Hola @jgm1984 ,

Crear una COLUMNA

_add = 

var a = CALCULATE(MAx('Table'[DATE ]), FILTER('Table', 'Table'[DATE ] = EARLIER('Table'[DATE ]) && 'Table'[ Product] = EARLIER('Table'[ Product]) && 'Table'[Batch] <> EARLIER('Table'[Batch])))

var b = IF (a <> BLANK() && 'Table'[Shift] = "Morning" , 3, 0)

RETURN



SWITCH(
    TRUE(),
   a <> BLANK() && 'Table'[Shift] = "Morning",.3,
   a <> BLANK() && 'Table'[Shift] = "Evening",.2,
   a <> BLANK() && 'Table'[Shift] = "Night",.1
)

Crear la columna de rango

Ranki = 
var a = MAXX(FILTER('Table','Table'[Batch] = EARLIER('Table'[Batch]) && 'Table'[ Product] = EARLIER('Table'[ Product])),'Table'[DATE ])

var b = RANKX(FILTER('Table','Table'[ Product] = EARLIER('Table'[ Product])),'Table'[DATE ] + 'Table'[_add] ,,DESC,Dense)
RETURN
b

1.jpg

saludos
Harsh Nathani
¿He respondido a tu pregunta? ¡Marca mi puesto como una solución! Apreciar con un Kudos!! (Haga clic en el botón Pulgares arriba)

View solution in original post

8 REPLIES 8
parry2k
Super User
Super User

@jgm1984 hay una entrada de blog de RANKX que puede ayudarle a ordenar la clasificación de varias columnas. Compruémoslo aquí.

https://radacad.com/how-to-use-rankx-in-dax-part-1-of-3-calculated-columns
https://radacad.com/how-to-use-rankx-in-dax-part-2-of-3-calculated-measures

Si por alguna razón, no ayuda, explique lo que hizo y lo que no está funcionando y podemos investigarlo.

Me gustaría elogios si mi solución ayudara. 👉 Si puedes pasar tiempo publicando la pregunta, también puedes hacer esfuerzos para dar a Kudos quien haya ayudado a resolver tu problema. ¡Es una muestra de agradecimiento!

Visítenos en https://perytus.com, su ventanilla única para proyectos/formación/consulta relacionadas con Power BI.



Subscribe to the @PowerBIHowTo YT channel for an upcoming video on List and Record functions in Power Query!!

Learn Power BI and Fabric - subscribe to our YT channel - Click here: @PowerBIHowTo

If my solution proved useful, I'd be delighted to receive Kudos. When you put effort into asking a question, it's equally thoughtful to acknowledge and give Kudos to the individual who helped you solve the problem. It's a small gesture that shows appreciation and encouragement! ❤


Did I answer your question? Mark my post as a solution. Proud to be a Super User! Appreciate your Kudos 🙂
Feel free to email me with any of your BI needs.

Anonymous
Not applicable

¡Hola otra vez!

Gracias por su ayuda, pero he leído la guía, pero todavía tengo el mismo problema y sé que estoy haciendo algo grong pero no cómo hacer ir correctamente. Al final, nunca soy capaz de clasificarlo de más nuevo a más viejo. Y sé que necesito poner una condición donde filtre todas las fechas antes de la fecha en la fila real, pero también necesito filtrar el producto para esa fila. Y no puedo conseguir un lugar para poner ambas condiciones correctamente.

He probado muchas combinaciones, pero lo más cercano que estoy es con:

RANKX(FILTER(ALL('Table'[Batch],'Table'[Date]),'Table'[Date]<TODAY()),'Table'[Batch],ASC,Dense)

RANKX(FILTER(ALL('Table'[Batch],'Table'[Date]),DATESYTD('Table'[Date])),DISTINCTCOUNT('Table'[Batch]),,ASC,Dense)

Pero de todos modos, parece que todavía lo clasifica como están en la tabla al principio.

¿Alguna ayuda, por favor?

¡Gracias!

Hola @jgm1984 ,

¿Puede explicar la lógica un poco mejor.

Tal vez me estoy perdiendo algo.

saludos
Harsh Nathani
¿He respondido a tu pregunta? ¡Marca mi puesto como una solución! Apreciar con un Kudos!! (Haga clic en el botón Pulgares arriba)

Anonymous
Not applicable

¡Seguro! 🙂

Tengo cuatro columnas a tener en cuenta para el rango:

FECHA DE CAMBIO DE LOTE DEL PRODUCTO

y tengo la eficiencia como la quinta columna con la que voy a hacer los cálculos después. El objetivo es obtener la velocidad media de los últimos tres lotes para cada producto.

Los datos vienen en una clasificación aleatoria, no ordenado por fecha, quiero decir. Así que entiendo:

FECHA DE CAMBIO DE LOTE DEL PRODUCTO

09/02/2020 Producto 1 Una mañana

09/02/2020 Producto 1 A Noche

10/02/2020 Producto 1 Una Noche

10/02/2020 Producto 1 B Mañana

06/02/2020 Producto 1 C Mañana

05/02/2020 Producto 1 D Noche

05/02/2020 Producto 2 E Noche

07/02/2020 Producto 2 F Mañana

Y así sucesivamente. Así que lo que me gustaría conseguir es conseguir que otros lo clasifiquen de la siguiente manera:

FECHA DE CLASIFICACIÓN DE TURNO DE LOTE DEL PRODUCTO

09/02/2020 Producto 1 A Mañana 2

09/02/2020 Producto 1 A Noche 2

10/02/2020 Producto 1 Una Noche 2

10/02/2020 Producto 1 B Mañana 1

06/02/2020 Producto 1 C Mañana 3

05/02/2020 Producto 1 D Noche 4

05/02/2020 Producto 1 E Mañana 5

05/02/2020 Producto 2 F Noche 2

07/02/2020 Producto 2 G Mañana 1

Sería esta lógica:

Para cada producto, clasifique cada lote por fecha y turno, de más reciente a más antiguo, teniendo en cuenta que el plazo real es

Fecha X noche --> Fecha X mañana --> Fecha X noche --> Fecha X+1 noche --> Fecha X+1 mañana --> ... y así sucesivamente

¡Espero que tenga sentido!

Muchas gracias por su ayuda

Hola @jgm1984 ,

10/02/2020 Producto 1 Una Noche 2

es este 10/02/2020 o 09/02/2020

saludos
Harsh Nathani
¿He respondido a tu pregunta? ¡Marca mi puesto como una solución! Apreciar con un Kudos!! (Haga clic en el botón Pulgares arriba)

Hola @jgm1984 ,

Crear una COLUMNA

_add = 

var a = CALCULATE(MAx('Table'[DATE ]), FILTER('Table', 'Table'[DATE ] = EARLIER('Table'[DATE ]) && 'Table'[ Product] = EARLIER('Table'[ Product]) && 'Table'[Batch] <> EARLIER('Table'[Batch])))

var b = IF (a <> BLANK() && 'Table'[Shift] = "Morning" , 3, 0)

RETURN



SWITCH(
    TRUE(),
   a <> BLANK() && 'Table'[Shift] = "Morning",.3,
   a <> BLANK() && 'Table'[Shift] = "Evening",.2,
   a <> BLANK() && 'Table'[Shift] = "Night",.1
)

Crear la columna de rango

Ranki = 
var a = MAXX(FILTER('Table','Table'[Batch] = EARLIER('Table'[Batch]) && 'Table'[ Product] = EARLIER('Table'[ Product])),'Table'[DATE ])

var b = RANKX(FILTER('Table','Table'[ Product] = EARLIER('Table'[ Product])),'Table'[DATE ] + 'Table'[_add] ,,DESC,Dense)
RETURN
b

1.jpg

saludos
Harsh Nathani
¿He respondido a tu pregunta? ¡Marca mi puesto como una solución! Apreciar con un Kudos!! (Haga clic en el botón Pulgares arriba)

Anonymous
Not applicable

¡¡¡¡¡Funcionó!!!!!

¡Muchas gracias por su ayuda!

hola @jgm1984 ,

Hapy para ayudar a 🙂

saludos
Harsh Nathani
¿He respondido a tu pregunta? ¡Marca mi puesto como una solución! Apreciar con un Kudos!! (Haga clic en el botón Pulgares arriba)

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

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

April Fabric Community Update

Fabric Community Update - April 2024

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