• Thanks Sue and Jason.  We have 15,000 - 20,000 report runs per day, so the volume is pretty significant.  Our ETL runs several times per day.  The volume of data that the ETL brings in can vary quite a bit, which results in varying ETL end times.  As a result, expiring the cache on a pre-set schedule is tough; that's why we went with the approach of expiring the cache programatically at the end of the ETL.  The code that I am using in the ETL (EXEC dbo.AddEvent @EventType = 'SharedSchedule' ...) was picked up by profiling the timed schedule expiration anyway, so I think we would be running into the same issue if I just set the shared schedule to expire on a timed schedule.

    I'm not too keen on the idea of altering internal MS sprocs, so I think I'm going to stick with calling the FlushReportFromCache sproc serially for each dataset at the end of the ETL.  It's ugly, but I think it will work.