Experiments in avoiding Crystal Reports.
A quick note for friends out there stuck using Crystal Reports, which I know is... a large number of people.
I've been looking for an alternative to Crystal Reports for some time. One, I don't really want to pay the licensing. Two, I see the struggle and don't want to touch it with a ten foot pole.
So I come to discover Python has fantastic print reporting through jinja2 templates and latex. By swapping jinja2+latex out for jinja2+HTML/CSS, the same reporting system can spit out web reports and dashboards. Python is also ultra-heavyweight on the data analysis side, so that wins by a landslide anyway.
Some notes on how I've been using things and what they do, including the data analysis side:
The report template itself is written in latex to be compiled to a PDF. jinja2 provides the template engine to dynamically insert content. The two modules have mutual support, so latex provides a jinja2 environment. As a result, your templates can be edited directly any latex editor at all without confusing the syntax highlighting or other latex-specific features, which is exceptionally convenient for someone like me who uses Eclipse as a unified IDE. Also, latex looks great using the defaults, so very little time is spent messing around with the formatting.
Python will generally connect to damn near any data source you can imagine without difficulty, including dynamically loading tables off webpages if that's your thing. For database access, you can use either the database-specific library if you're only connecting to one data source, or use one of the several ODBC-like libraries that provide cross-DB support. JSON/REST also work great.
For data analysis, I generally use pandas. Pandas is Python's ultra-heavyweight data analysis library; it's part dynamic database, part excel, part R (the programming language for statistics). If you've ever wanted to read in a bunch of Excel spreadsheets somebody in the accounting department made, normalize the data, then shovel it into an actual database, this is your library. Automatic data alignment, multiindices, and a bunch of other crazy nice features. It is far more powerful than SQL, and is generally the right tool as soon as you are dealing with tabular data. I also make heavy use of networkx to do work on graph theoretic problems, but that's less interesting to most business cases.
On the formatting and presentation side, pandas can spit out its data types as preformatted latex directly into jinja2. For formatting generic Python data types, the tabulate package also works great. Both support multiple output formats, including latex and HTML. For charts and graphics, matplotlib's pyplot module supports a staggering number of graphs and charts, and seaborn provides an interface to quickly create standard statistical charts without much work.
Extremely pleased with the array of dynamic documents I've been able to create so far, and haven't run into any tasks I've been unable to tackle yet. Even simple presentations and whitepapers are going along nicely using latex and Python without templating.
More to follow as I get deeper into it.
Really interesting article. Thanks for the ideas for some great alternatives. Users on IT Central Station looking for alternatives for Crystal Reports also read reviews for Windward. This SVP of Quality Assurance in particular points out in his review that he chose Windward over Crystal Reports for his company, as well as other data reporting tools. You can see what factors helped him make this decision here: https://www.itcentralstation.com/product_reviews/windward-review-49467-by-jim-aiken/tzd/c582-sbc-19.