The solution tracks the selected parameters from a report execution and uses them later for the next execution to take them as default parameters. This enables users to log parameters and inspect the execution statistics of reports as well as caching former execution parameters.
The basis for this are two tables (one which tracks the global execution information like ReportName and ReportUser) and one for the parameters. The according procedures are one to store the values and another one to get the values back for future report calls of that user. The procedure are capable to handle all available data types in reporting services as well as Nullable parameters and multivalue parameters.
The basis on the frontend (the report execution) is a simple custom code (mainly based on the information of the blog post above) which includes the logic to collect the parameters as well as a small implementation to hash the user information (as in most countries you are not allowed to track user sensitive data without a specific reason) Simple and easy to implement.