it sounds like the joins.
CR isn't good at getting x from a table and then using that to y from another which gives us z to get from the first table.
If you need to do something like that...which sounds overly complex, I would recommend a stored proc as you can select from a table and place the results in a temp table and use those results to get the next level until you are satisified with the results and then you can send the final values back to the report.
Probably not the answer you were after.
I am biased towards stored procedures just because you can have as much or as little complexity in the selection criteria and do so much more than you can with just CR and linking tables.