Use the Right Tool for the Job

Take advantage of the convergence and integration of visualization tools

Christopher DeMartini
Nightingale
8 min readMay 1, 2020

--

In Data Visualization today, we see an ever-growing ability to extend and interact with and between our preferred tools. One such trend in our software ecosystem was described by Elijah Meeks in “3rd Wave Data Visualization.” Whether our tool of choice is R, Tableau, d3.js or another of the multitude of tools out there, what you can do in each of these tools seems to be growing, integrating and overlapping more with each coming day. I am in the school of thought that this is a good thing. This overlap helps to make business dashboards more consumable, custom data stories more attainable and ultimately enables a broader range of users to converge on (hopefully) good (or great!) data visualization.

This leads me to one of my current missions for the Data Visualization (and Tableau) community: enabling data visualization practitioners to use the right tool for the job (at least with respect to some of my favorite tools). What do I mean by this? I refer to the multitude of open source solutions that already exist, which, can help solve some challenges, or complex workarounds, we may face in our preferred software tools.

This journey of mine pushed me towards enabling significant integration and cross capabilities between some of my favorite tools, Tableau, React and d3.js. These integrations are something my good friend Tamas Foldi and I have been working on and pushing within the Tableau ecosystem for some time.

Picture of the Vizception project Tamas and Chris did which demonstrates layering Tableau, in D3, in Tableau.
Image of the Vizception project (Tableau, in D3, in Tableau), 2016

I still enjoy our made-up word “Vizception” for this layering of tools, within tools, within tools, and so on. As an example, here is an image from Tamas’s and my 2016 project which demonstrates the technical ability to layer a Tableau view within a d3.js force layout within a Tableau Dashboard. Almost two years later Tableau released its Extension API as part of their 2018.2 release.

Frequent feature releases across many tools have made it increasingly easier, more approved and officially supported to do this type of tool layering and integration. Obviously, I am biased and partial to Tableau, thus the focus on it for today, but you will also see similar types of capabilities being implemented across a number of other large tools in the Business Intelligence (BI) space.

For some additional context, here is another anecdote from my experience which will hopefully demonstrate the value we can achieve with this increased tool integration.

One of my most popular Tableau blogs and visualizations is this one of my own family tree, shown here and found on my Tableau Public profile.

An image of Chris’ family tree, ancestor view.
My ancestor family tree as of 2015, thanks for all the research Mom!

I was (and still am) very proud of this project, which, enabled my mom to more easily navigate her research into our family genealogy. This project was super fun for me, but also extremely challenging and time consuming to do within the Tableau ecosystem back then, as you can see in my detailed blog published on DataBlick. TL;DR, I ended up pre-processing every permutation of my family tree, each family member’s respective ancestor and descendant trees, through a recursive algorithm that I pieced together. This allowed me to enable the drill through functions and layout that you can still experience in the view today.

What’s changed since this original post? What does this have to do with using the “right tool for the job”? Well, we can now bridge the gap of not having hierarchy layouts or an easy way to use recursion out of the box in Tableau. I only know of one person, Noah Salvaterra, who actually built recursion in Tableau. It is quite a complex and incredible piece of work within Tableau, but recursion is far easier to implement in JavaScript.

With respect to my anecdote above, there are a number of tools out there which ultimately use Mike Bostock’s incredible d3.js functionality to build hierarchical data visualization. One of my favorites in that space is Semiotic, by Elijah Meeks. So instead of trying to figure out how to show the Tableau user how to recursively pre-process hundreds or thousands of tree layouts and then use advanced data densification and layering techniques within Tableau, we can call an audible, and provide the user with a direct capability to map their hierarchical data to the hierarchy visualization of their choice.

This takes work that originally took me weeks, maybe even months and makes it something that can be accomplished in less than five minutes with no code and/or advanced Tableau formulas needed by the user. This is illustrated further by the GIF below.

GIF of Semiotic Hierarchy Extension for Tableau

One thing I think we do need to keep in mind when using tools within tools, like the example above showing Semiotic within Tableau, is the impact this could potentially have on the experience of our end users. We don’t want our end user to feel as if they abruptly jumped from one software to another unexpectedly (even though they did). Trying to keep this in mind, one goal for my Tableau integrations has been to try and meet the Tableau user where they are. Striving to have the Tableau user feel as if these extended functionalities are part of Tableau’s feature functionality.

Behind the scenes the software is still separate, if we want new or additional functionality in our extensions, we have to request this from the people or teams that are building them. Sometimes this may also lead to vendors like Tableau needing to extend their integration capabilities as well. The release of Tableau’s Extensions API, and similar features in other BI tools, has really opened some doors for me, and other developers like Tamas Foldi, Merlijn Buit and many others.

In my opinion, the next big jump specifically for Tableau, will be when extensions are more widely allowed, utilized and shared via Tableau Public. This step will make it incredibly easier for extension developers to collaborate, build, share and improve on their work. These contributions are driving this one form of convergence in data visualization tools that is happening today.

While the content and examples above are from my experience with Tableau, the integrations and layering of tools taking place today go far beyond Tableau and D3. Here is a recent excerpt from a Nightingale article that discusses the use case of JavaScript data visualization tools in R.

“I think the future of visualization in R is fundamentally and inextricably tied to visualization in JavaScript. And it’s really about how do we make that connection between all of the really beautiful visualizations in JavaScript and the interactivity allowed by JavaScript, and really make a strong seamless connection to R so you can get the best of both worlds”.

Hadley Wickham, chief scientist at RStudio

This does make me wonder whether “3rd Wave Data Visualization” is another way to say we are moving towards the ability to leverage JavaScript everywhere. For example, at this point in time, we can already call on JavaScript within Tableau, MicroStrategy, Power BI, R, Jupyter Notebooks and I am sure many others …

As of this post, I feature a number of Tableau Extensions (in addition to the Semiotic Hierarchy one shown above) which are open source and available on either the Tableau Extensions Gallery or Community Portal including:

Demonstration image of kepler.gl library being leveraged in Tableau.
Kepler.gl in Tableau — credit to Shan He

Kepler.gl is described by Shan He as a powerful open source geospatial analysis tool for large-scale data sets. This extension enables a Tableau Desktop or Server user to leverage Kepler.gl directly within Tableau. You can learn more about the extension here.

Demonstration image of react-annotation library being layered over Tableau.
React Annotation in Tableau — credit to Susie Lu

React Annotation, by Susie Lu, is a robust open source library which makes building and incorporating annotations into your work much simpler. This extension enables a Tableau Desktop or Server user to easily add one or more annotation layers to their Tableau Dashboards. You can learn more about the extension here.

Demonstration image of d3.projections integrated with Tableau.
d3.js Map Projections in Tableau, credits noted in image

D3.js provides an extensive set of open source map projections. This extension leverages d3 along with some shared techniques to enable a Tableau Desktop or Server user to go beyond the Web Mercator map projection. You can learn more about this extension on Tableau’s Community Portal.

All of these extensions are built on top of open source software and in most cases the creators of those libraries helped me with the Tableau integration, a quick thanks to each of them for their willingness to help me out. I also have to credit Tamas Foldi and Abraham Szilagyi with respect to their help in building the Tableau integration for these extensions.

We are spoiled with the multitude tools that we have at our fingertips today. One way we can pay this forward is by enabling these tools to more users across our software ecosystems. I hope to further improve these open source extensions and continue to build more as opportunities come up and time allows. As long as this is something that can provide such streamlined capabilities to data visualization developers, I hope you agree with me that it is worth the effort.

--

--