Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
Welcome
Advice from IBM Watson Health on Tuning Tableau Dashboards for Fast Load Times and Rapid Performance
# T C 1 8
Brad Wheeler - VP, Analytics & Outcomes, IBM Watson Health
Eman Alvani - Tableau Analyst, IBM Watson Health
AgendaA Brief Background of our Tableau Story
Why Performance Matters
General Guidelines
Using Performance Recorder
Dashboard Tuning Examples
Monitoring Dashboard Performance
A Brief Background
17 years of healthcare technology experience
2000 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18
Started at OmniSYS in Marketing during college
BBA in Marketing and MBA from Texas A&M -
Commerce
Transitioned to Software Development
Created Business Intelligence Department as
Director, Business Intelligence
Director, Business Operations
Sr. Director, Software Development
VP, Implementations & Analytics
VP, Analytics & Outcomes
10+ years of business analysis experience
2006 07 08 09 10 11 12 13 14 15 16 17 18
BA from Southern Methodist University
Began working as associate at GS
Sr. Financial Analyst, FP&A
Business Data Analyst at Dimont; CRM Reporting
Lead
Tableau Analyst
MBA from Pepperdine University
Our Legacy Environment
SQL Server data warehouse consolidates
multiple production databases into single source for reporting
Excel reports driven by complex SQL data
aggregations and Excel macros
Individual reports generated for each client
and manually uploaded to web portal
Our New Environment – Powered by Tableau
Online dashboards powered by Tableau
Clients login to web portal for access to data refreshed nightly
New dashboards provide many more insights and
greater level of detail
Before & After Report Example
Individual filters used for each table and chart in the dashboard
User clicks to view terminology stored in separate table
Very heavy table and text usage. Lack of “headline” or key takeaway
Before & After Report Example
Visual heavy representation of all the
same data shown in original version
Filters apply across all dashboard
elements and are hidden by default
“Headlines” and bold
callouts call attention to
key takeaways
Terminology and field definitions
stored in tooltips
After One Year of Tableau
95% of all client reports are automated and delivered via Tableau
Clients have near real-time access to their data, compared to monthly static reports
Dedicated client reporting staffing reduced from 13 to 3, freeing team up to work on
more meaningful tasks across Watson Health
A typical client user has access to 30-40 dashboards
Fast loading dashboards are critical, especially when dealing with large data
sets!
5.3 second average dashboard load time
93% of all dashboards load in under 10 seconds
A Few General Performance Guidelines
Extracts generally perform 30% – 40% faster than live connections so use them whenever possible
Count Distinct functions are notoriously slow and a common cause for slow performance
Using calculated fields in filters can cause slow performance so filter on native fields when possible
Many filters with “Show Relevant Values Only” can cause slow dashboard interactions
When using Set filters, the In/Out option is usually more efficient that the Members in Set option
Watch out for too many fields in the Details shelf or ATTR() fields in the tooltip
Reducing the number of queries required to load a dashboard can often help improve performance
Most importantly
Performance tuning is often more of an art than a science and requires curiosity, creativity, experimentation, and patience
Why Performance Matters
Using Performance Recorder
Accessing Performance RecorderFrom Tableau Desktop: Help -> Settings and Performance -> Start Performance Recording
Reading Performance Recorder ResultsAfter stopping the recording a new Tableau workbook will open with the results
Dashboard events sorted chronologically
Dashboard events sorted by time
Clicking an event will show the query
The Results Workbook is EditableThe performance recording results are returned in a Tableau workbook that is fully editable, so you may customize to help understand the data
Original Customized
Dashboard Tuning Example 1Clinical Medical Conditions Overview
The Starting Point
This dashboard examines medical condition, service categories, and totals by state in four broad sections:
Key Metrics
Top conditions (bar chart)
Filled map by state
Service Category (tree map)
Parameters allow users to set the number of top conditions to show and toggle between various metrics
Original Load Time: 49 seconds
Original Performance Recording ResultsRunning the Performance Recorder we can see that the Top Conditions sheet is the “long pole in the tent” so we’ll start there
Testing the FiltersJust as a test, let’s delete all the filters to see if that’s the problem
Original filters on Top Conditions Sheet
We’ll keep the action filter, Top N, and Clinical Condition to force a refresh
Filters Are Not the ProblemRemoving all filters had minimal effect so we’ll undo that change
Removing all filters only decreased the
load time by 2 seconds. They’re not the
problem so we can add them back
Filters Are Not the ProblemRemoving all filters had minimal effect so we’ll undo that change
Removing all filters only decreased the
load time by 2 seconds. They’re not the
problem so we can add them back
A Closer Look at the Detail ShelfHaving calculated fields in the Detail shelf can often cause slow performance; let’s see what removing c_sort Measure Name does
A Significant Reduction in Load TimeRemoving that one field from the detail reduced the load time by 33%!
Load time dropped from 49
seconds to 34
Field Required for TitleBut now that the field is gone, we get “None” in the chart title
Alternative: New SheetWe can solve that by making a new sheet just for the title
Putting it Together on the DashboardWe’ll hide the original sheet title and replace it with the newly created “Title Sheet”
Title Sheet
Original Sheet
Calculated Field Being Used as a FilterLet’s take a closer look at this Top N filter
Combination of Two FieldsThis filter is using a combination of two calculations to limit our results to top N
Alternative: Using a SetWe can achieve the same result by using a Set
Set the filter to “In” the Top
Clinical Conditions Set. All
filters must be in context
when using sets
Checking the ResultsOur results are exactly the same when using a Set filter compared to the calculated field
Using Set filter
Using original filter
Checking the ResultsUsing the Set filter reduced the query time for Top Locations to 19 seconds!
After these two changes, Top Locations is no
longer the longest running query and our overall
load time decreased to 25 seconds
Let’s move on to Geo next
Another Calculated Field in the Detail ShelfWe have another calculated field in the Detail shelf.
Let’s take the same approach as the Top Locations and create a new title sheet
Checking the ResultsMoving the c_Metric_Name field from the Geo Detail shelf to its own title sheet reduced the Geo load time by 58%
Geo load time dropped
from 24 seconds to 10
Still Room for Improvement
Let’s see if there’s something we can do to decrease the Top Conditions query time
Top Conditions running at
nearly 18 seconds
A Calculated Field in the Text FieldAfter some experimenting, the C_Cost Label field stands out as an improvement opportunity
A Closer Look at the CalculationThis field uses a calculated field whose sole purpose is to show or hide a “$” symbol in the chart label
An Alternative – Two New Fields with Default Formatting
After trying multiple options, it was discovered that the most effective way to achieve this functionality for this workbook was to 1) create two “label” fields, 2) set default formatting for each, and 3) add them both to the label
Step 1 – create two “label” fields and set default formatting for each
An Alternative – Two New Fields with Default Formatting
After trying multiple options, it was discovered that the most effective way to achieve this functionality for this workbook was to 1) create two “label” fields, 2) set default formatting for each, and 3) add them both to the label
Step 2 – set default formatting for each field
An Alternative – Two New Fields with Default Formatting
After trying multiple options, it was discovered that the most effective way to achieve this functionality for this workbook was to 1) create two “label” fields, 2) set default formatting for each, and 3) add them both to the label
Step 3 – add both fields to the data label
Checking the ResultsUsing this method still provides the “$” when needed and reduces the query time by about 6 seconds
Dashboard Load Time Comparison Total run time decreased from 49 seconds to 12!
Original – 49 seconds Revised - 12 seconds
A Review of our ChangesAll changes are “behind the scenes” that are invisible to the end user
76% reduction in load time compared to
original view
Dashboard Tuning Example 2Outreach Modality Overview
The Starting PointOutreach Modality Overview dashboard showing count and rates by communication modality
Original load time: 135 seconds
Update 1: Default SortingSorting requires running an extra query to determine the sort order for a chart
Sorting queries are usually fast but in this instance it’s taking 33 seconds
This Chart is Being Sorted by Patient Response Rate
Let’s Take a Closer Look at that FieldPatient Response Rate is calculated by comparing two COUNT DISTINCT fields
What if We Don’t Sort by Default?Clearing the default sort makes very little difference in the presentation since there are so few rows
Sorted (original) Non-sorted
30 Seconds Saved
No extra query is being ran to determine sort order, saving approximately 33 seconds
No extra query being ran
Update 2: Hiding vs. Filtering
Each of these sheets are taking approximately 90 seconds to load
Let’s take a closer look to see what could be causing the slow performance
Calculated Field Filtering Set on Each SheetEach view is being filtered by a calculated field
A Closer Look at the Calculated FieldThis is a combination of fairly complex Level-of-Detail calculations and string comparisons
Removing the Filter Removing the filter reduces the query execution time by 14 seconds
Original view with filter – 96 seconds
Updated view without filter – 82 seconds
Hiding vs. FilteringRather than filtering our data, we can hide the columns we don’t need to achieve the same view
Update 3 – Editing Calculated FieldWe are using a complex calculated field to concatenate modalities into a single column
This calculation is the main culprit behind our slow performance
Editing the FormulaWe can revise the formula to use math to assign a numerical value to each modality combination
Now we get discrete numbers returned rather than string fields
Results with the Updated CalculationThis change reduces our query run time from 82 seconds to 27!
Changing the Numbers to TextWe can edit the aliases to assign custom values to each of the numerical outcomes
Revisions Compared to OriginalOur revised dashboard is nearly identical to the original, with the only change being the sorting on the top chart
Original Revised
Dashboard Load Time Comparison Total run time decreased from 135 seconds to 42!
Original – 135 seconds Revised - 42 seconds
A Review of our Changes
Nearly 70% reduction in load time compared
to original view
Dashboard Tuning Example 3Operational Scorecard
The Starting PointThis dashboard examines operational metrics at the system level (top section) and by facility (middle and bottom sections)
Original load time: 21 seconds
Original Performance Recording ResultsRunning the Performance Recorder we can see that all the queries are returning in 7 seconds or less, but there are LOTS of them
Live Connection vs. Data ExtractThe original dashboard used a live database connection
Live connections are normally slower than extracts and don’t take full advantage of Tableau’s extract engine
Creating a Tableau data extract creates a local data file. This file can be embedded directly in the workbook or uploaded to Tableau server
Checking the ResultsTotal load time dropped by 7.8 seconds to a total of 13.2 seconds
Lots of queries (32!) still being ran
Reducing the number of queries will be the key for optimal performance
A Closer Look at this Dashboard Layout
The original layout requires 25 sheets
18 sheets required just for the top section
(with at least 1 query required per sheet)
Each measure in the top section requires
3 sheets due to layout
1 for each bar chart
1 for each “Your Performance” metric
(since it appears on the right of the
bar)
1 for each axis label (due to alignment
on bottom left of each bar chart)
An Alternative Dashboard Design Option
This option requires only 6 sheets
By charting the top bar charts on Index
score, we’ve normalized the axis for all
measures, allowing us to chart all measures
in a single chart
Added benefit of having the benchmark be in
the same position across all measures
We can also eliminate the two extra title
sheets at the bottom of the screen and just
use the existing chart titles
This simpler layout makes maintenance and
updates much easier in the long run
A Closer Look at the Top Section
Original version charted on actual metric value and required a sheet for each metric due to varying scales per metric
Revised version compares actual value to benchmark value to calculate an index value,
normalizing the scale for all metrics
Checking the Results
Revised layout reduced load
time by an additional 52%
Total number of queries being
ran dropped from 32 to 11
Total load time dropped
another 6.3 seconds to a total
of 6.9 seconds
Simplifying Filter LogicReplaced calculated field filters with more basic filters, achieving the same result with less computing (example below)
Revisions Compared to Original
original
revised
A Review of Our Changes
76% reduction in load time compared to
original view
Monitoring Dashboard Performance
Default Tableau Server Performance Reports
Status -> Stats for Load Times
Creating Your Own Dashboards
*Requires access to Tableau Postgres database
Creating Your Own Dashboards
*Requires access to Tableau Postgres database
Creating Your Own Dashboards
*Requires access to Tableau Postgres database
Works Well for Live Monitoring
*Requires access to Tableau Postgres database
Works Well for Live Monitoring
*Requires access to Tableau Postgres database
Works Well for Live Monitoring
*Requires access to Tableau Postgres database
Setting up Alerts
*Requires access to Tableau Postgres database
Please complete the
session survey from the
Session Details screen
in your TC18 app
Thank you!
#TC18
Brad Wheeler903-413-7404
https://www.linkedin.com/in/brad-wheeler-2993313/
https://public.tableau.com/profile/brad.wheeler#!/
Eman Alvani310-739-7939
www.linkedin.com/in/ealvani
https://public.tableau.com/profile/eman.alvani#!/