Would anyone mind giving a general overview of how they’re measuring and tracking OTIF?
We’ve got something in place at the moment using a combination of BPMs, UD fields and some SQL, but it’s been tweaked over time to try and account for various different scenarios, so it’s ended up growing into a bit of a complicated mess that doesn’t do the job as well as we’d like.
I’m not convinced that it needs to be as complicated as we’re making it, but it’s not something I’ve ever really dealt with.
We pull completed jobs every week, and compare their actual completion date from their planned completion date. Summarize on time and calculate percent. Takes 5 minutes, gives us a measurement of our ability to hit our own due dates.
It depends on your definition of On Full In Time; Is it the order, line, release or quantity has been shipped in time. I think that most places take the calculation as (total quantity shipped by Ship By Date)/(total quantity requiested)… so not really on time in full as I would define it, but this seems common.
To do this, isn’t it just a case of adding up all the quantity from OrderRel joined with ShipHead and ShipDtl (where ShipHead.ShipDate<=OrderRel.ReqDate) and dividing by the quantity in OrderRel?
The following is the SQL, but I assume you want to add criteria on the OrderRel for date range or customer:
select sum(ShippedOnTime.Qty)/sum(OrderRel.OurReqQty)
from erp.OrderRel
left join
(select OrderRel.OrderNum, OrderRel.OrderLine , OrderRel.OrderRelNum, sum(ShipDtl.OurInventoryShipQty) Qty
from erp.OrderRel
inner join erp.ShipDtl
on ShipDtl.OrderNum = OrderRel.OrderNum
and ShipDtl.OrderLine = OrderRel.OrderLine
and ShipDtl.OrderRelNum = OrderRel.OrderRelNum
inner join erp.ShipHead
on ShipDtl.PackNum = ShipDtl.PackNum
and ShipHead.ShipDate<=OrderRel.ReqDate
group by OrderRel.OrderNum, OrderRel.OrderLine , OrderRel.OrderRelNum
) ShippedOnTime
on ShippedOnTime.OrderNum = OrderRel.OrderNum
and ShippedOnTime.OrderLine = OrderRel.OrderLine
and ShippedOnTime.OrderRelNum = OrderRel.OrderRelNum