I have something to share on SRSReportDataProviderPreProcessTempDB which is robust feature for the long running report in terms of execution which I copied from different sources.
Preprocessed data providers first prepare all data and only then they call SSRS. Normally the report itself asked for data when needed and if it takes too long, a timeout will kill the execution. Preprocessing data is there to avoid this problem.
Use TempDB with SrsReportDataProviderPreProcessTempDB. Regular tables were used in a previous solution and it caused some performance issues.
Report Data Provider.
An RDP class is a X++ class that is used to access and process data for a Reporting Services report. The options for a data source type for a Microsoft Dynamics AX report are the query, business logic, and RDP. An RDP class is an appropriate data source type when the following conditions are met.
- You cannot query directly for the data you want to render a report.
- The data to be processed and displayed is from Microsoft Dynamics AX.
SSRS uses the WCF (Windows Communication Foundation) to connect to the AOS for data access. This connection has a threshold limit and it might fail if a report takes a long time to execute. The report server execution waits for the RDP to process the data and return it. In the event where the RDP takes too long a time to execute the reporting, the service might fail. Preprocessing is a strategy to beat this issue. This recipe will help you understand how to enable preprocessing for any RDP report
How to do it
When a report processes a huge amount of data or is found to take considerable time during the execution, then you can decide to incorporate preprocessing. Follow these steps to enable preprocessing.
- Modify RDP base class: SRSReportDataProviderBase -> SRSReportDataProviderPreProcessTempDB
- Update table type: InMemory -> TempDB
- Perform a full compile of IL
- Restart the AOS
- Introduce Controller class to run the report
- Update Output Menu Item: Report -> Controller class
These are pre-processing AX-SSRS reports. in these report user connection information is taken using method parmUserConnection(). Yes, this method sets the User Connection object on the temp table(s) that are used in the RDP class to return data. As per documentation , for pre-processing RDP reports, you must set the User Connection before the tables can be used. It is a best practice to set it in the beginning of processReport() method.
Thanks for reading…
Till then Happy DaXing…