amilecki
Estoy tratando de aprender la expresión RANKX usando un par de ejemplos en la web, pero cada fila devuelve 1. He encontrado un par de soluciones sugeridas, ninguna de las cuales me ha funcionado.
He simplificado mi conjunto de datos a solo 3 filas en una
Valor de nombre
A 3
B 1
C 2
Creo una nueva medida como:
Total = SUM(MyData[Value])
Luego crea una nueva columna como:
MyRank = RANKX(ALL(MyData[Name]), [Total])
He probado TODOS (MyData) y TODOS (MyData[Value]) como primer argumento sin suerte. También he intentado calcular la suma dentro del segundo argumento con y sin CALCULAR, nuevamente sin suerte.
MyRank = RANKX(ALL(MyData[Value]), CALCULATE(SUM(MyData[Value])))
No sé cómo puedo simplificar este ejemplo y he agotado toda mi investigación al respecto. Por favor ayuda.
Sean
En respuesta a Sean
@amilecki
Si desea utilizar una medida de rango en el filtro visual, debe ajustar cómo se calcula la suma de esta manera …
Rank Product = RANKX ( ALL(MyData[Product] ), CALCULATE ( SUM ( MyData[Quantity] ), ALLEXCEPT(MyData, MyData[Product] ) ) )
Vea abajo…
¡Espero que esto ayude!
Sean
@amilecki
De acuerdo, quieres un rango Columna
Cambia tu total La medida como esto…
Name Total (MEASURE) = CALCULATE( SUM(MyData[Value]), ALLEXCEPT(MyData, MyData[Name]) )
Y luego aquí está tu rango Columna
MyRank (COLUMN) = RANKX(ALL(MyData[Name]), [Name Total])
Por cierto, esto también debería funcionar como un La medida
MyRank (MEASURE) = IF ( HASONEVALUE ( MyData[Name] ), RANKX ( ALL ( MyData[Name] ), CALCULATE ( SUM ( MyData[Value] ), ALLEXCEPT ( MyData, MyData[Name] ) ) ) )
¡Espero que esto ayude!
amilecki
En respuesta a Sean
@Sean
Esto funciona en mi ejemplo simplificado, así que gracias. Pero ahora estoy tratando de extrapolarlo a mi aplicación del mundo real, que es observar los defectos de las piezas a lo largo del tiempo y mostrar los 10 principales por ocurrencia (recuento). Intentaré mantener los datos simples aún, pero imagínelos con más de 1000 entradas durante 6 meses para más de 100 partes.
ClaimID Mes Parte País
1 de enero A EE. UU.
2 de enero B China
3 feb B Italia
4 mar A España
5 mar A EE. UU.
…
Creé un total La medida:
Total = CALCULATE(COUNTA(MyData[Product]), ALL(MyData))
Y un rango Columna:
MyRank = RANKX(ALL(MyData[ClaimID]), [Total])
Pero una vez más, obtengo todos los 1 para la columna MyRank. ¿Alguna sugerencia aquí?
v-huizhn-msft
En respuesta a amilecki
Hola @amilecki,
La medida que calculó Total devuelve el mismo resultado, por lo que devolverá 1.
Debería usar la función ALLEXCPET como el @Sean publicado. Puede crear una columna calculada en lugar de una medida.
Total = CALCULATE(COUNTA(MyData[Product]), ALLEXCEPT(MyData,MyData[Product]))
Luego clasifíquelos.
Si esto aún no resuelve su problema, será mejor que enumere el resultado esperado para su ejemplo dado.
Atentamente,
Angelia
amilecki
En respuesta a v-huizhn-msft
@ v-huizhn-msftand @Sean
Básicamente, necesito un filtro dinámico de los 5 principales por cantidad de defectos del producto para mi gráfico de columnas apiladas.
Creé un conjunto de datos simplificado llamado MyData que incluye filas de ID de reclamo, Nombre, Línea de producto, Producto, Categoría, Región, Fecha, Cantidad y Costo. Hice segmentaciones de ProductLine y Category y un gráfico de columnas apiladas con Producto en el eje, Fecha en la leyenda y Costo como valor, luego ordeno por Costo. La cantidad permite múltiples Productos defectuosos en un reclamo (conjunto de datos de 100 reclamos con 124 cantidades totales). Todo esto funciona muy bien.
Ahora agrego lo siguiente La medida por cantidad total:
TotalQuantity = CALCULATE(SUM(MyData[Quantity]), ALLEXCEPT(MyData, MyData[ProductLine], MyData[Category]))
Agregué una tarjeta para TotalQuantity que se actualiza correctamente cuando alterno las opciones de la cortadora.
Para el rango, primero probé lo siguiente Columna en un intento de obtener una clasificación 1-N de mis productos para que luego pueda simplificar mi gráfico de columnas apiladas a la X superior:
QuantityRankColumn = RANKX(ALL(MyData[Product]), [TotalQuantity], , DESC)
Luego agregué un gráfico de columnas para CantidadRankColumna por Producto y esto da como resultado el recuento de reclamaciones (filas) para cada Producto, sumando 100 (número total de filas).
Pensé que era extraño hacer TODOS (MyData[Product]) al no incluir Cantidad, así que lo cambié a TODOS (MyData[Product], Mis datos[Quantity]) pero eso no cambió nada.
A continuación, probé el siguiente rango La medida para ver si tuve mejor suerte aquí que con mi rango anterior Columna:
QuantityRankMeasure = IF(HASONEVALUE(MyData[Product]), RANKX(ALL(MyData[Product]), CALCULATE(SUM(MyData[Quantity]), ALLEXCEPT(MyData, MyData[ProductLine], MyData[Category]))))
Esto da como resultado una clasificación de 1 para todos los productos. También intenté eliminar la declaración IF y luego incluir la columna Cantidad en la función TODOS, pero nuevamente sin cambios de todos los 1.
He usado otras herramientas de visualización y este método para Power BI parece un trabajo demasiado complicado para simplemente ver solo las barras superiores en un gráfico. Estoy abierto a sugerencias.
Sean
En respuesta a amilecki
¿Puede cargar este archivo de muestra que ha creado en OneDrive, DropBox o un servicio similar?
amilecki
En respuesta a Sean
Se aumentó el conjunto de datos a 500 reclamos y más productos y se cargó en DropBox aquí:
https://www.dropbox.com/s/vpajtr7dvpum2e5/PowerBI_SampleData_RANKX.xlsx?dl=0
Al ejecutar una tabla dinámica de Excel rápida, espero ver lo siguiente:
Rango de cantidad de producto
P06 40 1
P25 37 2
P22 35 3
P01 30 4
P04 28 5
…
De esta manera, puedo simplificar un gráfico de columnas apiladas desde 25 productos hasta solo los 5 primeros usando Rank.
Gracias a ambos por su tiempo hasta ahora.
Sean
En respuesta a amilecki
¿Cómo se consigue que la Cantidad para P06 sea 40? y no 18?
amilecki
En respuesta a Sean
Tienes razón, lo siento. Originalmente tenía una hoja de cálculo del generador que cambiaba dinámicamente después de copiar y pegar los valores de datos en la hoja de cálculo de DropBox. El top 5 esperado correcto es:
Rango de cantidad de producción
P17 37 1
P07 36 2
P12 34 3
P03 34 3
P15 34 3
Sean
En respuesta a amilecki
Para obtener el resultado que acaba de publicar, todo lo que necesita es esta única medida
Rank Product = RANKX ( ALL(MyData[Product]), CALCULATE(sum(MyData[Quantity])),, DESC )
amilecki
En respuesta a Sean
Gracias @Sean
Eso funciona para conseguirme un rango completo. Pero ahora, cuando trato de usar ese rango como un filtro de los 5 principales para el gráfico de columnas apiladas de datos completos, mis datos parecen cambiar dinámicamente y todavía veo 17 productos y la cantidad y el pedido cambian.
Vea mis capturas de pantalla de salida aquí:
https://www.dropbox.com/s/3why9853n6ttbe8/QuantityRank.docx?dl=0
Sean
En respuesta a amilecki
@amilecki
La forma más fácil de hacer esto: use el filtro TOPN incorporado como se muestra a continuación
amilecki
En respuesta a Sean
@Seanyou eres increíble! Ambas soluciones funcionaron, pero marcaré RANKX como correcto ya que respondió a mi pregunta original. Usaré TOPN pero volveré a entender RANKX. Tengo curiosidad por saber por qué todas mis búsquedas en Google me llevaron a RANKX. ¡Gracias!
Anónimo
En respuesta a amilecki
Hola a todos,
Tengo una lógica similar para implementar, de modo que mi visual está trayendo campos de diferentes tablas. He planteado esto en otra publicación:
Enlace: https: //community.powerbi.com/t5/Desktop/Showing-only-required-rows-in-Matrix-based-on-Measure-Value …
Necesito poner un filtro de medida RANKX que debería ser = 1, pero los campos participantes provienen de diferentes tablas (conectadas). RANKX debe basarse en una Medida que creé en el informe.
Cómo podemos hacer esto. Encuentre el detalle en el enlace de arriba.
Gracias.
Sean
En respuesta a Sean
@amilecki
Si desea utilizar una medida de rango en el filtro visual, debe ajustar cómo se calcula la suma de esta manera …
Rank Product = RANKX ( ALL(MyData[Product] ), CALCULATE ( SUM ( MyData[Quantity] ), ALLEXCEPT(MyData, MyData[Product] ) ) )
Vea abajo…
¡Espero que esto ayude!