This post will be relatively short. There were a few announcements at Tableau Conference-ish over the first couple days that are a huge deal for Tableau Desktop developers. These new feature announcements are certainly not exhaustive but are in my opinion, the highest impact.
Big map changes
Unlimited map layers
This means you aren’t limited to a single analysis that depends on size and/or color of map marks. This really opens up the number of options developers have in creating impactful and insightful maps.
This new feature might raise the question; how can you have multiple layers and a good user experience due to Tableau’s standard interactivity on worksheet?
You can now disable selections on maps
No more inadvertent highlighting and unwanted interactivity. Turn off selections in maps in order to provide a better user experience. This will greatly improve mobile UX due to the tapping and scrolling nature of mobile devices. This will avoid some common frustrations associated with the maps UX.
Reorder layers
With multiple layers, you’ll want to be able to control which one appears on the top. Tableau will be providing an easy way to drag and reorder map layers so that the desired layer order can be achieved.
Not map related, but probably the biggest news for beginner and intermediate developers: Tableau Desktop will write your LoDs
You read that right! If you’ve had trouble building level of detail calculations, Tableau is going to help out with that. You’ll be able to select dimensions and measures by holding control, right click, and click on “Create Level of Detail Calculation”. For more complex LOD calculations, this won’t be too big of a deal. But for people struggling to build these calculations, this functionality might bridge the gap between knowing about LODs and understanding LODs.
Looking to speed up your dashboard development and add a personal touch to your dashboards? I’ve got a quick and easy tip for you. Make your own custom color palettes! Tableau Desktop allows you to modify the preferences file (found under My Tableau Repository and named Preferences.tps). You can open this file and modify its code to set up your own color palettes. Check out Tableau’s great documentation on how to set up these palettes here: https://help.tableau.com/current/pro/desktop/en-us/formatting_create_custom_colors.htm
You can set up categorical, sequential, and diverging palettes to fit any type of dimension or measure you’re looking to add a specific color to.
This will take forever to set up a custom palette, how can I do this faster?
I’m glad you asked! If you have your color palette defined, skip this section. Otherwise, check out two awesome tools that help you generate Tableau tps files with custom palettes. These generators can take images, have predefined palettes, or allow you to build the palette one by one. Just keep in mind, there is a limit of 20 colors on a palette as of 2020.3.
All you’ve gotta do is download the generated tps file, replace your existing one in your “My Tableau Repository” (just make sure you don’t have any existing customizations in there).
Bonus tip: Set the default palette to dimensions or measures in the data pane.
For both dimensions and measures, you can set the default colors for each field so you don’t have to reconfigure it on each worksheet. By right-clicking on the field, you can go to the default properties and select “Color”. Check out the short GIF I created below to see that process.
I hope this makes your development a little more efficient and enjoyable. If you enjoy the content, subscribe below to get notifications of new blog posts. I might do a giveaway soon, who knows…
Processing…
Success! You're on the list.
Whoops! There was an error and we couldn't process your subscription. Please reload the page and try again.
You might’ve come across my previous post about fixing empty layout containers in Tableau. That post was about fixing a specific bug when everything else is configured correctly. This post is about a few common configuration issues that are usually the issue (before encountering the bug I’ve previously discussed). Go through these bullet points to make sure they’re configured correctly before trying other solutions.
The Problem
You have a horizontal or vertical layout container. But the elements don’t automatically size correctly. Either a gap is left at the end of the container, worksheets don’t swap like they’re supposed to, or the worksheets don’t fill up the container.
The Solutions
1. Make sure the elements aren’t set to Fixed Width or Fixed Height
By activating the objects inside the container, you can see if the width or height is fixed. The little push-pin will be filled in white if width or height is fixed, or have no fill if it’s a dynamic width or height.
Something to keep in mind: You might not see the Fix Width or Fix Height option depending on your dashboard layout, and settings for the container. If you have “Distribute Contents Evenly” checked, these won’t show up. If your container is nested in other Tiled containers or multiple other containers, they might not show up either.
2. Activate each sheet in the container and set the sizing to Entire View, Fit Width (if a horizontal container), or Fit Height (if a vertical container)
Make sure each worksheet object is set to fit to the appropriate dynamic option. There are two places you can do this on the dashboard.
In the dropdown menu of the worksheet object:
Or in the bar at the top of the window:
The following points are relevant if you’re doing a sheet swap
3. Hide all the titles of the worksheets
Right click all of the sheet titles in the container and hide them. If you need them to be there, create a text box with dynamic text based on which sheet is visible.
4. Make sure there is a discrete field on either your rows or columns for the sheets involved in the swap
Go back to the individual worksheets that are in your container. Make sure they have a discrete pill on rows or columns. This should be a static field with a single value and should be set as discrete. I use a static field with the value MIN(0) set as discrete. Then right click the field and deselect “Show Headers”. This will make the field disappear from the view.
Whoops! There was an error and we couldn't process your subscription. Please reload the page and try again.
If none of these options work for you, feel free to check out the older post that goes through the bug fix. And if that doesn’t work, reach out to me and I’d be happy to help you troubleshoot!
Did you find this content useful? Join the email list to get notifications of new posts.
Processing…
Success! You're on the list.
Whoops! There was an error and we couldn't process your subscription. Please reload the page and try again.
If you’ve ever developed KPIs or BANs on a Tableau dashboard, there’s a chance you’ve also implemented color indicators for those numbers. Green being good, red being bad, and gray being neutral. This color indicator might also exist in your bar charts to show YoY changes or whether a goal was met for a specific metric. These indicator calculated fields can also be used to assign shapes like directional arrows, emojis, or any other shape. Whatever the case, there’s something I see beginners doing relatively frequently (and even some more experienced developers) that is additional work for no reason.
Using the Superstore data, it’s usually something like this:
Old Way to Color Things
IF SUM([Sales]) - LOOKUP(SUM([Sales]),-1) > 0 THEN "Increase"
ELSEIF SUM([Sales]) - LOOKUP(SUM([Sales]),-1) < 0 THEN "Decrease"
ELSE "Neutral"
END
or
IF SUM([Sales]) - LOOKUP(SUM([Sales]),-1) > 0 THEN TRUE
ELSEIF SUM([Sales]) - LOOKUP(SUM([Sales]),-1) < 0 THEN FALSE
ELSE NULL
END
The first version should be avoided because it uses strings in the calculated field. Strings perform slower than integers and booleans and will start impacting dashboard performance the more complex your data and dashboards get.
The second version isn’t too bad (and the equivalent using integers as the resulting values), but still makes calculations more verbose than necessary.
So how you should you achieve this desired indicator functionality?
Using the SIGN function you can achieve the same results with a single line.
New Way to Color Things
IF ZN(SIGN(SUM([Sales]) - LOOKUP(SUM([Sales]),-1)))
It automatically assigns a -1 for negative values, 0 for zero values, 1 for positive values and null for records that don’t evaluate. You can wrap the SIGN function around your entire calculation. On top of this, I would suggest wrapping that SIGN function with a ZN function like in the example. The ZN function will return the expression if it is not null, otherwise it returns a 0 value. Essentially this will eliminate null values from your SIGN function. Sometimes the null is desirable (you want to color specific marks that don’t evaluate) and sometimes you just want to color all null marks the same as zero.
The dashboard below is best viewed on a PC or tablet, but there is a mobile view for it as well.
What are the drawbacks?
Since you’re using a whole number as a data type, you can’t easily edit the aliases to make a human-readable string. Obviously making a human-readable string brings us back to the string data type which could negatively impact performance on large data sets. You could use the SIGN function calculated field in another calculated field to represent -1, 0, and 1 as your desired string. This isn’t the best to do either because now you’re nesting calculations and making the workbook a little more complex for the poor soul who inherits it in the future (very likely your future self).
One way to get around this is to just make a dummy legend that shows the color of the SIGN calculated field and what it pertains to (increase, decrease, steady). This won’t give a text value in the tooltip unfortunately, but that shouldn’t be necessary.
TL;DR
Use the SIGN function instead of IF ELSEIF functions to significantly reduce your calculation length. Wrap it with ZN if you only want three indicators (-1, 0, 1) or don’t wrap it with a ZN function if you want four indicators (-1, 0, 1, and NULL).
Pros: Simpler and less verbose calculated field, whole number data type for better performance than strings
Cons: Results in whole number so can’t directly alias
I hope this makes your development a little more efficient and enjoyable. If you enjoy the content, subscribe below to get notifications of new blog posts. I might do a giveaway soon, who knows…
Processing…
Success! You're on the list.
Whoops! There was an error and we couldn't process your subscription. Please reload the page and try again.
There are hundreds of blog posts, articles, and checklists about improving Tableau dashboard performance. I personally don’t like reading through lengthy posts, watching long videos, or drilling through checklists just to have a list of 100 things to check. So I’ve compiled the five most impactful performance tips to make your dashboards run faster instantly.
1. Change data sources from Live to Extract
If you don’t absolutely have to use a live connection, don’t. Tableau’s Hyper is a best-in-class data engine, use it. You’ll see faster dashboards instantly in 90% of cases.
2. Minimize the number of marks on your dashboard
500,000 marks on your map of the United States is going to take a few seconds. 500,000 marks that use calculated fields is going to take even longer. Only show the most relevant data and know what to exclude. This means not dragging every dimension in your data onto the canvas.
3. Simplify your calculations, remove or reduce nested calculations
If you’re referencing a calculated field in a calculated field, your performance will degrade. Once your data gets to a certain size and your 5 nested calculations deep, you can kiss your UX ratings goodbye. If you can, try to reference terminal fields in a calculation, even if that means making one big calculation. Just pay attention to your aggregations and order of operations.
Use REGEXP for string calculations if you can. By doing this you avoid Tableau having to do something like a CONTAINS calculation multiple times.
If you can’t use REGEXP formulas, use CASE expressions rather than massive IF statements with a bunch of ORs.
4. Reduce the number of worksheets on your dashboard
Either split off your worksheets into different dashboards, or find a different way to communicate your message with less worksheets. The more marks and worksheets on your dashboard, the more processing Tableau has to do. Aim for 5 or less as a rule of thumb.
5. Use filters, not too much, and don’t set them all to “relevant values”
Ok, so this one is probably the most difficult for me to follow when building. But it’s easy to remove filters for a quick performance boost. If the filter doesn’t absolutely need to be there, get rid of it. If it doesn’t have to be relevant, don’t make it “relevant values”. It just adds to what Tableau has to calculate and render, which adds precious seconds to load time (especially with large data sets).
I hope this gave you a quick win in making your dashboards faster. Have any other really quick tips to make Tableau faster? Feel free to comment them below, I’d love to learn.
Enjoy the content? Subscribe below to get notifications of new blog posts. I might do a giveaway soon, who knows…
Recently, I published a dashboard that took a broad look at PPP loan data. Over the past few weeks, I looked deeper into that data set in order to pull more interesting findings from it.
Before you take a look, here are the most significant highlights in my opinion:
Spelling mistakes were prominent. Out of some of the 9 largest cities in the USA, there were more than 100 spelling variations.
About 4000 investment-related firms took out loans totaling between 1 and 3 billion dollars. This is interesting because investment fees and activities were at record highs during lockdowns.
The top 10 industries by loan count were heavily in-person industries, indicating that loans were distributed largely to businesses who needed them most.
Recently I made a post on the 5 most impactful Tableau Desktop features released in 2020.3. Now it’s time for Tableau Server! Tableau released 20 new features for Tableau Server. Most of these features are also applicable to Tableau Online as well (if you were wondering). This post will go over the 5 features that will have the most impact on both developers and users interacting with Tableau Server. I’ve ranked them in the order of the biggest impact for users or developers based on the size of the problem the feature solves.
Keep in mind, Tableau categorizes some of its new features in multiple categories (like Tableau Desktop and Tableau Server for the IN operator). I’ve not included features I covered already in my Tableau Desktop 2020.3 post, so go take a look if you’re curious what those are. This makes sense because features aren’t made in a bubble usually, and will have an impact on other parts of the Tableau stack. It just might be a little confusing at first if you aren’t aware of the interactions between the different Tableau pieces.
1. “Shared with me” tab
Navigation on Tableau Server and Tableau Online can be frustrating at times. The UX has significantly improved over the years and this new feature is another giant leap forward. Now there is a dedicated tab on the left navigation bar that lets you see all materials shared with you on the site (including views). This is kind of like Google Drive and streamlines navigation to critical content.
Why it’s important: Better navigation for both experienced and novice Tableau Server users.
2. Grant license on sign-on
If you haven’t been a Server admin, it’ll be difficult to appreciate this one. If you have been one (especially of a large organization), get the champagne ready. Now you can set up your Server to have specific users, teams or departments to automatically be assigned a license on first login.
Why it’s important: Thousands of users? A revolving door of users? No problem, automatic license assignment for first sign-ons. Thousands of man hours saved.
3. Web authoring improvements
The new features include relative date filters, and creating/editing/removing data source and viz filters in the browser.
Tableau continues its alignment with modern tools by beefing up its web authoring capabilities. It’s still a far cry from Tableau Desktop, but the gap is shrinking (slowly). More and more customers are looking towards web authoring rather than full Desktop licenses, and this will make those customers happy.
Why it’s important: For anyone trying to do more than the very basic visualization, web authoring is a no-go with its limited feature set. These new capabilities raise the limitation ceiling ever so slightly.
4. Subscription timing with extracts
The subscriptions feature has been one of the most popular features I’ve introduced to clients utilizing Tableau Server and Tableau Online. People are used to seeing things in their inbox on a regular basis, and they always want the same capabilities with their dashboards. A constant challenge is making sure that data refreshes and subscription emails sync up correctly. Subscriptions that trigger too early means stale data for end users.
This new feature from Tableau enables subscriptions to only trigger once data is done refreshing. No more worrying whether timing is right.
Why it’s important: The more extracts and users you have, the more performance will vary for when extracts actually finish. By making subscriptions have a type of sequential firing option that only happens after extracts complete, the guesswork is removed.
5. New connectors in the extension gallery
While this might not be applicable to too many people at the moment, it’s an important feature trend. Tableau is expanding its extension gallery to include connectors made by third parties. This will slowly minimize the effort of connecting to data for analysis.
Like Zapier or similiar tools, opening the platform to support third party extensions will only grow adoption and options for developers.
Why it’s important: If you’ve ever run into a data source that doesn’t have an out of the box connector in Tableau, it can be a decent amount of extra work to get everything working right.
What are your thoughts on the new releases in Tableau 2020.3 Server and Online? Do you think Tableau is on the right path in their development efforts? The company continues to actively seek user feedback and has been implementing the most requested features. What would you like to see improved next?
Tableau released 2020.3 on August 12th, 2020 with 12 new features for Tableau Desktop. All are useful, but these are the 5 that will have the most impact on developers’ workflow and capabilities in my opinion when creating dashboards. I’ve ranked them in the order of the biggest impact for developers and the challenges or questions they face frequently.
1. The IN operator for calculations
Ever do giant IF or CASE statements with nested CONTAINS? Well your life just got a little easier. You can now use the IN operator to compare a field to a list of values.
Why it’s important: Easier readability, shorter and more efficient calculations.
2. Search improvements in the data pane
With the new Relationships features and data modeling capabilities, the data pane had to be redesigned to allow for multiple tables. This removed the separation in the pane between dimensions and measures. That was quite a shock to many Tableau users as it was an efficient way to separate those field types. In 2020.3, there is now the ability to filter your fields in the data pane by field name, type, or comments. It still feels like a compromise but after a few weeks of use, it probably won’t even be a noticeable difference from the original data pane.
Why it’s important: The new data pane to handle Relationships felt like a step back. This is a step forward in making the data pane easy to use again.
3. Relationship improvements
If you’ve jumped into the new Relationships feature earlier in 2020, you’ll quickly realize its powers, and quickly realize its (few) shortcomings. One of these shortcoming has been fixed in 2020.3. You’ll now be able to relate tables using calculated fields and/or using inequality operators (like <>).
Why it’s important: Running into the serious limitations of operators or calculated fields in earlier versions minimized the usefulness of Relationships. These improvements significantly expanded Relationships use cases again.
4. Predictive modeling functions
I really wanted to put this one higher, but ultimately most developers still won’t get into predictive modeling. I’d highly recommend adding general predictive modeling skills to your toolbox with something like Python, but ultimately predictive modeling inside Tableau will be great as well.
Why it’s important: Making the leap from descriptive to predictive and prescriptive analytics provides huge value to your users and customers. This new feature makes the gap between descriptive and predictive much smaller to bridge.
5. Additional viz export capabilities
Users are always requesting various ways to export dashboards and their underlying data. Back in the day, strange hacks and/or extensions would have to be used to provide the desired output. With 2020.3, you’ll be able to export crosstabs from dashboards into Excel formats to preserve formatting, provide easy export buttons for this feature, and customize PDF subscription layouts for your dashboards.
Why it’s important: This new feature expands the export capabilities, showing that Tableau is still focused on improving some of the most frequent end user requests.
What are your thoughts on the new releases in Tableau 2020.3? Do you think Tableau is on the right path in their development efforts? The company continues to actively seek user feedback and has been implementing the most requested features. What would you like to see improved next?
$667 billion dollars were set aside in 2020 for businesses across the US. This program was called the Paycheck Protection Program (PPP for short). It was meant to be a stimulus package to hold over businesses who were impacted by COVID-19 lockdowns. Without revenue streams, many businesses had to lay-off workers en masse, providing a potentially catastrophic destabilization of American society. According to the Bureau of Labor Statistics, there were close to 18 million unemployed people in June of 2018. The PPP data indicates that over 31 million jobs were retained due to the program.
Without getting into the inaccuracies of the standard unemployment numbers provided by the Bureau, we can still see that laying off potentially 10% of a country’s population wouldn’t be healthy for society. In the past, the US government has provided stimulus and bailouts primarily via public spending increases and buying toxic assets from big corporations. But this stimulus was meant to directly support businesses of all sizes who were directly impacted by the lockdown. Did it server its purpose? You can be the judge of that! I’ve created a data visualization meant to help show where the money went across the nation. This visualization includes the ability to search and filter on columns of the data. In the near future, I’ll be releasing a dashboard that digs into the… more suspicious loans taken out.
Here’s the dashboard, it’s interactive and has some additional info when you hover over data. It is configured for desktop and phones, but is better to view on desktop.:
This data was recently released regarding PPP loans. It was split into different data sets. For loans greater than $150k, data for the whole nation is provided in one data set. For loans less than $150k, data is split by state or territory into its own data set. I’ll be providing a combined data set of all loans here in a little bit, but for now this visualization is for loans greater than $150k.
Some interesting takeaways from this visualization:
Allegedly nearly 10% of the US population’s jobs were retained due to the program
There were TONS of misspellings and bad data entry
The majority of loans were in the $150k-$300k range
P.S. Check out the next visualization here, where I take a deeper look at the PPP data.
Like this post? Subscribe to be notified of future dashboards and Tableau tips.
Not your personal relationships! Although I do hope those are going well for you. I’m talking about Tableau Desktop’s new feature in 2020.2. This is an important one. For both experienced data analysts/scientists and new beginners. The implications of this new feature will impact the fate of the world (ok maybe not that extreme). But it will absolutely impact beginner’s needs to learn overall data concepts and also the explicit control that expert users are used to holding.
If you’re on version 2020.2 or above (for my future readers), you’ll notice the data pane has changed slightly. This is actually to accommodate the new relationships feature. If you’re not using the relationships feature, this will be an annoying change. But if you are using relationships, joins, or custom SQL, it’s the most sensible way Tableau could’ve organized the data pane now that there are multiple tables in a data source.
What Are Relationships?
According to the Tableau website:
Relationships are an easy, flexible way to combine data from multiple tables for analysis.
Let’s unpack this a bit. Tableau says flexible, and it absolutely, positively means flexible. You can add multiple fields to a relationship, multiple relationships between tables, select cardinality and referential integrity of each table, and more. This is all to give the developer an easy path towards correct levels of details in your dashboards and easily designed data models.
P.s. I’ll need to make multiple posts about this topic as Relationships turn out to be a pretty deep feature in terms of configuration and the downstream impacts.
The Big Benefits
Tableau now can handle multiple levels of detail in one data source.
No accidental data loss (although you could have accidental data hiding).
Relations between multiple fact tables is now possible.
Contextual and dynamic (!!!!) joins.
Aggregations are correctly generated by Tableau based on the relationship.
Better performance since queries will only get data that is relevant to the current view.
The Big Drawbacks
No circular relationships in your data model.
No inequality relationships.
Calculated fields can’t be used for relationships.
Published data sources are (still) not able to be used for any data modeling.
Data types are taken from the underlying database, and relationships won’t work with mismatched types. Changing the data type in Tableau has no impact on whether a relationship can be made.
In my opinion, some concerning problems with data sources surface with this new feature. Things that would normally be discovered without the relationships feature are pushed further under the rug. Here are some of them.
Bad data models (or no data models at all) with dirty data can make relationships not perform as expected.
Data source filters negatively impact performance in some cases. This is due to how Tableau removes unnecessary joins usually in queries.
Poor choices for relationship fields won’t return quality data. If the fields chosen don’t have a lot of matching values, your dashboard probably won’t be too useful.
The additional semantics involved with relationships are something that need to be internalized by developers. Otherwise inaccurate visualizations might be presented.
Wrapping It Up
Tableau has knocked it out of the park with this one. But with great power comes great responsibility. The relationships feature vastly expands the possibilities and ease of analyses that use multiple tables. Relationships take care of some common areas in which beginner developers tend to make mistakes. Which can be a good thing and a bad thing.
If you understand relationships, they can be a great tool. If you think you understand relationships (but really don’t) or you just use them without researching their behavior, you might be in for a world of hurt. I’d say, improve your relationship with relationships and your Tableau life will blossom.