Show and Tell: How to Build a Reporting Dashboard using Dash and Plotly

I just finished writing up a post on “How to Build a Reporting Dashboard using Dash and Plotly” at https://medium.com/@davidcomfort/how-to-build-a-complex-reporting-dashboard-using-dash-and-plotl-4f4257c18a7f

In this blog post, I will provide a step-by-step tutorial on how to build a reporting dashboard using Dash, a Python framework for building analytical web applications. Rather than go over the basics of building a Dash app, I provide a detailed guide to building a multi-page dashboard with data tables and graphs.

I built the reporting dashboard as a multi-page app in order to break up the dashboard into different pages so it less overwhelming and to present data in an organized fashion. On each dashboard page, there are two data tables, a date range selector, a data download link, as well as a set of graphs below the two dashboards. I ran into several technical challenges while building the dashboard and I describe in detail how I overcame these challenges.

The completed Dashboard can be viewed at https://davidcomfort-dash-app1.herokuapp.com/cc-travel-report/paid-search/ and the code is provided in Github.

5 Likes

Holy smokes, this is so nice! Really cool to see an extensive, end-to-end example of using Dash at a co. I love these schematics too

Thanks so much for sharing. Glad you saw the talk at PyData Miami!


I believe that this is the first custom-cell-formatting example I’ve seen in the wild too. This was only released like last week. Really nice!

2 Likes

Thanks, this is really interesting, I have a similar project I am working on and it’s good to compare and contrast methodology.

For my largest most complicated app I really want it to be easy to maintain in the future, so I’ve personally put a lot of effort in to making sure I never have to insert app.config.suppress_callback_exceptions = True, among other things I’ve done this by using url_base_pathname to build my multiple pages.

Did you ever run in to problems with callback exceptions being suppressed? Or does it work better for you to have the flexibility?

Also btw on Step 14 Part 2 the following command:

conda create --n dash

Should be:

conda create -n dash python pip

Conda environments can be installed without Python or Pip, so if you pip install after this you may be installing to a Python environment that you did not anticipate.

Sorry I can’t share my code, but I can tell you that before now I’ve pushed out an internal app to users with Dash features that were released the previous day :upside_down_face: