Depends on the type of report. If it's a detail style report with few transforms I'll use entitycollections or dynamic lists.
If it's a summary report with a lot of aggregates and nested queries and weird joins I'll put it into a typed view or sproc.
Jeff