Yes, my point is, you cannot override values once they are sent...
- When you send "progress 25%" that will have a row in the data that says "25%" with the timestamp that it was sent and all the correlation values.
- When you send "progress 50%" you will have a new row in the data that says "50%" with the timestamp that was send and all the correlation values...
- You cannot modify a past event. You will always end up with multiple events
The only way to "override" and only have a single "max % complete" is to completely change how you are tracking and not send any data until an abandonment is detected (i.e. the user attempts to leave the page or close the tab/browser)
While you could use the "most recent" allocation as suggested, if you have multiple forms, this will only show where the user abandoned the last form they interacted with... If you apply a filter for the specific form, if the user attempts the same form two or three times, you will only see the last attempt.... which may not meet your needs, or maybe it does. Without knowing your site or your requirements we can try making different suggestions that you can consider.
Looking at the % complete as a fallout is a good idea (as suggested by @nitesh__anwani), then you can see ALL users hitting those completion points. If you don't have an issue with tracking all those extra server calls, then that could be the way to go...