Devuelve la categoría más grande basada en una suma

Un usuario Pregunto ✅

Phil123456789

Hola,

Estoy buscando una medida DAX (con suerte) simple para resolver el siguiente problema.

Tengo una gama que consta de un número de empleados, un producto elegido y sus ahorros en cada producto. En una tabla diferente, necesito crear una medida que devuelva el nombre del producto que contiene la mayor suma combinada de ahorros. Por ejemplo, para la Persona 1, esto sería «Producto B», porque los 750.000 del Producto B exceden los 500.000 del Producto A (si hubiera sido al contrario, la medida debería devolver el «Producto A»).

Muestra.png

Estoy trabajando en PowerPivot en Excel 2013 y anteriormente confié en «FIRSTNONBLANK» ya que los rangos no contenían valores duplicados. Sin embargo, esa solución ya no es suficiente. Cualquier ayuda es muy apreciada.

¡Gracias!

Ashish_Mathur

Hola,

Estas medidas funcionan

Cantidad total = SUMA (Datos[Amount])

Producto superior = PRIMER NO BLANCO ( TOPN ( 1, VALORES ( Datos[Product] ), [Total amount] ), 1 )

Espero que esto ayude.

Sin título.png

Ashish_Mathur

En respuesta a Phil123456789

Hola,

Puede descargar mi archivo PBI desde aquí.

Espero que esto ayude.

Sin título.png

Ashish_Mathur

Hola,

Estas medidas funcionan

Cantidad total = SUMA (Datos[Amount])

Producto superior = PRIMER NO BLANCO ( TOPN ( 1, VALORES ( Datos[Product] ), [Total amount] ), 1 )

Espero que esto ayude.

Sin título.png

Phil123456789

En respuesta a Ashish_Mathur

Disculpas por mi respuesta tardía, no tuve la oportunidad de probar e implementar las sugerencias.

@Ashish_Mathur, su solución funcionó perfectamente, gracias. Y del mismo modo, gracias a todos los demás que vinieron con sugerencias, ¡muy apreciadas!

Ashish_Mathur

En respuesta a Phil123456789

De nada.

Phil123456789

En respuesta a Ashish_Mathur

@Ashish_Mathur, seguimiento rápido de esto.

¿Hay una manera fácil de agregar una condición a la fórmula de que la clasificación esté condicionada a que el producto no esté en blanco?

Recientemente hubo un caso en el que faltaba un producto, pero como contenía el valor más grande, se devolvió un espacio en blanco.

¡Gracias!

Ashish_Mathur

En respuesta a Phil123456789

Hola,

Comparte algunos datos y muestra el resultado esperado.

Phil123456789

En respuesta a Ashish_Mathur

@Ashish_Mathur, consulte a continuación

Phil123456789_0-1604304560766.png

Ashish_Mathur

En respuesta a Phil123456789

Hola,

Puede descargar mi archivo PBI desde aquí.

Espero que esto ayude.

Sin título.png

Phil123456789

En respuesta a Ashish_Mathur

Gracias @Ashish_Mathur, exactamente lo que estaba buscando

Ashish_Mathur

En respuesta a Phil123456789

De nada.

FrankAT

Hola @Phil123456789

echa un vistazo a la siguiente solución:

24-09-_2020_19-48-41.png

Max Amount = 
Var _Rank = RANKX(ALL('Table'[Product]),[Sum of Amount],,DESC)
RETURN
    IF(_Rank = 1, [Sum of Amount], BLANK())

Un cordial saludo desde el pueblo donde vive la leyenda del ‘Pied Piper of Hamelin’
FrankAT (Orgulloso de ser un Datanaut)

Phil123456789

En respuesta a FrankAT

Gracias @FrankAT, funcionó de maravilla en PowerBI.

Sin embargo, cuando intento convertir la fórmula a Excel PowerPivot, parece que no puedo hacer que funcione.

Creo que el problema es que Excel no le permitirá devolver una cadena de texto en una tabla dinámica (a menos que se use, por ejemplo, con FIRSTNONBLANK).

¿Cómo ajusto la fórmula para obtener la fórmula para devolver el Producto correcto como una cadena de texto (no necesito mostrar las cantidades reales en la tabla, solo el producto)?

En respuesta a Phil123456789

Hola @Phil123456789,

Excel y power bi utilizan una lógica y una estructura diferentes para almacenar tablas de datos.

Quizás pueda intentar convertir su tabla en la tabla de consulta y usar la ‘consulta M’ para crear una consulta de referencia para resumir los registros de la tabla sin procesar.

let
    Source = RawTable,//change to your query table name
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Name", type text}, {"Product", type text}, {"Amount", Int64.Type}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Name", "Product"}, {{"Total", each List.Sum([Amount]), type nullable number}}),
    #"Grouped Rows1" = Table.Group(#"Grouped Rows", {"Name"}, {{"Count", each Table.LastN(_, 1), type table}}),
    #"Expanded Count" = Table.ExpandTableColumn(#"Grouped Rows1", "Count", {"Product", "Total"}, {"Product", "Total"})
in
    #"Expanded Count"

1.png
Saludos,

Xiaoxin-sheng

amichandak

@ Phil123456789, basado en lo que obtuve

Crear una clasificación Medir y filtrar Clasificación =1

medida de rango =

Rangox(todos(Tabla[product]), calcular (Suma (Tabla[Amount])))

Phil123456789

En respuesta a amichandak

Gracias @amitchandak, la fórmula parece funcionar.

Sin embargo, debido a que uso los nombres («Persona 1», «Persona 2», etc.) como filtro de fila en la tabla dinámica, actualmente solo se devuelve un producto como valor. Por lo tanto, la función de clasificación simplemente devuelve «1» para todos los empleados y, por lo tanto, no es posible filtrar.

¿Alguna sugerencia alternativa?

amichandak

En respuesta a Phil123456789

@ Phil123456789, este trabajo de clasificación de cómo medir. El que sugerí creará un rango único si se usa con el producto y si se usa con el empleado, entrará en el empleado.

Prueba como

CLASIFICACIÓNX (
FILTRAR(
TODOS( /////////O todos los seleccionados
‘Tabla'[employee],
‘Tabla'[product ]
),
‘Tabla'[employee] = MAX(‘Tabla'[employee])
),
CALCULAR(SUMA(‘Tabla'[Amount]))
)

Para el rango, consulte estos enlaces
https://radacad.com/how-to-use-rankx-in-dax-part-2-of-3-calculated-measures
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-3-of-3-the-finale
https://community.powerbi.com/t5/Community-Blog/Dynamic-TopN-made-easy-with-What-If-Parameter/ba-p/3…

Phil123456789

En respuesta a amichandak

Gracias @amitchandak, echaré un vistazo a los enlaces.

No estoy seguro de cómo funciona la medida propuesta, ya que requiere tomar MAX de empleado, que es una cadena.

Deja un comentario

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