One issue with stored procedures in reporting services is that if the stored procedure is quite complex, e.g. has multiple select statements, that SSRS has trouble parsing them correctly to determine the columns.
The usual workaround for that is to put a 'dummy' query in the very beginning of the stored procedure that has the same columns & datatypes as are returned by the procedure. SSRS will start to parse the stored procedure, get to that first select query and then use it as the columns for the report. This BOL article
has the key info:
See the heading "Understanding Report Datasets and Queries"
"If multiple result sets are retrieved through a single query, only the first result set is processed, and all other result sets are ignored".
It is also possible to explicitly set the columns required for the query (edit dataset properties and then "fields") and set the stored procedure as the dataset query without executing the query or letting it refresh fields.I don't recommend doing that though, the other way is easier. You just have to make sure that if you change your SP that you also change the dummy query to keep the fields the same as those that are actually returned.