Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Syndicate_Admin
Administrator
Administrator

Contar el número de productos que han pasado de un estado a otro

Estimados usuarios del foro

¿Alguien ha encontrado cambios en el estado del producto de seguimiento de un período a otro?
Tengo la siguiente tabla:


identificaciónfechaestado
12021-01A
12021-02A
12021-05B
12021-06C
12021-07A
22021-01C
22021-05C
22021-06A
22021-07A
22021-08B
32021-01C
32021-03A
32021-05A
32021-06B
32021-08C


También tengo dos filtros que funcionan como datos al principio del período y datos al final del período (no entre ellos)
Por ejemplo: start_date filtro - 2021-01 y end_date 2021-05

Lo veo así:
El producto con id = 1 en 2021-01 tiene estado A y en 2021-05 tiene estado B y así sucesivamente.

Start_dateEnd_dateIdentificaciónEmpezarFin
2021-012021-051AB
2021-012021-052CC
2021-012021-053CA



Y como resultado, deseo tener una tabla como:

start_statusend_statusContar
AA0
AB1
AC0
AD0
BA0
BB0
BC0
BD0
CA1
CB0
CC1
CD0
DA0
DB0
DC0
DD0


Y por ejemplo para la fecha 2021-02 y 2021-07

Start_dateEnd_dateIdentificaciónEmpezarFin
2021-022021-071AA
2021-022021-072DA
2021-022021-073DD


Y tabla de resultados

start_statusend_statusContar
AA1
AB0
AC0
AD0
BA0
BB0
BC0
BD0
CA0
CB0
CC0
CD0
DA1
DB0
DC0
DD1


¿Tal vez alguien ya ha rastreado esto? ¡Estaré agradecido por ayuda!



6 REPLIES 6
Syndicate_Admin
Administrator
Administrator

Aquí está mi opinión sobre esto.

Primero creé una tabla para poder seleccionar el período de y hacia

PeriodFromTo = 
VAR YearStart = int(left(min('status'[date]),4))
VAR YearFinish = int(left(max('status'[date]),4))
VAR Periods = SELECTCOLUMNS(GENERATESERIES(1,12),"Period",[Value])
VAR Years = SELECTCOLUMNS(GENERATESERIES(YearStart, YearFinish),"Year",[Value])

VAR Periods2 = CROSSJOIN(Years, Periods)
VAR Periods3 = SELECTCOLUMNS(Periods2,"PeriodFrom", [Year] & "-" & right("0" & [Period],2))
VAR Periods4 = SELECTCOLUMNS(Periods2,"PeriodTo", [Year] & "-" & right("0" & [Period],2))
VAR Periods5 = FILTER(CROSSJOIN(Periods3, Periods4), [PeriodFrom]<=[PeriodTo])
RETURN Periods5

Luego creé una tabla para unir el estado posible

StatusFromTo = 

VAR Statuses = CALCULATETABLE(values('status'[status]))
VAR Statuses2 = SELECTCOLUMNS(Statuses,"statusFrom",'status'[status])
VAR Statuses3 = SELECTCOLUMNS(Statuses,"statusTo",'status'[status])
VAR Statuses4 = CROSSJOIN(Statuses2,Statuses3) 
RETURN Statuses4

Y finalmente creó una medida para calcular los productos que cambiaron de un estado a otro.

statusCount = 
VAR vPeriodFrom = CALCULATE( MIN(PeriodFromTo[PeriodFrom]), ALLSELECTED(PeriodFromTo[PeriodFrom]) )
VAR vPeriodTo = CALCULATE( max(PeriodFromTo[PeriodTo]), ALLSELECTED(PeriodFromTo[PeriodFrom]) )

VAR vStatusFrom = values(statusFromTo[statusFrom])
VAR vStatusTo = values(statusFromTo[statusTo])

VAR statuses = SUMMARIZE(FILTER('status','status'[date]<=vPeriodFrom),'status'[id],"date2",max('status'[date]))
VAR statuses2 = ADDCOLUMNS(FILTER(NATURALINNERJOIN('status',statuses),[date2]='status'[date]),"MINDATE",vPeriodFrom)

VAR statuses3 = SUMMARIZE(FILTER('status','status'[date]<=vPeriodTo),'status'[id],"date2",max('status'[date]))
VAR statuses4 = ADDCOLUMNS(FILTER(NATURALINNERJOIN('status',statuses3),[date2]='status'[date]),"MAXDATE",vPeriodTo)

VAR statuses5 = NATURALINNERJOIN(SELECTCOLUMNS(statuses2,"id",'status'[id],"status1",'status'[status]), SELECTCOLUMNS(statuses4,"id",'status'[id],"status2",'status'[status]))
RETURN COUNTROWS(FILTER(statuses5,[status1] in vStatusFrom && [status2] in vStatusTo))+0

pbix y archivo de datos en el siguiente enlace.

¡Hola, Daniel!

¡Muchas gracias por tan gran ayuda!

Traté de entender su solución, y continuaré ... pero hasta ahora sin éxito

Pero es posible cambiar la medida por fechas perdidas, considerar que el producto está en el estado "D", es decir, de 2021-02 a 2021-08

statusDestatusTostatusCount
AA0
AB0
AC0
AD1
BA0
BB0
BC0
BD0
CA0
CB0
CC0
CD0
DA0
DB1
DC1
DD0

Gracias por su ayuda!!!

Hola, está considerando fechas perdidas.

No había ningún estado "D" en los datos de muestra, ¿puede actualizar su conjunto de datos de muestra y el resultado esperado?

el estado D no está en la tabla transaccional, este estado significa "faltante"

tabla de resultados, si se selecciona el período de 2021-02 y el período de 2021-08

statusDestatusTostatusCount
AA0
AB0
AC0
AD1
BA0
BB0
BC0
BD0
CA0
CB0
CC0
CD0
DA0
DB1
DC1
DD0

¡Gracias de nuevo!

Ok, lo entiendo ahora.

Cambié el script de tabla de estado de unión cruzada a este para agregar el estado D

StatusFromTo = 

VAR Statuses = CALCULATETABLE(values('status'[status]))
VAR Statuses2 = UNION(SELECTCOLUMNS(Statuses,"statusFrom",'status'[status]),ROW("status","D"))
VAR Statuses3 = UNION(SELECTCOLUMNS(Statuses,"statusTo",'status'[status]),ROW("status","D"))
VAR Statuses4 = CROSSJOIN(Statuses2,Statuses3) 
RETURN Statuses4

Y la medida a esto

statusCount = 
VAR vPeriodFrom = CALCULATE( MIN(PeriodFromTo[PeriodFrom]), ALLSELECTED(PeriodFromTo[PeriodFrom]) )
VAR vPeriodTo = CALCULATE( max(PeriodFromTo[PeriodTo]), ALLSELECTED(PeriodFromTo[PeriodFrom]) )

VAR vStatusFrom = values(statusFromTo[statusFrom])
VAR vStatusTo = values(statusFromTo[statusTo])

VAR statuses = FILTER('status','status'[date]=vPeriodFrom)
VAR statuses2 = FILTER('status','status'[date]=vPeriodTo)

VAR statuses3 = VALUES('status'[id])

VAR statuses4 = NATURALINNERJOIN(NATURALLEFTOUTERJOIN(SELECTCOLUMNS(DISTINCT('status'[id]),"id",'status'[id]),SELECTCOLUMNS(statuses,"id",'status'[id],"status1",'status'[status])), SELECTCOLUMNS(statuses2,"id",'status'[id],"status2",'status'[status]))

RETURN COUNTROWS(FILTER(statuses4,COALESCE([status1],"D") in vStatusFrom && COALESCE([status2],"D") in vStatusTo))+0

He actualizado el archivo pbix adjunto.

Por favor, hágamelo saber si eso funciona para usted.

Hiciste un trabajo increíble, espero que algún día alcances tu nivel!!!

¡Gracias!

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.