Learn from the best! Meet the four finalists headed to the FINALS of the Power BI Dataviz World Championships! Register now
Hola
Tengo una tarea en la que realmente no tengo idea de cómo resolverla
Tenemos una producción de una pieza (ArticleID). Cada pieza tiene varias operaciones (OP) y cada OP tiene un tiempo de trabajo planificado por pieza.
En algunas de las operaciones ponemos la cantidad producida en el sistema.
por ejemplo, el artículo 1004 tiene los PO 10, 20, 30 y 40. En OP 10 y 40 hacemos la entrada en el sistema. Una reserva en OP 40 significa que OP 20 y OP 30 también se hicieron ya pero aún no se han reservado. OP10 también se hizo, pero ya está reservado
Ahora, el día de la entrada, necesito calcular el tiempo de trabajo utilizado. El problema es, cómo flasheo hacia atrás y encuentro todos los OP entre el último punto de reserva (OP10) y el punto de reserva actual (OP40) y uso la misma cantidad que reservé en OP40 para los OP encontrados (OP 20, OP 30 y OP 40).
Los datos reales son bastante grandes, no estoy seguro de cómo, por ejemplo, una powerquery es la más fácil con algo de llenado hacia arriba / hacia abajo en términos de rendimiento
gracias
Un archivo de muestra está aquí
Hola @Hansolu ,
¿Podría decirme si su problema se ha resuelto o si aún necesita más información? Si necesita más ayuda, háganoslo saber.
Hola
Tengo algún otro tema urgente en mi mano y aún no continué, tomaré otras semanas hasta que pueda continuar aquí. Mantendré este hilo actualizado,
gracias
Hola @Hansolu ,
Solo revisa para ver si has tenido la oportunidad de revisar @GrowthNatives respuesta. Si tiene alguna pregunta adicional, háganoslo saber, estamos aquí para ayudarlo. Gracias por formar parte del foro de la comunidad de Microsoft Fabric.
Saludos
Yugandhar.
Hola @Hansolu , este es un problema clásico de toma retroactiva en los informes de producción, debe inferir la finalización implícita de las operaciones intermedias cuando se reserva una operación posterior, utilizando la última entrada disponible como referencia.
Para cada ArticleID:
Cuando se reserva una operación posterior (por ejemplo, OP40),
Desea "retroactiva" y asignar la misma cantidad a todas las operaciones no reservadas entre la reserva anterior (por ejemplo, OP10) y la actual (por ejemplo, OP40).
A continuación, calcule el tiempo de trabajo utilizado = PlannedTime × Quantity para esas operaciones.
En Power Query:
Ordenar por ArticleID → OP ascendente → BookingDate ascendente.
Asegúrese de tener estos campos:
ID del artículo
EN
BookingDate (o fecha de entrada)
PlannedTimePerPiece
BookedQty (null si no se reserva)
Cree una columna de bandera:
IsBooked = if [BookedQty] <> null then 1 else 0
Esto le permite marcar dónde existen reservas.
Use la lógica de relleno de Power Query :
Agregue una columna de índice para el pedido.
Agrupar por ArticleID.
Dentro de cada grupo:
Rellene el número de operación reservado más reciente (LastBookedOP).
También complete la cantidad reservada (LastBookedQty).
Ahora cada fila (operación) sabrá:
Que fue el último punto de reserva antes de él,
Y qué cantidad se reservó.
Agregue una columna condicional:
ShouldBackflush =
if [IsBooked] = 1 then 1
else if [OP] > [LastBookedOP] and [NextBookedOP] <= [OP] then 1
else 0Esto marca todos los OP intermedios (por ejemplo, OP20, OP30) que se encuentran entre la última y la siguiente reserva.
Propina: Para obtener NextBookedOP, realice un relleno inverso (técnica de llenado): ordene descendentemente, complete el siguiente número de OP reservado y luego vuelva a fusionarlo.
BackflushQty = if [IsBooked] = 1 then [BookedQty] else [NextBookedQty]
UsedWorktime = [PlannedTimePerPiece] * [BackflushQty]
Dado que sus datos son grandes:
Realice operaciones de agrupación y relleno por ArticleID (no globalmente).
Evite las llamadas anidadas a Table.Buffer() a menos que sea necesario.
Si tiene acceso al back-end de SQL, considere la posibilidad de realizar la lógica de toma retroactiva en SQL antes de la importación de Power BI, ya que es más rápido.
Si necesita calcular esto dinámicamente en Power BI (no precalculado en PQ):
Cree una medida para detectar el último OP de reserva para cada artículo/fecha:
LastBooking =
CALCULATE(
MAX('Table'[OP]),
FILTER('Table',
'Table'[ArticleID] = SELECTEDVALUE('Table'[ArticleID]) &&
NOT(ISBLANK('Table'[BookedQty]))
)
)Luego use esa medida para asignar cantidades o tiempos condicionalmente:
UsedWorktime =
VAR CurrentOP = SELECTEDVALUE('Table'[OP])
VAR LastBookedOP = [LastBooking]
RETURN
IF(CurrentOP <= LastBookedOP,
SUMX(
FILTER('Table', 'Table'[OP] <= LastBookedOP),
'Table'[PlannedTimePerPiece] * 'Table'[BookedQty]
)
)Hola
gracias, intentaré esto durante el fin de semana cuando tenga tiempo
dará su opinión después
Hola, una captura de pantalla está en el archivo pbix cómo debería verse,
¿Cuál necesitas más?