Microsoft SQL Server Reporting Services (SSRS) 2008 R2 offers the ability to create report subscriptions based on live dynamic data. I've found it especially useful for situations where many users wish to receive a copy of a report in their mailbox but groups of those users want their own specific report parameters. Data-driven subscriptions are based on a SQL query which returns a list of users and a set of report parameters that are used to generate and send the report, and its all built into a single data-driven subscription.
However I discovered SSRS is not as efficient as I would like. While reading Microsoft's documentation (http://msdn.microsoft.com/en-us/library/ms156413.asp) I was getting the feeling that a report is generated for each recipient in a data driven subscription, even if several of those recipients use exactly the same parameters to generate their reports. This might not be a problem for reports that run in seconds, but for reports that are resource intensive it can be quite an issue. Imagine a report that normally takes 30 seconds or so to run: 30 seconds times maybe 20 users = 10 minutes of slamming the SQL server to generate the reports…. and if they want this report 3 times a day…. Not so good if you need that SQL server to perform well throughout the day.
So I did some testing to prove this out and set out to find a solution.
However I discovered SSRS is not as efficient as I would like. While reading Microsoft's documentation (http://msdn.microsoft.com/en-us/library/ms156413.asp) I was getting the feeling that a report is generated for each recipient in a data driven subscription, even if several of those recipients use exactly the same parameters to generate their reports. This might not be a problem for reports that run in seconds, but for reports that are resource intensive it can be quite an issue. Imagine a report that normally takes 30 seconds or so to run: 30 seconds times maybe 20 users = 10 minutes of slamming the SQL server to generate the reports…. and if they want this report 3 times a day…. Not so good if you need that SQL server to perform well throughout the day.
So I did some testing to prove this out and set out to find a solution.