Inside Tableau Desktop – DebugMenu, Override, GammaRay
December 6, 2016
, , , , , , , ,

screen-shot-2016-12-06-at-09-49-53One thing that I realised in Austin: I’m not a Tableau Desktop guy. I’m struggling sometimes even with the easiest densification calcs and my dashboards generally suck. What can I do? Learn Desktop, deep dive and share my findings. Well, I did and the results are below.

Going back to Austin. I spend two hours in the Hackatlon with a Tableau employee called Paul Howie. While he wrote a clever password manager (LastPass) integration to Tableau Desktop I spent most of my time to understand Desktop’s architecture especially the Qt GUI layer (but at the end of the day I did integrate Sever with LastPass as well). We were both pissed off that we did not make into the top three? Honestly, how many people struggle with copying pass database password to Desktop (a lot) vs integration Amazon Alexa with a 3rd party commercial product (a few). And there is no better motivation than resentment (hear me, Ben Lower?) so I started to plan my ultimate solution to open up Tableau Desktop as platform for the masses.

So this is the first part of my journey to write a web REST API for Tableau Desktop (yes, in Tableau Desktop, yes a Tableau REST API) starting with the basics. At the end of this series you will able to inject a web server into Desktop and call tabdoc commands from a nice web UI. Let’s get started.


Building Faster Dashboards by Understanding Tableau Server
October 25, 2016
, , , , , , ,

small-netflixTwo weeks ago I was lucky enough to visit some of my new and old customers in the sunny Bay Area. To make it more interesting I opted for a short presentation at Netflix to talk about Tableau Server Architecture, Abstract Query Caching and Fusion plus dashboard optimisation. I was super jetlagged but still I enjoyed a lot.

Slides? Here they are: (more…)

Tableau JavaScript API without Embedding
August 29, 2016
, , , , , , , ,

Using D3.js or Chart.js without EmbeddingOne of the biggest myths of Tableau Javascript API is that you cannot use it inside Tableau Server. Some says that you need to embed your workbooks into external sites to leverage Javascript API. Well, don’t believe them since Tableau JS API works flawlessly in Tableau Server Vizportal with any workbook without any with some minor hacks.

Do you need D3.js in your workbook that interacts with the other sheets in the workbook? No issues. Want to re-define some part of the portal like what should happen when users want to export or see underlying data? It’s easy. Add excel export directly to the exporting options? It’s an hour of work. But how? (more…)

Clojure FOR BI PROS Tableau
getData() function in the new Tableau 10 JavaScript API
August 16, 2016
, , , , ,

Tableau getData() functionTableau’s Javascript API evolves fast. In just a few versions we have arrived from the basic embedding to an event based, fully asynchronous API. Maybe the last, missing piece was accessing the summary and underlying data (however most of us used the vud  vizql controller to get the underlying data as featured in our excel downloader for tableau). With Tableau 10 this is also possible in a standard way: you can use two new Sheet level getData functions: getSummaryData() and getUnderlyingData() .

But why is this such a great deal?


My Tableau Zen Master Nominees for 2016-2017
July 27, 2016
, , ,

This year is passing so fast we are already around that time when we nominate those who made exceptional contribution to the Tableau community. Just like last year, when all of my favorites were honoured to be Zen Masters, I’ll introduce you my current nominees.

This year the two guys who I learned the most from, are from Tableau Software, but fortunately there is enough contribution in the scene.

If you’re not familiar with the Zen Master concept you can read more about the zen mastership and nomination process here:

And now my nominees in alphabetical order:


Tableau JavaScript API in Practice: My Chess Game Tutorial
July 25, 2016
, , , , , , , ,

yo-grunt-bowerIn this short tutorial I will go thru the basic steps of creating a project that uses Tableau JavaScript API. My intent is to show non-developers how the typical implementation workflow looks like. Obviously, there are multiple ways to achieve the same goals but the way of implementing new web applications is pretty much the same. Let me share my flow and show how I usually setup a development environment, embed a view and capture parameter and event changes. I will use my chess game as an example. (more…)

Tableau Chess: Interactive Chess game using Tableau JS API
July 22, 2016
, , , , ,

Tableau Chess GameNo doubt that chess is one of my favourite game. It’s more than 15 centuries old but still fresh and enjoyable. Also no doubt that my favourite data visualization tool is Tableau so why not mix these two together? That’s the motivation of my new Tableau game, the Tableau Chess that is running entirely in a Tableau Public workbook using some javascript coffeescript magic. (more…)

Tableau Graceful Restarter Application: PET Restart
July 21, 2016
, , , ,

PET RestartLast week I had the opportunity to show some of our solutions at ISATUG (International Server Administration Tableau User Group). One of my topics was graceful restart, because, yes, I still find it so useful that I want to share this goodie as much as I can. And to share something that actually works in practice I wrote a small plugin for our very-best Palette Enterprise Tabadmin (we call it pet) distribution that works standalone and can do the graceful restart magic what I explained in Graceful Restart Part1 and Part2. (more…)

Reconfiguring Tableau Server without Restart: Graceful Restart (part2)
June 5, 2016
, , , , , ,

DraingGraceful restart, the promise of restarting core components like vizqlserver without impacting the users. As of now there is no official support from Tableau Software to do black magic like this, but yes, you aren’t here for official supported stuff. You are here for actual solutions. Considering that you know how Tableau Server’s configuration template engine works and familiar with the basics of tableau server gateway architecture including its services’ sticky sessions let’s jump into the details.


Reconfiguring Tableau Server without Restart: The Basics (Part1)
May 17, 2016
, , , , , ,

Reload Tableau ConfigurationTableau Software is continuously working on Server’s architecture to make it more robust, modern and enterprise grade. However, it still has its design heritage and technical dept that make some tasks too complex or uncomfortable. One of these is the way how minor and major configuration changes can be applied. Even if we made tiny changes like enabling repository’s readonly user or allowing peeps to access systeminfo.xml we do need a complete server restart.

Currently, the limitations of the out-of-the-box online reload are:

  • tabadmin service architecture (including tabspawn) and its current feature set
  • configuration template/file management
  • windows, as operating system (lack of posix signals)
  • unsophisticated traffic management between apache2 and tomcat services
  • reload hooks not implemented in webapps (like no support for JNI re-initalization)

Don’t worry if some of these points are not clear, we will discuss all of them in details sooner or later. In advance, there is a rumour that Tableau is working on Linux version of the Server. That will require a new tabadmin model as well as additional options to reload service configuration without restart using HUP signals in apache2 or redis for instance. Thus, when these changes happen my current post might be outdated I think at the moment it makes sense and helps to understand how Server operates.