For the Paris Transportation agency ("Ile de France mobilité"), the agency IFOP achieves satisfaction polls every quarter.
The goal of this project was to create a full web app to show the results of this polls. Data was available as XLS files (one by quarter).
One constraint was that a end-user had to feel in a dedicated rich web-app, and not in a dashboard. And the user data permissions were different according to business-units.
On this project, the Serenytics team created the dashboards for the customer.
The very first step was to write a parser to load the XLS files (dropped by the customer on an SFTP server). Those XLS files had a complex formatting (i.e. they had empty rows, empty columns, data as pivoted table, many tabs). We wrote this parser in Python. This is possible because in Serenytics, you can write any Python code and run it. And it is straightforward to load data from this Python code into the Serenytics data-warehouse. For this project with a low number of rows, we setup the Serenytics account with a PostGreSQL as internal data-warehouse.
We also created a "backend" dashboard with buttons triggering the imports. This allows the customer to import new files after he dropped them on the SFTP server. This is possible thanks to the feature in Serenytics to add buttons in a dashboard and to choose any job as the triggering action (here, the buttons trigger the Python parser script).
One requirement for this project was that the end-user had to feel in a dedicated web-app. We worked on several points to achieve this:
Here is an example of the dashboard used as the landing page:
We configured the users to be redirected to this page as soon as they connect from the login page.
Here is an example of a filter (done with low-code features in Serenytics) to allow the user to choose the subway/bus/train line:
This type of component can be created by any developer with basic knowledge of HTML. Only some layout is required (e.g. with flex). Then Serenytics provides functions to specify that a click on a given part must trigger some action (e.g. filter the dashboard with a given value).
Here is a screenshot of the full application (for confidentiality reasons, actual data is not visible on this page):
You want to know more on this type of project? Contact us at firstname.lastname@example.org.