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
¡Que tenga un lindo día!