The short answer is no. SSRS data sets do not support read calls or partial retrieval of result sets. They call an execute and retrieve the full result set before initializing report rendering. When generating large reports it is generally not recommended to run them on demand unless they support pagination. However pagination will only limit the data sent between the SSRS service and the browser, not between the SSRS service and the database. SSRS will still wait for the entire data set get SP to be returned before starting to render the first page.
The simplest solution is to split the data set into multiple parts, add parameters to the get SP to return smaller data sets. Or you could try passing a page number to the SP and use a sub report on each page.
This article is worth a read.
Here are 4 basic strategies you can use for large reports.
- Use pagination. The server will send the report to the browser one page at a time. This option only works if you are rendering in a browser or report viewer. It would not work for instance if you are downloading an excel file on demand, that would require the completion of all the queries before sending the file to the client.
- Configure a subscription to distribute the report via email or to a shared folder on a fixed schedule.
- Configure report snapshots.
- Use sub reports to break a large query into multiple smaller parts (not recommended).
Other features of reporting services you might want to look into.
- Shared dataset cache
- Cache a report
Update:
Pagination can be setup by adding page breaks or grouping in a table. This will enable SSRS to return the first page to the browser while the other pages are still being rendered. However it should be noted that pagination will not effect the call between your db and SSRS server. If you have one large query the the first page rendering will not start until that result set has been completely loaded from the DB.
Sub reports allow you to return a query for each page in your report. For instance if you have a query that returns 100 rows and you wanted to show only 20 rows. Use the RANK() OVER to group your results in to groups of 20,then return the group numbers, these will be your page numbers. Set this as the main query for the report and format your pagination to create one page per page number returned from the main query. Then create a sub query sp that accepts your page number and number of rows you want to show, pass that page number from the main query. The sub query will return the 20 records you want to show on that page.
Why sub report as paging not recommended?
Using sub queries like this is not recommended because it will be difficult to update or maintain, plus with all the extra queries, grouping, and table aggregation in the SQL, it would be much less efficient, maybe even take longer that your original query. For large queries it is recommended to use subscription, a cache or snapshots.