Análisis ABC; suma acumulada y porcentaje

Un usuario Pregunto ✅

voleshko

Tengo una tabla de datos como:
N.° de pedido N.° de línea Artículo Año Cant.

A LíneaA1 carro 2018 2
A LíneaA2 autobús 2018 4
B LíneaB1 bicicleta 2018 6
C LíneaC1 botas 2018 11
C LíneaC2 botas 2018 11
D LíneaD1 autobús 2018 4
mi LíneaE1 carro 2019 2
mi LíneaE2 carro 2019 2
F LíneaF1 autobús 2019 3
F LíneaF2 carro 2019 1

Necesito crear una columna calculada con clases ABC. Tiene que ser una columna calculada (NO una medida) porque se usará para la segmentación.
Para calcular la necesidad de calcular la SUMA acumulada y tengo un problema aquí.
Como veo eso.
En primer lugar, debe calcular la cantidad agrupada por AÑO y ARTÍCULO.
Parece:
Artículo Año SUMA (Cantidad) por AÑO y ARTÍCULO

carro 2019 5
autobús 2019 3
botas 2018 22
autobús 2018 8
bicicleta 2018 6
carro 2018 2

Explicaciones
Para el autobús 2018, Qty=8 porque tiene 2 líneas con 4 piezas.
Para 2019 Car, Qty=5 porque tiene 3 líneas: 2+2+1.
Después de eso, agregué TOTAL SUM (‘tabla de datos'[Qty]) grupo por año e intentó calcular la SUMA acumulativa ordenada por año y SUMA (cantidad) con DAX:
PRUEBA cumul = CALCULAR (SUMA (‘tabla de datos'[Qty]),
FILTRO (TODO(‘tabla de datos’),
‘tabla de datos'[year] = ANTERIOR(‘tabla de datos'[year]) ), ‘tabla de datos'[Qty] >= ANTERIOR(‘tabla de datosa'[Qty]) )
pero no funciona correctamente.
El siguiente paso es dividir la SUMA acumulativa en la SUMA TOTAL (‘tabla de datos'[Qty])
Creo que puede verse como:

Articulo Año SUMA (Cantidad) por AÑO y ARTÍCULO Suma acumulativa Suma total SUMA acumulada/Suma total clases de abecedario
carro 2019 5 5 8 0.625 A
autobús 2019 3 8 8 1 C
botas 2018 22 22 38 0.578947368 A
autobús 2018 8 30 38 0.789473684 B
bicicleta 2018 6 36 38 0.947368421 C
carro 2018 2 38 38 1 C

Si algún valor <=0.7 digo que es clase A, <=0.9, clase B y otro clase C.
Y mi resultado esperado es una tabla de datos con clases ABC que usaré para la segmentación.

Pedido # Línea # Articulo Año Cantidad clases de abecedario
A LíneaA1 carro 2018 2 C
A LíneaA2 autobús 2018 4 B
B LíneaB1 bicicleta 2018 6 C
C LíneaC1 botas 2018 11 A
C LíneaC2 botas 2018 11 A
D LíneaD1 autobús 2018 4 B
mi LíneaE1 carro 2019 2 A
mi LíneaE2 carro 2019 2 A
F LíneaF1 autobús 2019 3 C
F LíneaF2 carro 2019 1 A

Pregunta adicional: ¿Puedo usar una cortadora durante unos AÑOS y volver a calcular automáticamente las clases ABC? ¿O necesita agregar una columna adicional?
O como hacerlo?

¡Muchas gracias!

cmmahan

En respuesta a voleshko

Entonces, ¿pudiste resolver tu problema o todavía tienes preguntas?

Entonces, si la suma acumulada está en orden por [SUM(Qty) by YEAR and ITEM], luego debe crear la tabla resumida como la anterior y luego agregar una columna calculada. Esto aún dejará su tabla original para que pueda hacer otro análisis de datos como [month].

Cree la tabla de resumen:

SummaryTable = SUMMARIZE('data table', [year], [#item], 
        "SUM of Qty" , SUM([Qty]), 
        "Total Sum", SUMX(ALLEXCEPT('data table', [year]), [Qty]) 
    )

Cree la columna de total acumulativo en esta tabla calculada:

Cumulative Sum = SUMX(FILTER(ALLEXCEPT('SummaryTable', [year]), EARLIER([SUM of Qty])>=[SUM of Qty]),[SUM of Qty]) 

cmmahan

Cortejar. Mucha información aquí. Veamos si puedo ayudar con una parte a la vez.

En primer lugar, parece que en lugar de una columna calculada, desea una tabla resumida calculada. Esto le permitirá tener los datos agrupados por año y artículo, mostrando el recuento total, así como el total acumulado por año.

SummaryTable = SUMMARIZE('data table', [year], [#item], 
"SUM of Qty" , SUM([Qty]),
"Cumulative Sum", 0, //Further clarifications needed to calculate this field. See below
"Total Sum", SUMX(ALLEXCEPT('data table', [year]), [Qty])
)

Entonces, el truco aquí es obtener el total acumulativo. ¿Cómo desea ordenar los datos para el total acumulado? ¿Cómo sabe PBI que el artículo «automóvil» viene antes que el artículo «autobús»? En su ejemplo, en 2018 el pedido es Car < Bus. En 2019, el pedido es botas < autobús < bicicleta < coche. Si se recurre a los datos, ¿debería el total acumulado calcularse de manera diferente? Puede configurar un índice para ordenar los datos o usar RANKX para determinar un orden para las filas y usar una expresión similar a la siguiente:

SUMX(FILTER(ALLEXCEPT('data table', [year]), EARLIER(RANKX(<EXPRESSION>))>=RANKX(<EXPRESSION>)),[Qty]) 

Una vez que tenga un total acumulativo de su agrado, puede crear más columnas calculadas en esta nueva tabla para el resto de sus valores:

Cumulative/Total="SummaryTable"[Cumulative Sum] / 'SummaryTable'[Total Sum]
ABC Class = SWITCH( TRUE(), 
    'SummaryTable'[Cumulative/Total] <= 0.7, "A",
    'SummaryTable'[Cumulative/Total] <= 0.9, "B",
    "C" )

En lo que respecta al corte en función del año, debería poder hacerlo normalmente y los datos se mostrarán como se esperaba. La segmentación basada en el año simplemente ignorará o no mostrará los datos que no coincidan con la selección de la segmentación.

Y creo que eso es al menos un intento de responder a cada una de sus preguntas.

voleshko

En respuesta a cmmahan

@Cmcmahan

Gracias por su respuesta.
En realidad, uso la tabla SUMMARIZE pero, además, necesito usar más campos como [Month] para otro análisis. Este campo da filas adicionales y no sé cómo crear una Suma acumulativa (agrupar por AÑO y ARTÍCULO).

Entonces, el truco aquí es obtener el total acumulativo. ¿Cómo desea ordenar los datos para el total acumulado? ¿Cómo sabe PBI que el artículo «automóvil» viene antes que el artículo «autobús»?
Respuesta: PBI no sabe. La clasificación debe ser por campo SUM(Qty):

Articulo Año SUMA (Cantidad) por AÑO y ARTÍCULO Suma acumulativa
carro 2019 5 5
autobús 2019 3 8
botas 2018 22 22
autobús 2018 8 30
bicicleta 2018 6 36
carro 2018 2 38

El año 2019, «SUM(Qty) by YEAR and ITEM» para un automóvil es más grande que para un autobús. Así que necesito sumar coche+autobús: 5+3.
El año 2018, la cantidad de botas es mayor que para un autobús, la cantidad de autobuses es mayor que para una bicicleta. 22+8+6…..

Lo siento, no pude entender cómo calcular la suma acumulativa (((
Por cierto gracias!

cmmahan

En respuesta a voleshko

Entonces, ¿pudiste resolver tu problema o todavía tienes preguntas?

Entonces, si la suma acumulada está en orden por [SUM(Qty) by YEAR and ITEM], luego debe crear la tabla resumida como la anterior y luego agregar una columna calculada. Esto aún dejará su tabla original para que pueda hacer otro análisis de datos como [month].

Cree la tabla de resumen:

SummaryTable = SUMMARIZE('data table', [year], [#item], 
        "SUM of Qty" , SUM([Qty]), 
        "Total Sum", SUMX(ALLEXCEPT('data table', [year]), [Qty]) 
    )

Cree la columna de total acumulativo en esta tabla calculada:

Cumulative Sum = SUMX(FILTER(ALLEXCEPT('SummaryTable', [year]), EARLIER([SUM of Qty])>=[SUM of Qty]),[SUM of Qty]) 

voleshko

En respuesta a cmmahan

@Cmcmahan
¡Gracias!
No sé por qué, pero

"Total Sum", SUMX(ALLEXCEPT('data table', [year]), [Qty]) 

no funciono para mi…
Y no puedo entender cómo funciona

Cumulative Sum = SUMX(FILTER(ALLEXCEPT('SummaryTable', [year]), EARLIER([SUM of Qty])>=[SUM of Qty]),[SUM of Qty]) 

De todos modos, usé tu idea))))
Para CumulativeSum creé una columna de cálculo

ABC Cantidad acumulada =CALCULAR( SUMA (SUMA de la cantidad),
filtro (TODO (tabla de resumen), tabla de resumen[SUM of Qty]>=ANTERIOR(TablaResumen[SUM of Qty])
&& Tabla de resumen[Year] = ANTERIOR (tabla de resumen[Year]) ))

¡Que tenga un lindo día!

Deja un comentario

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