Flexport – extremely pluggable reporting

Using Python plugins to bridge the chasm between report writers and programming

Martin Gfeller

Analytics Case Study Human-Machine-Interaction Scientific Libraries (Numpy/Pandas/SciKit/...) Software Design

See in schedule

Numerical reporting is used in many domains – from accounting (oldest written records) to financial risk management (our domain) to science. Reporting has a chasm with an island in the middle – programming-less, limited (“Report Writers”, even advanced systems like Tableau, Qlik) to programming required, anything possible. Excel sits in the middle of the chasm, limited programming, limited flexibility. What we like for users to be flexible in their report arrangements, and programmers to be able to add functionalities in a piecemeal way.

The goal is to create pivot-like reports with vertical and optional horizontal dimensions, and facts. Each cell in this report has some formatted content (numeric, text, clickable graphics) and right-click actions, e.g., to drill-down.

A report is created by a user by dragging “boxes” from catalog displayed as a tree to a canvas – a box for each vertical and horizontal aggregation dimension, and for each fact. Each of these boxes is a class, with attributes and methods to create the raw data, to aggregate, and to format. Boxes can depend on other boxes (so data created by them can be used), and are arranged in an execution sequence by the report compiler. This report compiler arranges execution in stages, connected by an event pipeline, so reports can be updated by streaming new data.

Almost everything in the report is programmable and composable by plugins (of which the box classes are one example). The execution, the output (HTML+JQuery, Excel, XML, CSV) – all plugged components. Even the report compiler is bootstrapped from pluggable components.

Did we achieve our goals? Flexibility – yes; ease of use – quite good. ease of programming – no, efficient programming requires array thinking.

Type: Poster session (180 mins); Python level: Intermediate; Domain level: Beginner

Martin Gfeller


I'm a "full stack person" combining management (product, delivery and team) with client relationship (not sales!) and programming.

I use Python since 2001 and appreciate the immediacy of its interpreter and its low conceptional overhead. At a younger age, I’ve was raised with APL, so I sometimes fail to see that array thinking may be difficult for some.

I occasionally blog about my world https://ict.swisscom.ch/autoren/tzhgfma1/.