RANKX siempre devuelve 1

Un usuario Pregunto ✅

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 tabla de la siguiente manera:

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…

TOPN - 2 incorporados con RANKX.gif

¡Espero que esto ayude! Smiley feliz

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! Smiley feliz

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í?

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

TOPN - Incorporado.gif

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…

TOPN - 2 incorporados con RANKX.gif

¡Espero que esto ayude! Smiley feliz

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *