The ReportSender contains a single hourly job that sends your reports. This job runs every hour even if you only have one scheduled report once per month, this is expected behavior.
During the hourly schedule the job does the following actions:
Identifies any schedules that should have been sent but were not. This happens when systems are overloaded, if the salesforce schedulers are running behind, if the reporting systems are not responding, or if your report was temporarily broken during the normally scheduled time.
Identifies any schedules that are scheduled for the current time.
Retries any reports that has previously been unable to run
Sends any scheduled reports that should be run
Records the last run time of each schedule so they are not sent repeatedly
You might now ask, why not just schedule a job for when I schedule my reports? There are a few reasons:
That would not allow the job to reliably retry sending the report
Users with hundreds of scheduled reports would easily hit salesforce limits around number of scheduled jobs, concurrent jobs, etc.
Our report sender executes reports in series to prevent overload of the salesforce reporting system
Anything left unanswered? Use our chat feature to ask!