For the common use-cases that I encounter on a day-to-day basis, I have discovered that there is no need to use any expensive reporting framework like SSRS, Jasper Reports - or even Power BI, Tableau, etc. My alternative came about after exploring Pandas in addition to a Flask prototype application. However, it takes a lot of programming knowledge (and full-stack at that) and imagination. Armed with this, the sky is the limit.
Pandas' Dataframe is very handy, and the several available analyses can do wonders for reporting, whether simple or complex. Whether you want simple lists, matrices, multi-level pivots, Pandas has a way for you. The beauty with using a programming language like Python and the necessary frontend (Javascript, HTML, CSS) is that the power of flexibility is in your hands. You are only limited by imagination on what you can do. For instance, I have fully parameterized the reports in a unique custom way that I would not be able to do using a reporting framework.
The reports can be generated on user request, or can run on a schedule based on Celery for task scheduling. They can be easily exported to PDF, Excel or any other useful format as required by the user. The end-user has the ability to dynamically ask for what s/he wants from the report - e.g. which fields, which groupings, sorting, etc.
Thanks to Plotly, Matplotlib, GeoPandas, the reports can have embedded charts and maps - bringing the power of visualization home.
A Matrix example:
A charting example using web-scraped data:
A List example:
A Dashboard example:
A Statistics example:
A Profiling example: