Performance is key to the success of your dashboard. Where awesome visualizations increase the functional value of your dashboard, the user experience, very often, is criticized on its performance. Shortly, a bad performing dashboard is a bad dashboard.
Of course Tableau has anticipated on this by providing us tools and methods to avoid query latency such as tableau extracts. But what to do when tableau extracts are not an option?
What is Query Fusion?
Since version 9.0, Tableau has a new technology for database connections called Query Fusion. This technology will look at all of your dashboard queries and tries to eliminate any redundant queries. So where Tableau 8.x and earlier would run a query for each of your dashboard worksheets, Tableau 9.x will handle the queries in a more intelligent manner and eliminate similar queries.
How do I test it?
By using the Tableau Performance Recording you get a great overview of what’s going on in your dashboard and what exact queries are sent to its data sources.
On how to use the Tableau Performance Recording, I gladly refer to my other blog.
How do I enforce Query Fusion?
So now we know what Query Fusion is, we can easily tweak our dashboards to enforce this technology and reduce the number of queries run.
To align the level of detail of different worksheets I can trigger the Query Fusion technology and reduce the number of queries that need to run.
The dashboard:
For this easy dashboard I used a SQL Server data source and it contains 2 worksheets and 1 filter.
Situation A: no Query fusion
If we have a look at the Performance recording to see what queries were executed, this is the result:
As we can see, 2 queries are sent to the SQL data source, one for each of the worksheets.
Both of them are executed and returned their data.
Situation B: Query Fusion applied
The dashboard result looks the same, but let’s have a look at the Performance recording:
Now we see that only 1 query is executed.
Where’s the difference?
No Query Fusion is applied.
Field | Sheet1 |
Sheet2 |
EnglishPromotionName | X |
X |
YEAR(Order Date) | X |
X |
EnglishCategoryName | X |
X |
EnglishSubCategoryName | X |
|
Sum(SalesAmount) | X |
|
Sum(OrderQuantity) | X |
With Query fusion applied
Field | Sheet1 |
Sheet2 |
EnglishPromotionName | X |
X |
YEAR(Order Date) | X |
X |
EnglishCategoryName | X |
X |
EnglishSubCategoryName | X |
X |
Sum(SalesAmount) | X |
|
Sum(OrderQuantity) | X |
Including the EnglishSubCategoryName into the Sheet1 aligns both queries on the same level of detail on both worksheets.
Now the Tableau engine recognizes that both queries are on the same level of detail, and therefore applies the “Query Fusion” and sends only 1 query to the SQL Server data source. Which reduces the traffic on my network and database, and so reduces query time in my dashboard.
Win, win, win...
[/av_textblock]