Two for One: One bar chart with two types of numerical data

Looking for a simple way to boost interactivity and pack more analytic value into a single bar chart?

In this Help Desk Dashboard, we wanted to track the weekly number of tickets and the percentage each week contributed to the total. At first, we used two separate bar charts, one for the raw counts and one for the percentages, but this felt redundant and took up too much space, especially since the bar sizes were nearly identical. That challenge sparked a creative solution: a single bar chart powered by a parameter action that toggles between ticket count and percent of total.

Adding toggle buttons enhanced the end-user experience – we all love having buttons to press! Read on to learn how to deploy this technique on your dashboards. 

The first step is to identify the two measures. In this example, we needed [ # of Tickets] and [% of Tickets], both of which I chose to set up as calculated fields.

Next, create the [Show # or % of Tickets] parameter that will act as the framework for your toggle. Set it up as an empty string parameter.  

Now we are ready to use this parameter in new calculated field. I named it [Display # or % of Tickets]

Our next step?  Build the bar chart. One a new sheet, bring your date field to columns and the [Display # or % of Tickets] calculation to rows.

You will notice we used two different calculations on the Text marks card. Unfortunately we cannot use the [Display # or % of Tickets] calculation to display the labels because want to show the # of Tickets as a whole number, and the Percent of Total as a percentage. This means we will need calculations for the labels to allow for custom formatting. Create two new calculations and adjust the Default Properties for each calculation to have the corresponding number formats. These calculations tell Tableau which value to display and the number format to display the value. Place both calculations on the Text Marks Card.  I named these calculations [Label # of Tickets] and [Label % of Tickets]


Now we have our parameter, calculations, and bar chart….next up is building the toggle sheet. This may seem tricky, but it’s actually quite straight forward with the use of Measure Names and Measure Values.  Follow these steps:

On a new sheet, change the Mark Type of this sheet to Shape. 

Next, bring Measure Names on to the Filter shelf, and select the two measures used in the toggle [# of Tickets] and [% of Tickets] 

Place a second copy of Measure Names on the Shape marks card and a third copy to the Columns Shelf. We won’t need the header, so we can access the drop-down menu and uncheck “Show header” now.

Click on the Shape marks card to select the shapes you wish to use. For the Help Desk Dashboard, I imported custom shapes (Andy Kriebel has a great video on how-to add custom shapes here)

Next, add Measure Values to the Details Shelf. This should only bring two measures into the view because we filtered Measure Names in an earlier step.

Remove the row dividers by accessing Format > Borders, and setting Row Dividers to None. 

Lastly, set the layout to be Entire View and name the sheet “# or %”

With our bar chart and our # or % toggle sheet ready to go, we can build our dashboard. Go to a new dashboard and drag both sheets on to the dashboard.  To enable the interactivity, we need a Dashboard Parameter Action. From the Menu bar, select Dashboard > Actions to open the Actions dialog box.  


From the Action drop down menu, select Change Parameter.

A new dialog box appears to set the configurations for this dashboard action.  Give the parameter a meaningful name – I called mine [Parameter # of %].  The source sheet is our Toggle Sheet. We want the action to run on Select. The Target Parameter is our  [Show # or % of Tickets] parameter. The source field is Measure Names.  We want to Keep the Current Values when Clearing the Selection. Click OK. 

Test the parameter action by clicking on one of the custom shapes, and notice if the bar chart labels update. Volia! One bar chart with a toggle for two numerical values. Space-saver and fun interactivity all rolled up into one creative solution!  Feel free to take my dashboard for a test drive on Tableau Public, and download it to take a look under the hood if you wish! 

Happy Vizzing! 

Databricks Data Analyst Exam prep as easy as 1, 2, 3!

Earlier this year, I had the opportunity to take the Databricks Certified Data Analyst Associate exam, and I’m thrilled to share that I passed! Preparing for the exam gave me a chance to strengthen my skills in SQL and deepen my understanding of data storage, cleaning, and shaping.

If you’re looking to expand your skill set in the New Year, read on for my top three tips to help you prepare for and pass the exam.

    1. Learn the fundamentals

    Everything you need to know is listed here in the exam guide. Databricks recommends registering for Instructor-led training or self-paced training available through their Databricks Academy. I chose to do the self-paced modules and found it extremely helpful. 

    2. Practice, practice, practice

    If you have access to a Sandbox environment, tap into it!  This is the fun part of learning – playing with the tool (they call it ‘sandbox’ for a reason!) I also highly recommend taking some practice exams – Udemy has some excellent ones – as this will help you become familiar with the style of questions on the exam. Multiple choice questions can have some tricky wording so a little preparation in this regard can go a long way.

    3. Find your tribe

    Form a study group with some colleagues or find an accountability study partner to keep you on track. Meet once a week to check-in on progress, share notes, ask clarifying questions. Knowledge sharing in this capacity can lift each other up! 

    Good luck and be sure to share your badge when you successfully pass the exam. Happy studying, and Happy New Year! May 2025 bring you health, happiness, and all the best data!

    Sarah.

    L-Shaped Bars: Fresh take on bar charts

    Drumroll, please….! Introducing L-Shaped Bars! 

    Inspired by a viz I saw on Tableau’s Exchange (the Salesforce Admin Insights Accelerator), I decided to take a stab at building what has affectionately become known as L-Shaped bars.   It’s a clever way to address the issue of labels overlapping labels, and delivers the same punch as a regular bar chart with less ink. It’s also a great space-saver since you don’t need space on the side or top of the bar for the long string name.

    Problem: Labels overlapping labels with long string names

    Solution: L-Shaped bars with a measure label at the end of the L, and the string name in the corner of the L

    Pretty neat, eh? Feel free to download this solution from my Tableau Public profile and reverse-engineer for your purposes. To get you started, here are a few key tips:

    Tips to building L-Shaped Bars:

    Tip #1: Use Measure Names and Measure Values!  Also, make sure Measure Names is placed on the row shelf.

    Tip #2: Set the Line Path style to Step.

    Tip #3: To add the second set of labels, place a copy of Max(0) calculation on the Columns shelf (copy it from the Measure Values Shelf) to generate the dual-axis. Don’t forget to synchronize the axis! This mark type could be a line, circle, or gantt – at a later step you can adjust the size & color so that it looks seamless with the first line.  If you use a new max(0) instead of a copy, it will generate a 3rd measure name and force the label to be placed below the L-Shaped bar. 

    Tip #4: Be sure to “shrink up the rows” to tuck the labels into the corner of the L-Shape. This can be done by hovering your cursor on the line between Max(0) and Count of Orders and dragging the line up slightly.

    Tip #5: For the blue pills on the row shelf, uncheck Show Header to hide these from the view. 

    Happy to answer any questions you may have – you can message me on LinkedIn or X (formerly Twitter). Happy Vizzing! 

    Build Your Own Crosstab: from concept to final build

    My “Build Your Own Crosstab” Dashboard empowers Tableau Viewers to customize their experience by selecting and arranging the columns in their crosstab, based on their preferences. The inspiration for this dashboard came from hearing a user express frustration over not being able to reorder columns. This feedback made me pause and ask: Could this be possible? Read on to discover how this idea transformed into a fully functional solution.

    Step 1: Pen & Paper

    This dashboard began with one of my go-to techniques: pen and paper sketching. It’s not only essential for designing the layout but also for working through the technical aspects. In this case, I knew I wanted to incorporate parameters, parameter actions, and dynamic zone visibility. Figuring out how all these elements would interact took some serious brainstorming—and plenty of doodling!  Here are some examples of my early sketches: 

    Step 2: Building in Tableau

    With my wireframe sketches and notes at hand, I turned to Tableau. Once connected to Superstore data, I began building out the parameters and calculations I would need to run the dashboard. I built the necessary sheets, began the dashboard build (Horizontal and Vertical containers are key for this one!), and got to work on implementing dynamic zone visibility and parameter actions. 

    Step 3: Solicit Feedback

    With a working prototype ready, it was time to ask for feedback. I published the dashboard to Tableau Public as a hidden viz, and shared the link with trusted colleagues in the #DataFam. I also brought the concept to #VizOfficeHours, held once a week by Michelle Frayman, Nicole Klassen, and Zak Geis. Having a fresh set of eyes helped me gauge the intuitiveness & functionality. With a few minor tweaks I was able to incorporate the feedback and switched the viz’s visibility from hidden to “Show Viz on Profile”. 

    If you’d like to take the dashboard for a test drive, you can find it on my Tableau Public profile. When you explore it, you’ll notice two key features: the Date field is mandatory (with no option for “no selection”), and all values appear on every row rather than being nested by column 1, as in a traditional Tableau crosstab. These were intentional design choices I set at the start of the project. Since this is a prototype, not built to spec, I established these requirements to give myself a clear framework to work within.

    Happy Vizzing!

    The ‘help’ behind the Help Desk Dashboard

    As a data visualization consultant, having proof-of-concept dashboards is essential for discussing the types of visualizations we want—or, more importantly, don’t want—when starting a new project. The biggest challenge, however, is finding a clean, anonymized dataset to build these demo dashboards. That’s where Tableau Community Projects, like RealWorldFakeData (RWFD), come in handy. RWFD is a treasure trove of business-related datasets.  A more recent initiative, Adam Mico’s Data Mockstar, is incredibly useful as well. This ChatGPT tool allows you to specify the desired columns and it returns a dataset of randomly generated data. For my Help Desk Dashboard, I decided to take Data Mockstar for a test drive. With just a few clicks and the following prompt, I had a mock dataset in csv format ready to use for my demo dashboard.

    Brilliant! I connected Tableau Desktop to the csv file provided by Data Mockstar and began an initial data discovery to determine the best way to visualize the data (hello, bar charts). Early in the process, I realized that the analysis relies heavily on date fields—specifically, Ticket Created Date and Ticket Closed Date. The mock dataset contains two years of daily data (2023 and 2024, per my specifications), which is fine for now. However, to future-proof this dashboard, I needed to shift the rows of data so that it always includes two years up to and including today, rather than a fixed period from January 1, 2023, to December 31, 2024. Shoutout to Andy Kriebel, whose Next-Level Tableau Program inspired the set of calculations needed to perpetually shift the dates. 

    The end result? A dynamic dashboard that appears to update “live” even though the data source is a flat file generated once. You can find the dashboard on my Tableau Public profile page—feel free to download it and take a look under the hood!

    Happy Vizzing! 

    #B2VB Challenge: HBCU College Finder Text Table

    As a mom of two high schoolers, B2VB’s week 3 college-related data set caught my eye. With a plethora of higher-education choices available, wouldn’t it be great if we could generate a list of colleges based on a specific set of criteria? With this idea in mind, I decided to build a text table that could be modified based on the input provided and give the end-user the ability to sort the list based on their priorities.

    With a little “data discovery”, I found fields in the data set for In-State Tuition and Out-of-State Tuition. Bingo! Just the perfect data to put my idea into action. Afterall, isn’t Cost one of the first things families consider when making a short list of colleges?  To make the dashboard user-friendly, I decided to call this out as the first step – selecting the State you live in – using a bold font with an arrow (created in Figma). This bit of information provides the input to display either In-State or Out-of-State $$. To accomplish this, I needed to modify the data source, build a parameter, and write a calculation. 

    The Data Source

    The data set provided had the list of colleges, but no States. With a little bit of effort (thanks, Google!) I was able to add a column to indicate the State for each College. To answer the question regarding tuition (In-State vs Out-of-State), I also needed a way to provide the dashboard user with an input for the State they reside. This required adding another table to the data model – a full list of States. This was accomplished using a right join in the Data Source tab.  

    The Parameter

    Next, I created a string parameter called “Where Do You Live?” and populated it with the values from the full list of States.  

    The Calculation

    Next, I created a calculated field that uses the parameter to tell Tableau if it should pull the value for the In-State or Out-of-State tuition.  This calculated field was brought into the view as one of the measures in the text table.

    I followed similar steps for the Undergrad/Grad selector, using a parameter and calculated field to display the student population based on the dashboard user’s selection.

    Here’s a link to the final result on my Tableau Public Profile – take it for a test drive and let me know what you think! The dashboard incorporates a few other techniques as well – stay tuned for a follow up blog post with more details.

    Thank you to #Back2VizBasics and the #Datafam for these community challenges that help us stay current with our Tableau skills.

    Happy Vizzing! 

    Tableau Certified Data Analyst – Exam Resources

    Exciting news to share – I recently passed the Tableau Certified Data Analyst Exam! 

    For those of you not familiar with this certification, it is offered by Tableau and is valid for two years. Since mine had expired and my employer required it to be renewed, I found myself back in study-mode to prepare. There are several excellent resources available online – here’s a list of my go-to’s: 

    Tableau’s Exam Guide

    https://www.tableau.com/learn/certification/tableau-certified-data-analyst-exam-guide

    This link provides an overview of exam format, grading, and sections to be covered on the exam. Note: the exam is in three sections, and once you complete a section you cannot return to it later. Be sure to review each section before pressing “Finish” and moving on to the next section. The exam is closed-book, meaning you cannot search for answers online, or login to Tableau to verify.  There is one hands-on section which requires you to complete tasks within Tableau Desktop. 

    Study Guide from Learning Tableau

    This is website provides handy links to Tableau documentation for all sections of the exam. I found Domain 1 focused quite a bit on Tableau Prep and Custom SQL, so if you mainly use Tableau Desktop in your daily work, be sure to review these concepts. 

    Practice Questions and Exam Overview

    This is the perfect resource to review a sample of typical exam questions and familiarize yourself with the format. The wording of questions and multiple-choice answers can sometimes be tricky, so practicing ahead of time is well worth the effort!  During the exam I reviewed all of my answers, which was helpful as I caught a couple that needed correcting after re-reading the question.

    #Datafam blog posts from CJ Mayes, featuring Deborah Simmonds and Mehras Abdoli, and Ann Pregler


    Last but not least, this round-up would not be complete without mentioning these #Datafam links – my go-to’s for learning all things Tableau, 365 days of the year!

    Andy Kriebel

    Sqlbelle

    TableauTim

    The Flerlage Twins

    Felicia Styer

    Kim Unger

    Bridget Cogley

    Summary

    Overall, I found the experience to be challenging and reaffirming. It gave me an opportunity to brush up on some concepts I don’t use daily and it was a good test of my Tableau knowledge.  Please feel free to reach out if you are planning to take the exam  – happy to share my tips & knowledge! 

    Pep Talk Generator: Life is hard, giving yourself a pep talk doesn’t have to be.

    Growing up, my dad gave me the best pep talks. One of his favourties was “Keep your stick on the ice.” Not surprising given his lifelong love of hockey. My Dad passed in 2013, and I miss his pep talks. This pep talk generator helps to partially fill that void, and it is one way I can share the joy he found in lifting others up.

    So, let’s get down to the Tableau part, shall we? Building this pep talk generator in Tableau required using a variety of Tableau techniques — here’s a peek under the hood:

    Each pep talk is composed of four separate string values. This gives the dashboard over 100,000 possible pep talk combinations. To offer the choice between the create your own pep talk or randomly generated pep talk, I employed parameters & calculated fields. There are four string calculations for the create your own and another four calculations for the random version.  For those of you keeping score at home, that makes eight calculations.

    Pretty straight forward so far, agreed? Feel free to download the workbook from Tableau Public and follow along if you wish!

    Both versions of the pep talk generator – create your own and randomly generated – use parameter values in the string calculations to change the text that is shown. Create your own has four parameters, one for each string calculation. Random also has four parameters, one for each string calculation. (Add 8 parameters to the score sheet!) However, the method by which these parameter values are updated differ. Let me explain:

    For the Create Your Own version, the values in the parameters are updated using Tableau’s parameter control boxes, which are visible to the dashboard user.  In other words, when the dashboard user interacts with the parameter control box, the value in the parameter changes and updates the string calculation for that portion of the text.

    The randomized version also uses four parameters, one for each string calculation, however, these parameters update when the workbook is opened using a different set of calculations. The “default when workbook opens” calculations utilize the function RANDOM() to randomly assign a value between 1-18. 

    For those of you keeping score at home, we now have 12 calculations and 8 parameters. Could this be done with fewer calculations? Yes, probably. In fact you could combine the string calculations and thereby reduce the number of calculations, but I prefer having simpler, shorter syntax over nested calculations.

    Now that we have the mechanism by which both sets of string calculations will update, and we can use these calculations to build the sheets by placing them on the text marks card. I used two separate sheets, one for the create your own pep talk, and a second one for the random version. I also built two more sheets which I named “button random” and “button create your own” that are used on the dashboard to toggle between the two versions.

    You may be wondering how does the dashboard know which sheets to display? Dynamic Zone Visibility and Parameter Actions, FTW!  To employ these techniques, the dashboard utilizes another parameter with two values: Random or Create Your Own, to identify the components needed for each version. The components are as follows:

    > four sheets: randomly generated text, create your own text, button random, button create your own

    and

    > four parameter control boxes that drive the create your own version

    On the dashboard, you must assign the “Control visibility using value” to each component, or in the case of the parameter control boxes, the container that holds the components. Lastly, parameter actions drive these components (aka zones) to update dynamically when the dashboard viewer clicks on the “button” sheets. Naturally, there are a few more calculations needed to achieve this functionally, as well calculations for formatting the tooltips – all in, the total number is 22 calculations and 9 parameters! It sounds like a lot, but with consistent naming and a well-laid out plan, the dashboard build is very do-able.

    I hope this Pep Talk Generator lifts you up and gives you the motivation to keep going. And if you know someone that needs a pep talk, please pass it on. http://tinyurl.com/peptalkgenerator

    Viz built by: Sarah Pallett. Inspiration: David Pallett

    The Value of White Space

    I love adding white space or “empty space” to a dashboard. It’s like having a desk that is clean & uncluttered instead of covered in stacks of papers and knick-knacks – it’s peaceful and makes a dashboard feel more “approachable”. It is an under-rated technique that deserves the spotlight.

    The September #EduVizzers Challenge on Book Bans was the perfect opportunity to play with this technique, AND the fact that Iron Quest’s White Space Challenge was happening concurrently made the timing ideal. During my development process, I identified 5 distinct metrics that deserved equal attention.  Rather than combining all 5 bar charts in one view, I utilized parameter actions and dynamic zone visibility to allow the end-user to view each chart one at-a-time.  This gave each visual a dedicated space and breathing room to let each metric make a statement.  I know what you’re thinking — in the real world we don’t always have the luxury of showing one chart at a time. Often the visuals need to be side-by-side to assess the metrics in tandem.  In those instances, you can increase the padding around each object.  This is a more subtle way to add white space and one of my default formatting techniques. Outer Padding adds space between two dashboard objects while Inner Padding adds space inside the object’s wireframe. Here’s a screenshot with exaggerated padding to illustrate the difference:

    And if you’re curious about school book bans in the US, here’s a viz for you:

    Happy Vizzing, and happy white-spacing!

    Community Wednesday: A sneak peek into one of our best practices at DataBrains

    A quick glance at my calendar reveals a recurring meeting every week named Community Wednesday.  Yes, it’s another zoom call, but it truly stands apart from the rest. 

    Originally designed to help grow the skillset of our emerging talent, it has evolved into one of our best practices.  It is a dedicated hour each week for the Tableau Developers at DataBrains to come together to share projects, troubleshoot technical issues, collaborate, brainstorm, and upskill. Sounds like a lot in an hour, doesn’t it? As Brainiacs, the conversation & exchange of ideas moves quickly, making it a fun, fast-paced meeting.

    Each week the topic of conversation will vary – some weeks a Brainiac will share a work-in-progress, other weeks we will solve challenges from the wider Tableau Community, namely WorkoutWednesday, Back2VizBasics, and Preppin’ Data.  

    Both experienced & emerging talent participate, which allows for the transfer of knowledge in a supportive and collaborative environment. The weekly cadence keeps the discussion relevant, timely, and in sync with client deliverables.  Last but not least of all, it fosters a sense of community among teammates, which Tableau recognizes in the Tableau Blueprint as a core component of successful data-driven organizations.  

    I hope this inspires your organization to establish your own best practice to engage & support your Tableau Developers in a collaborative way.  Let your imagination lead the way — how does “New Tip Tuesday” or “Lunch & Learn Fridays” sound?

    Proudly powered by WordPress | Theme: Baskerville 2 by Anders Noren.

    Up ↑