I worked over 20 years as a numerical modeler and scientific computer programmer. I routinely hammered all kinds of computers from PC’s to massively parallel supercomputers. I miss doing that type of work.
With that in mind, tonight I decided to throw a serious computational challenge at Tableau version 9.1 to see how it performs in rendering 3D data.
The Work I Used to Do
During this 20 year period of my career, I specialized in cleaning up the environment. For over 10 years, I used groundwater flow and transport numerical models to simulate and optimize the remediation of contaminated groundwater in Western Cape Cod. I routinely used graphical programs to animate the transient groundwater contaminant histories as simulated in the models.
In this article, I show how Tableau can be used to slice and dice 3D geologic data that originated from Cape Cod. Compared to what I used to do, this example is fairly easy because there is only one time step to animate instead of a 50-year history of simulation results.
The data to be used for this example represents 3D hydraulic conductivity data. Hydraulic conductivity (K) is a measure of the ability of the rock and soil to transmit water. The higher the hydraulic conductivity, the easier it is for water to flow through the geologic media. Hydraulic conductivities in the 300+ ft/day range are high for porous media.
Figure 1 shows the data structure used for this example. This data represents a variable-spacing, finite-difference grid of the size (316x352x30). As shown at the bottom of the table, there are over 3.14M active finite-difference cells in this model. This number of finite-difference cells is certainly large enough to test the performance of Tableau’s graphical rendering speed.
Figure 2 shows the Alteryx workflow that was used to create this data set. The primary purpose of this workflow was to install row and column counters for the finite-difference grid (I already had layer number) so that I could use these integers on the pages shelf to slice through the data.
Alterxy read the original file and created the results in under 30 seconds. I still can’t figure out how Alteryx is consistently so damn fast. I’m getting set to design some workflows that put Alteryx under a serious computational load.
The workflow also is used to produce a summary of the hydrostratigraphic information included in the model. The vertical distribution of the hydrostratigraphic units is shown in Figure 3.
Putting Tableau to the Test
I wanted to slap Tableau version 9.1 upside the head a few times (aren’t Beta testers supposed to break things?). So I designed a dashboard to render the 3D data in three panels.
In each panel, I use the page shelf to render the views throughout the model. Although the page command complains if you drop more than 100 items on it, I dropped 316 rows and 352 columns into the vertical cross-sectional view panels.
This design means that each panel is animating 3.14 M marks simultaneously, or on the order of 10M data points. I do believe that handling this much data isn’t a trivial task. Figure 4 shows a still image of the dashboard.
Creating the 3D Tableau Animation
The video shown below goes into some detail of what this work represents. Although the video isn’t totally comprehensive, it gives you an idea of what this exercise represents. After a few minutes of project background, you will see Tableau in action as it renders the 3D field.
The Full 3D Animation Without Commentary
Vertical Cross-Section Animations
Shown below are the two vertical cross-sectional views extended to full screen to show the hydrostratigraphic detail present in the model. One view is looking east (northing extended) and one is looking to the north (easting extended). Each of these takes about 1:02 to 1:10 to render on the fastest page speed. That means tableau is rendering about 45,000 marks per second. Each cross-sectional slice has about 9 to 10,000 marks per frame.
Plan View Animation
Here is an interesting result. In plan view, there are over 104,000 marks per frame. One the fastest page rendering setting, Tableau skips over individual layers – it shows about every third layer. In other words, the graphical rendering is not fast enough to properly display the data, or I have no idea of what the real cause is! That is the first animation. In the second animation, which was made on the second page speed setting, every layer is created properly.
I tried some optimization of this data. I let Alteryx create the *.tde. I let Tableau create the *.tde. I also tried a setting to aggregate data for visible dimensions when creating the extract. There was no improvement achieved.
One day I’m really going to test Tableau by (1) animating the transient history of contaminant transport and (2) using it to solve a partial differential equation using finite-differences. That should be fun. Thanks for reading.