It’s a problem for the scheduled events model. Users get the functionality to change schedule event due dates whenever they like, but those re-scheduling actions are not logged anywhere useful for analysis (except, I suppose, the server logs). Further, once a scheduled event is opened and converted from “scheduled” to “active”, you can’t see when that action occurred or who opened it.
We had a similar problem with ANC tracker: to test the effectiveness of SMS reminders 7 days before their appointment, we needed to see how many scheduled events actually occurred. So we exported the event data, and determined that if the CREATEDDATE was before the EVENTDATE and the event is active or complete, then it originated as a scheduled appointment and was later activated. But because the event scheduling is so dynamic, these are all based on assumptions about users’ scheduling behavior, like users do not delete the scheduled event and open a “fresh” event, and there’s limited “rescheduling” of the appointment.
It would have been easier to run a nightly script to download all scheduled and active events by org unit, due date, and enrollment, then do an analysis to see how many events have multiple due dates (reschedules), became an active event (activated), or were skipped/deleted. Or possibly, there would be a way to set up a program stage notification with that info, which is sent to db admins whenever a new appointment is scheduled or becomes 1 day overdue. You could then export and analyze those programstage notifications without need for a nightly script.
TLDR: With event reports can see how many events were missed – “OVERDUE” or “SCHEDULED” status—where due date is before the analytic period start date. But the “rescheduled appointment” indicator is not possible in DHIS2 analytics, you’ll need a custom script.