Calculating On Time In Full

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