Home Business Intelligence Unleashing Streamlit’s Energy: Constructing Function-Wealthy Information Functions With Headless BI

Unleashing Streamlit’s Energy: Constructing Function-Wealthy Information Functions With Headless BI

Unleashing Streamlit’s Energy: Constructing Function-Wealthy Information Functions With Headless BI


Lately I wrote an unconventional article about exposing analytics use circumstances in digital actuality. Although it was only a hackathon challenge, it pushed me to consider what APIs (and wherein kind) must be uncovered by headless BI platforms.

After we speak about front-end improvement, we normally speak about Javascript/Typescript libraries. This was the case with the VR demo talked about above. However, particularly within the case of information (analytics), Python language turned extraordinarily common not solely on the again finish but in addition on the entrance finish. Probably the most common ecosystems these days is Streamlit.

An concept popped into my head: create an information utility using a full set of APIs, which must be supplied by headless BI platforms.

At present, probably the most feature-rich knowledge functions is the one permitting customers to construct studies (visualizations/charts/insights), so I made a decision to create such an utility utilizing Streamlit and our Python SDK.

This text is backed by an open-sourced demo. It comprises not solely the Streamlit app but in addition a corresponding end-to-end knowledge pipeline. It’s price mentioning that the demo lets you create a single pull request to ship the whole lot persistently:

  • Extract from knowledge sources and cargo to the info warehouse (Meltano)
  • Information transformations (dbt fashions)
  • Declarative definitions of analytics (GoodData)
  • Information functions (VR demo, Streamlit)

Why Headless BI?

We describe it right here.

Particularly, you may join Streamlit on to knowledge warehouses and even to recordsdata, however headless BI affords extra:

  • Declare a semantic mannequin simply as soon as (logical knowledge mannequin, metrics, studies, …)
  • Join any purchasers (together with Streamlit), whereas counting on a single supply of reality
  • Present low-enough latency to finish customers (scalability, caching)
  • Stop knowledge warehouses from turning into efficiency bottle-necks or being too expensive


Let me spoil it right here and present you the complete image first. This can be a screenshot of the ultimate utility:

What are you able to see within the image? What am I going to speak about within the following chapters?

Use circumstances in self-service analytics!


  • Semantic mode — introduced within the left panel. Customers construct studies by deciding on enterprise names. No SQL!
  • Studies: introduced in the primary canvas. Varied visualization varieties.
  • Interactivity: filters, sorting
  • Context consciousness – catalog is filtered based mostly on an already present report
  • Multi-tenancy – swap between a number of remoted workspaces
  • Caching – each Streamlit and GoodData caching

If you wish to begin instantly with a hands-on expertise as an alternative of getting ready the entire ecosystem in your laptop computer, you may strive it right here.

In any other case, begin with the top-level README to organize knowledge and analytics, then comply with it with the README for the Streamlit app to begin the app regionally.

Semantic mannequin

The demo repository comprises all of the details about how the semantic mannequin is generated.

We need to expose the mannequin to finish customers within the Streamlit knowledge utility. Python SDK offers varied features for this objective. It’s doable to listing every kind of entity – e.g. listing attributes, info, metrics, and many others. Moreover, it offers a operate to return the complete catalog.

Furthermore, the SDK offers a operate to filter the mannequin by the already present report. What does it imply? Once you put some entities right into a report, it may well restrict what different entities you may mix them with. The mannequin consists of datasets related by relations. Not all datasets have to be related, and even when they’re, the route of the connection can influence the power to mix the entities.

Lastly, we need to cache the catalog so we don’t name the backend with each web page refresh.

For example, right here is the operate accumulating the entire semantic mannequin (catalog):

Then, a Streamlit part like “multiselect” might be populated by catalog entities:

Helper features are used right here to extract IDs and titles. Additionally, the Streamlit state is utilized right here to set the chosen values.

Report executions

Python SDK offers varied choices on the right way to execute studies. As a result of we’re constructing a Python utility, it is smart to make use of the Pandas extension, which may return Pandas knowledge frames. They are often printed 1:1 in Streamlit or they are often instantly handed as arguments to numerous visualization libraries supplied by Streamlit, on this case, I exploit the Altair and Folium libraries.

We have to acquire all the chosen catalog entities and fill them right into a report definition.

Each distinctive request is cached by Streamlit. It’s doable to clear the cache by utilizing a devoted button within the left panel.


Though GoodData offers an editor for creating metrics in a customized MAQL language (which is way simpler to make use of than SQL), the customers usually simply need to create quite simple metrics like SUM(reality) or COUNT(attribute). The Streamlit utility helps it, permitting customers to choose a reality/attribute as a metric and for every to specify an analytics operate (SUM, COUNT, …).


The applying offers an possibility to choose an attribute as a filter. It’s doable to listing all of the out there values for every attribute and show them within the Streamlit “multiselect” part.

Right here is how the attribute values might be collected from the server:

Although I applied solely optimistic attribute filters (attribute values equal to a number of values), GoodData, by means of Python SDK, offers many different kinds of filters out-of-the-box, e.g. detrimental filters, metric worth filters, date filters, and many others.

Sorting, paging

I made a decision to use sorting and paging within the Streamlit utility, on the complete consequence set(knowledge body). Nevertheless, GoodData helps sorting/paging out-of-the-box. Sooner or later, I want to prolong the present answer accordingly.


GoodData offers an choice to create remoted workspaces. It’s simple to help it within the Streamlit app — we simply listing the out there workspaces, populate them to a devoted “selectbox” and let customers decide the workspace which they wanna discover.

Why Streamlit Rocks?

It’s very easy to onboard. Many constructing blocks are already applied and simple to make use of, e.g. checkbox, multiselect, inputbox(textarea), and many others.

Streamlit affords first-class help for state administration. It’s simple to persist much more advanced variables to state and entry them (after web page reload) utilizing dict or the property syntax.

It’s doable to cache even very advanced constructions. You simply merely use the @st.cache_data annotation and the results of the annotated operate is cached for every mixture of values of operate arguments.

Lastly, Streamlit offers a superb cloud providing. Builders should register, after which they will create apps and bind them to GitHub repositories. Any merge to the repository redeploys the app with zero downtime. Cool! Furthermore, as soon as the app is displayed within the browser, it offers a developer console containing logs, settings, and many others.

The place Streamlit Fails?

Though state administration is highly effective and simple to make use of, it’s typically difficult, particularly when it is advisable refresh elements based mostly on modifications in different elements, which is the case with catalog filtering. Once you decide an attribute in “View by” you may restrict the listing of metrics. Probably the most sturdy answer I discovered is to specify the “key” property of selectbox/multiselect elements. However, typically it didn’t work as anticipated and I spent hours discovering a workaround answer. That’s the reason the code is stuffed with “debug” calls, btw 😉

Concerning cache administration — the @st.cache_data annotation might be placed on class strategies, however it doesn’t work. I contributed to the corresponding Streamlit discussion board.

There’s a huge distinction between Javascript/Typescript apps and Streamlit apps – web page reloading. Each motion in Streamlit requires a full reload of the web page. Generally it’s useful, however usually it’s not, because it doesn’t carry out. This can be a common limitation of the Streamlit structure, when the whole lot is operating on the Streamlit server, not within the consumer’s browser.

With rising latency between the Streamlit utility and the GoodData, the applying begins behaving weirdly throughout the web page reload – e.g. the identical selectbox is displayed twice – as soon as lively and as soon as inactive.

Customized web page design is sort of exhausting to attain. In my case, as an example, I wished to create a prime bar containing e.g. the workspace picker, however I didn’t discover a answer for it. There’s a corresponding concern opened for years.

Furthermore, a typical self-service analytics utility offers a drag-and-drop expertise. Nevertheless, implementing this function with commonplace Streamlit constructing blocks appears not possible. Thankfully, my colleague efficiently overcame this limitation by implementing a separate React utility. This React utility can simply be built-in with a local Streamlit app. I plan to put in writing concerning the integration in a follow-up article.

Lastly, I used to be unhappy that Gitlab will not be supported. What a pity! My pipeline advantages from Gitlab rather a lot. To check the cloud deployment, I lastly pushed from the native to a Github “clone” repo, and it labored as anticipated. Personally, I might respect it rather a lot if it could be doable to set off the deployment from the pipeline, even earlier than the merge, to create a DEV atmosphere, which can be utilized as part of the code assessment. It might be excellent if the URL to such DEV deployment could possibly be put to the pull request as a remark 😉

So, Ought to You Use Streamlit?

Quick reply — undoubtedly sure.

Lengthy reply — undoubtedly sure, if you’re OK with the restrictions described within the earlier chapter. In any other case, Streamlit (and Python on the whole) offers a lot performance and so many libraries within the space of information analytics/science. Personally, I’m most excited by the concept of blending the demo app I described right here with an embedded Jupyter pocket book(library exists), and offering a combined expertise for knowledge analysts/scientists.

Try Headless BI for Your self

Able to expertise the facility of headless BI? Begin your 30-day free trial right now.



Please enter your comment!
Please enter your name here