We have a growing business intelligence solution deployed on SQL Server 2008 R2. All reports are in SSRS and are executed via web browser by the end-users throughout the day.
We have been investigating how to improve performance and so far it appears that converting report datasets to shared datasets and then caching those shared datasets provides the greatest opportunity. (We can't snapshot or cache the individual reports themselves as they all contain customized content based upon the end user's roles and permissions).
Creation of the shared datasets and setting them to be cached is easy, and we're seeing really nice performance improvements.
However, we haven't been able to find a way to refresh the cached data without using the SSRS calendar-based schedule. Our ETL process completes anywhere from 8 am to sometime after noon depending on data availability from source systems, so we can't just pick a point in time to refresh the cached data.
Ideally we'd like to add commands to the end of the SSIS workstream that loads the database, and have these commands expire the existing cached datasets and refresh their data.
We've been able to use the SetCacheOptions stored procedure to expire the cached datasets, ensuring that the next run of the top-level report will pull new data - but the performance hit on that first execution is significant. We'd rather have the caches refresh systematically when ETL completes so that our end users are always seeing the fastest performance with the most current data.