2020-06-16 Drilldown
Bokeh is based on events, and if you wanted to link your various plots in Bokeh, you'd write callbacks that subscribe to Bokeh events. This is very general and can handle linked brushing, drilldown, and just about any other GUI interactions you might come up with. But it's difficult to reason about and not compositional; complex dashboards end up tightly bound together by their callback graph so that each new dashboard has to be built up from scratch.
HoloViews abstracts the Bokeh event system into streams, which can have a semantic content (being "about the data"). HoloViews streams are compositional and reactive, which makes it much simpler to connect them up as you build a complex system, each bit taking care of its own business. The streams are Python (Parameterized) objects that can be accessed and queried independently of the event/callback system, allowing you to develop and maintain separate parts of your application separately, and port bits of functionality from one dashboard to another. But it still requires reasoning about streams of data and how they are connected up, using a mental model that's far from where most data-science users are starting. Ideally, interactions between plots would be expressed as relationships between datasets and dimensions, not connecting streams of values from sources to sinks.
link_selections now lets a user set up various streams automatically, traversing a set of plots and finding all related dimensions and shared datasets, then creating streams that connect all of them to a shared selection object and also adding extra selected plots overlaid on the main plots. For the special case of a shared selection object, this approach allows users to achieve quite sophisticated ways of exploring multidimensional datasets too large to be conveyed in a single plot, without having to learn about events or even streams. However, at present only a single "cross-filter" configuration is supported: each plot visualizes all the data it covers, and then also has an overlaid selection of a subset of what is in the main plot.
Can we do the same for drilldown, where there is no underlying main plot, but which in many ways otherwise similar to link_selections? In a drilldown, the user interacts in some way with one plot, selecting one (or sometimes multiple) item(s) that determine what is shown in another separate plot. A canonical example is to select some aggregated or reduced value in a main plot (e.g. the current value of X for a county or a company or some other entity), then the drilldown plot shows a non-aggregated or unreduced plot (e.g. a timeseries of value X, a distribution of value X, or the same for some other different value Y).
GUI tools do provide some support for drilldowns, but it is not clear how relevant they are to what we are trying to do here:
https://docs.devexpress.com/Dashboard/117061/web-dashboard/create-dashboards-on-the-web/interactivity/drill-down
https://community.tableau.com/thread/153220, https://help.tableau.com/current/pro/desktop/en-us/actions_filter.htm