You can create just one data sources and then generate an unlimited number of reports from that data source.
Programmers can re-use that data source to make new reports for users.
Users can make their own reports, at will and ad hoc, without burdening programmer resources