Author: dchissick

  • Moving Stuff in Tableau

    Moving Stuff in Tableau

    Here’s a list of 7 small and less well-known things you can move, sort or select in Tableau Desktop. If you know about all of these, you’re a Jedi. I won’t tell how many of them were under my radar, for how many years, because it’s embarrassing.

    Obviously there are many more similar features, but most are well-known. I consult with a lot of developers, and I picked these based on my experience of what usually gets missed.

    1

    Drag the cards around (filters, rows, columns, etc.)

    Note – the new layout is saved per worksheet, not for the whole workbook.


    2

    Use the Sheet Sorter to organize your dashboards/worksheets – it’s the small icon on the bottom right.

    Tip – if it’s not showing all the thumbnails, you can right-click anywhere and “Refresh All Thumbnails”.


    3

    Drag legend items to reorder them in the chart.


    4

    On a range filter (numerical or date), if you drag from the center of the range it keeps the interval constant and moves both ends of the range.

    This is good for users as well as developers.


    5

    When editing table calculations, the fields can be dragged into the right order.


    6

    Dashboard or worksheet actions can be sorted by clicking on the column header.


    7

    If you’re having trouble clicking exactly on a relationship “noodle” to select it in your data source, go to the menu for one of the tables and “Select Relationship”.

    You can also do this from the dropdown above the relationship/table details pane, but the text there is always cut off (though it has a tooltip).

  • Internal Ranking

    Internal Ranking

    A customer recently asked me how to display a bar chart like this:

    You have segments (any dimension) on the columns, and then the bars are sorted and labelled by the categories (any other dimension) on the rows.

    If your segments are static you can have 3 separate worksheets side by side, but that’s not the proper way to do it, and it won’t work if the segments themselves are changing based on some other filter. Fortunately, Tableau has Table Calculations, and there’s a neat and simple solution.

    The only calculated field I need is [Rank]:   RANK(SUM([Sales]))

    I then place this on Rows, Segment on Columns, drag Sales to Columns in order to create bars, and add Sub-Category to Detail.

    What a mess! Just one more thing… go to the menu for Rank and Compute using → Sub-Category. And we have a bar chart, sorted separately for each segment.

    The rest is just formatting, but it’s the important part:

    • Add Sub-Category to Labels on the bars.

    Nice, but that’s not what the customer wants. The Sub-Category has to be to the left of the bar, and the value as a regular label.

    • Add a new field on Columns: AVG(0)
    • In the menu for this field, apply Dual Axis. This temporarily messes up the chart.
    • We now have three Mark cards on the left:
    • On the All card, remove Measure Names
    • On the SUM(Sales) card, change the mark type to Bar, and drag Sales to Label instead of Sub-Category
    • On the AGG(AVG(0)) card, change the mark type to Gantt Bar, and drag Sub-Category to Label. Change the Label alignment to Left.
    • Right-click on one of the axes and Synchronize Axis. Then drag the AGG(AVG(0)) pill in the Columns so it’s before (to the left of) the SUM(Sales) pill.

    You should be seeing this:

    The rest is pure cosmetics:

    • Format Lines to remove the grid lines from the chart.
    • Unclick “Show Header” on the Rank pill.
    • Edit each axis (top and bottom) so it shows whatever you need, or remove them altogether using Show Header on the green pills.
    • Format the bars and labels in any way that you want

    And the end result is as required, with the number of columns flexible – you can even enable the user to switch dimensions easily using a parameter. Each column has the Sales sorted and labelled neatly by Sub-Category.

    There are more complicated use cases, of course, such as negative values that can overlap with the labels. In such cases some tweaking of formulas is needed, but this is the basic technique. And my customer is already using the technique in a production dashboard.

  • The % Filter

    Tableau won’t always behave exactly the way you want, but if you know and understand how it works, you can apply simple solutions for many of the small irritants. This is one of them.

    I was asked this question about a percentage filter. The worksheet is filtered by a percentage measure, and there’s a quick filter by range, with type-in values – which looks OK, until the user tries to type in the value, and discovers that instead of “10%” or “10”, she has to type in “0.1”.

    The measure is already formatted as a percentage, so what can a person do?

    First, create a parameter with the desired range of values.

    Next, create a calculated field filtering by the parameter, drag it to the Filters pane, and select “True”.

    Now comes the trick. Format the parameter with the custom format “0\%”. Unlike the “0%” format, which will multiply the value by 100 in the display (try it), the backslash is an escape character that is not shown, and renders the following character as a simple text. So the “0” format is a regular number, and “\%” just adds a % suffix.

    Now, when the user clicks in the box to type in the value, she can type in the actual percentage number.

    Mission accomplished.

  • The Tableau Forums

    The Tableau Forums

    One of the foundations of the Tableau community (or DataFam, as we call it) has always been the Tableau Forums, where anyone can ask a question about Tableau and receive answers. The Forums were integrated into the Salesforce system at the end of 2025, but I’ll start the story at the beginning.

    For years of working with Tableau, I was aware of the forums, but not active on them. If you searched on Google for an answer on some issue, many of the solutions displayed would be from the forums, which were open to anyone to read, so I read many of the threads, but I never actually created a user and logged in.

    In June 2020, feeling that I was already a Tableau expert and I needed to contribute, I decided to act. I created a user, and committed to answering at least one open question every week. From that point onwards I was in the system, and learnt the rules:

    • You received 10 points for answering a question, and 25 points when marked as “best answer”.
    • These points were accummulated and you then received “badges”, with colorful icons and catchy names. There were 15 levels, going up to V.I.P. (Viz Insights Pro) at 7,900 points. You can see my progress in a viz I created on Tableau Public when I reached that level, after almost 3 years of activity.
    • You could also see where you were ranked on the “Leaderboard”, especially in the all-time rankings. After VIP level my aim was always to break into the top 100 all-time, and I succeeded in doing this around the beginning of 2025, with about 14,000 points. For comparison, the all-time leader is Jim Dehner (still active), who reached 500,000 points, and there are several more with over 100,000. Get a life!
    Click to open the viz

    As time went on I increased my cadence, of course. I would log in weekly to look for a question to answer, and if I saw more than one opportunity I answered two or three. And then my answer would need a follow-up, so I logged in again, and so on. In June 2022, when the annual nominations for Tableau Forums Ambassadors came up, I was contacted by Ciara Brennan, who was in charge of the forums from the Tableau side (already Salesforce by then), and encouraged to nominate myself. Obviously my nomination was accepted, and I became an Ambassador for the first time.

    Becoming an Ambassador opened up new horizons. There were 40-60 Forums Ambassadors each year, and we were the ones answering a large majority of the questions. In addition, we were the moderators of the forums: suspicious messages, or those from new users, were on hold until we released them – or deleted and flagged the spam account for removal. We could also remove or edit messages that weren’t identified by the system as spam. The spam included a lot of weird marketing bots, but later on we had to cope with AI-generated answers as well.

    Ambassadors could also mark answers as “accepted”, as many users don’t do that for their own questions, and this is the best way to close an open question. So sometimes I would get a bunch of “Your answer was accepted” emails together, and I knew some other Ambassador was working on a cleanup.

    All this was orchestrated by Ciara, who organized monthly Zoom meetings, where I made new acquaintances, updated us with statistics, planned Sprints for specific subjects, and searched for experts to answer difficult questions that were being neglected.

    Towards the end of 2025, two things happened. First, the Ambassador system changed. Instead of grouping everyone by subjects (Public, Forums, User Group, Social, Academic, etc.), all these were bunched into a single definition of “Tableau Community Ambassadors”, so now there is no defined group of Forum Ambassadors who can collaborate and moderate the forums. At the same time, the whole Forums system was migrated to the Salesforce platform on Trailhead.

    https://trailhead.salesforce.com/trailblazer-community/neighborhoods/tableau

    The Salesforce system has been serving Salesforce customers for years, and is certainly more robust and advanced than the old forums website on Tableau, which was quite ancient. The main advantages are:

    • A more modern interface.
    • Maintained as part of the Salesforce website.
    • A much better spam filter.
    • and… that’s about it

    At the moment, a few months on, we’re still learning and improving, but from my viewpoint as a Tableau expert there are quite a few disadvantages. Let’s start with the unavoidable consequences of the migration:

    • Users had to create a new login on Trailhead.
    • All existing content was migrated, but users who didn’t create a corresponding login now appear as anonymous in the history, and links that pointed to other Tableau forums posts were broken.
    • All the leaderboard history is gone ☹

    The process of asking and answering questions is more or less the same, though without the special Ambassador privileges from before. There is a sort of points system, but there’s no real leaderboard and you can only see the 5 top points earners in the last 30 days. I can see my total answers and ranking for all time, but no other statistics.

    It’s a bit more difficult to browse by subject/topic, because the Tableau topics are only part of the whole, but once you know what to put in the URL you can save a direct link and shorten the process. I use this one: https://trailhead.salesforce.com/trailblazer-community/neighborhoods/tableau/feed?sort=CREATED_DATE_DESC&filter=UNANSWERED_QUESTIONS

    So is it working? Yes, but less. It’s difficult to count, but I think there were 500-1,000 new questions per month in the old forums, and some statistics that we were shown in the old Ambassador meetings support that. I counted before the forums closed, and there were over 50 questions in the last 3 days (22-24 October 2025), and the 24th wasn’t even a full day. In comparison, I counted about 30 questions a week (let’s say up to 150 a month) on the Salesforce platform – probably 70-80% less.

    One of the reasons is the Tableau community Slack channel “community-tableau-questions”, which serves as an additional question and answer forum, and has at least 50-60 questions a month. It’s a nice idea, but it’s a closed system (though there are over 20,000 users), and there’s no real searchability and history like on the Trailhead site – so I would really prefer if the channel was closed and traffic directed to Trailhead.

    Another reason could be AI, but that’s a totally different issue…

    Obviously, with less new questions, it’s more difficult to find interesting ones to answer, but I’m still trying to meet my weekly “quota” and be active. I hope traffic increases as time goes by, and more new users login to Trailhead. The Tableau Forums are definitely not dead, just modernized – though I suspect many of us miss our old, creaking haunting grounds.

  • Tableau Text Wrapping

    Recently someone noted that Tableau tables don’t do a great job displaying long text fields – the row height can be adjusted to accommodate any number of lines of text when it is wrapped, but it is fixed for the whole table, not dynamic per row. Look at the example below (just some old tweet dataset that was lying around), and you can see that all rows have exactly 3 lines, so in many cases there is blank space, or an overflow (two dots at the end):

    Is there a solution? Built-in there isn’t, but a couple of calculations can certainly help and format our text table more efficiently. This is how it’s done.

    First, I define an integer parameter called “Text length” and set the value to 40. I’ll use it later.
    Now I need to add an “expander table” to my data source. This is a simple table (I usually use Excel) with a column of numbers, from 1 to as many as needed. In the example I don’t expect to display more than 10 lines of text, so I limit the table to 10, but it can be a lot more. The relationship between the table and my data table is set as a full cross-join: 1 = 1

    What I’m going to do now is split the text field into separate lines, by finding the first space after every N characters (N being my parameter) and cutting the text at that point. For this I use 3 calculated fields:

    Cutoff N (this marks the first space after N * Number characters (or the end of the text)

    IF FIND([Text], ” “, [Number] * [Text length]) = 0 THEN LEN([Text])+1
    ELSE FIND([Text], ” “, [Number] * [Text length])
    END

    Cutoff N-1 (this is the previous space)

    FIND([Text], ” “, ([Number] – 1) * [Text length])

    Text N (cut out the text from [Cutoff N-1] to [Cutoff N]

    IF [Number] = 1 THEN LEFT([Text], [Cutoff N])
    ELSE TRIM(MID([Text], [Cutoff N-1], [Cutoff N] – [Cutoff N-1]))
    END

    Note that I’m using the [Number] field from my expander table to define the line number (N), and the number of characters in each line of text depends on the [Text length] parameter.

    Place [Number] on rows, then [Text N], and I get my table with the text field split nicely into lines:

    I can use the Text length parameter to play with the field width, and see what it looks like with different values.

    A few additional formatting steps:

    • Uncheck “Show Header” on the Number field in Rows.
    • Format the Borders so the lines within the text disappear.
    • Fine-tune the row shading.
    • If there’s no field after Text N, switch the mark type to Polygon so the “abc” disappears.

    And I have a formatted text table:

    Now let’s say that I need some data field to the right of my text – in this example I’ll use “Retweet count”. If I just add the field, it will display the same value for each line of text, so I need to use a table calculation:

    Retweets

    IF FIRST() = 0 THEN SUM([Retweet Count]) END

    I can add this, and then Edit Table Calculation using the following settings:

    This enables me to show the value only for one row, and my finished table, with the additional columns, looks like this:

    Summary

    The data in this sample dataset isn’t varied, with most tweets being around the same length, but you can see how a flexible number of text lines per data row can improve the look and feel of a Tableau table. So it’s not impossible – you need just a relatively simpke workaround. And that’s part of the power of Tableau: with a little imagination and some calculated fields, you can tweak your visualizations and solve many display problems without any coding.

  • Measure Value Indicators

    Measure Value Indicators

    As usual, this post started from a customer request. They had a nice table set up in Tableau, with Measure Names and Values (quite complicated ones), and they wanted to add a column with an indicator for each row – just a colored dot, but with 4 different colors.

    At first I said it couldn’t be done without re-engineering the whole table, but then I thought about it and suggested a solution similar to the following example, which is already working nicely in production.

    Let’s start with a simple table of measures, already colored using Separate Color Legends:

      Now we want to add a colored indicator for some of the rows, based on a calculated field – I’ll take the ranking of Profit Ratio as an example. To stretch Tableau to the limits, my requirement is to display an upward pointing triangle for the top 3 rows (Sub-Categories) in Profit Ratio, a downward pointing triangle for the bottom 3, and a circle for the rest. In addition, the top 3 should be colored in shades of blue, the bottom in red, and the others in light gray. Impossible? No!

      I start by defining my calculated field. What I need is a series of numbers, not the actual value (which is displayed separately in this case), and you’ll see later how these numbers support the visual element. I’m aiming for the numbers from 3 to -3:

      IF RANK([Profit Ratio]) <= 3 THEN 4 – RANK([Profit Ratio])
      ELSEIF RANK([Profit Ratio], “asc”) <= 3 THEN -4 + RANK([Profit Ratio], “asc”)
      ELSE 0
      END

      This gives me the values 3, 2, 1 for the top 3 rows, -3, -2, -1 for the bottom 3, and 0 for the rest.

      I can now leverage two of Tableau’s formatting features to create my indicators. First, the number format – I define a custom format:  ▲;▼;●

      What does this mean? Every number format is divided into three sections, separated by semicolons. The first is for positive numbers, the second for negative numbers, and the third for zeros. I’ve told it not to display the actual value, but a single character in each section (it could be any unicode text).

      Then, in addition, I can use Tableau’s color options and define a custom diverging color palette, with as many colors as I want. This is much easier in versions from 2025.3 onwards, that have the custom palette editor within Tableau, but can also be done by modifying the preferences file :


      Note that it’s important to define the same number of colors as numbers that I’m using for the indicators, and for the numbers to be evenly distributed. That enables me to fix the palette scale from the lowest to the highest number, and when I define Stepped Color with the corresponding number of steps, each number in my measure gets its own color:

      That’s it. I have my indicators in a simple Measure Names/Values table, without changing the whole structure of the worksheet.

      Remember that this technique has constraints: not more than 3 special characters or texts, and theoretically you can define any number of colors, but I haven’t checked Tableau’s limit (maybe 20?). But the bottom line is that it allows you to add colored shapes as indicators to a table of measures, as an additional column, and that can be very useful.

    • Sorting Date Filters

      Sorting Date Filters

      Recently I was asked, not for the first time, if Tableau could sort dates in a filter in descending order. Well – it can, sort of. But you need to know how to manipulate the fields a bit.

      Let’s take a simple case: I want to filter by month and year, but to see the latest month at the top of the list. So I drag my Order Date field to the Filters card, and select the Month / Year option.

      Now I can look at the menus in both the Filter card and the worksheet itself (after showing the filter), and there is no “Sort” option in either.

      So I’ll try to set the default sorting of the Order Date field to descending order, using the menu: Default Properties → Sort, and then checking the Descending option.

      Then I drag the field to Filters again, and… it stays in ascending order.

      But what if I choose the Individual Dates option? Suddenly, the dates appear in descending order, but I have every date (day) there. It doesn’t work if I select any other date level.

      So what’s happening here? Dates are a special type of field, and Tableau automatically aggregates them unless told otherwise – to years, months, or some other level. And it always sorts the aggregated dates in ascending order. The Individual Dates option is the only one that is not aggregated, so it retains the default sorting.

      How can we work around this problem? Let’s say that we need a filter displaying months, and sorted in descending order. We first need to create a field that has individual dates at the month level. There are two ways of doing this:

      • Create a calculated field, using the DATETRUNC function (more about that in a previous post), and also set its default format to something appropriate.
      • Create a Custom date field – one of the lesser known functions in Tableau. Select the “Months” option and “Date Value“.

      Now we can set the default sorting for the field, drag it to the filters, select the Individual Dates option, and the months will appear in descending order. Mission accomplished!

      Summary

      We now know that there are two conditions that have to be met in order to see dates in descending order in a date filter:

      1. The default sorting of the date field is set to “Descending”.
      2. The filter is not aggregated, but showing individual dates.

      We can manipulate the dates as necessary, but in the end those two conditions have to be met. All the rest is the usual Tableau trickery 😊

    • Judging Iron Viz 2026

      Judging Iron Viz 2026

      The results are in for this year’s Iron Viz qualifiers, so I thought I could share some thoughts about the judging process, and of course about my involvement in it.

      https://www.tableau.com/blog/top-10-qualifiers-iron-viz-2026

      The judges for the Iron Viz qualifiers are about 30 volunteers from the current year’s cohort of Ambassadors and Visionaries, obviously not including those who are actually participating. This year I volunteered for the second time (previous was in 2024) – I can’t take part in any case because of the legal constraints that limit Iron Viz entrants to residents of only 32 countries in the world (more about that here), so judging is a good way to be involved.

      The vizzes are screened by the Tableau team to make sure that they comply to the minimal standards, such as the chosen theme (this year it was “Food and Drink”), and then each entry is assigned to 3 random judges. Many of the entrants publicize their work immediately after submitting, but we are asked to try and ignore the social media noise before judging, for obvious reasons. I was assigned 11 vizzes, but I had to decline one of them, as it was created by a colleague from my company and I had even given feedback on the content, so it was re-assigned to someone else.

      We had more than a month from receiving the anonymized vizzes until our deadline, so there was ample time. I invested at least half an hour on each – first investigating it as a viewer, then opening the workbook and seeing how it was created, including data sources, calculations, worksheet structure, and actions, and then assigning the scores and adding brief comments. When I had finished with all of them, before submitting all the scores into an online form, I also looked at the final ranking and evaluated if it reflected my general impression of the vizzes – because sometimes you can get immersed in the small details and scores, without seeing the big picture: which viz is the best?

      I was impressed by the amount and variety of data collected by most of the participants. Most of the vizzes were based on multiple datasets with a wealth of data about their subject, and I’m sure a lot of effort went into collecting this data, before even starting on the design.

      I have to note that most of the subjects did not interest me at all – I’m the total opposite of someone you would call a “foodie”, and I don’t drink almost anything except water. Some of the data, and even the food and drink names, could have been pure fiction, and I wouldn’t have known the difference.

      I am not going to divulge any recognizable information about the vizzes that I judged, of course, only my general impressions. Overall, of the 10 vizzes, I would have said that one was of beginner level, 7 were good to very good, and two were outstanding.

      We judge all the vizzes by awarding scores from 0 to 5 on the well-publicized criteria: Analysis, Design, and Storytelling. This is what the scores that I awarded looked like:

      Not much to be learned from this: most vizzes correlated well with their story, only the good ones had some complexity/nuance, and accessibility is not on everyone’s mind.

      Another way of looking at it:

      And the final results (anonymized Viz number), out of a maximum of 15 points:

      My thoughts about some of the judging criteria:

      Analysis

      • Viz topic aligns with the contest theme.
        • This one is obvious, and you don’t get a score for it – just True or you’re out.
      • Dataset and calculations appear to be accurate and clean.
        • This is where I check the data model: are there lots of data sources with disorganized names, or is there a nicely structured data model? And are the calculated fields well named and structured?
        • Errors cost points here – if an action or calculation performs incorrectly.
      • Analysis illustrates profound insights grasped from visualizations.
      • Analysis supports the story being told.
      • Analysis has been mostly produced within Tableau.
        • I understand this as meaning that if you’re calculating aggregates in SQL, or bringing in coordinates for a Sankey chart from Excel, you’re not producing analysis in Tableau.
      • Analysis highlights a broad range of Tableau capabilities.
        • Here is where I gave more points for using Tableau’s visual features: interesting chart types, dashboard actions, show/hide buttons, DZV, and even recursive parameter actions (my favorite, of course).

      Design

      • Accessibility is applied in one or more of the following ways: colorblind/low vision (contrast) friendly palette, limited use of images to convey text, font size 12pt or larger.
        • I deducted points mainly for tiny fonts (there were lots of those), and a little for color palettes – it’s easy for me to judge, because I am slightly color blind.
      • Visual elements add to the overall understanding of the visualization rather than distract.
        • Don’t use charts if they don’t convey any information.
      • Interactivity and layout are user-friendly, instructed/specified, and purposeful.
      • Charts are clearly presenting the data.
        • If I need to investigate a chart for more than a few seconds in order to understand it, you lose points.
      • Charts contain a title, summary, and/or caption.
      • All charts contribute to the story.

      Storytelling

      • A clear story is being told.
        • Don’t just display data – you need to tell a story. Actually I’m not very good at this, but I can recognize a good story when I see one.
      • Story flows through visualizations and guides consumer from question to insight.
      • Visualizations and animations support the story being told.
      • The story includes a unique idea or perspective.
      • The story being told has complexity/nuance that elevates the visualizations.
        • I looked for something special in the story: is it a bare analysis of the data, or are you investigating (or making me investigate) and discovering something?
      • Storytelling captures and maintains interest throughout the entire viz.
        • This is the easiest: was I captivated from the moment I first opened the viz, or did I lose interest at some point? The first impression was most important here.

      So what about the results?

      The viz that I ranked 3rd was in the top ten.

      The viz that I ranked 2nd was in the top three, and qualified its creator to battle on stage in Iron Viz 2026.

      And the viz that I ranked 1st ….  nothing. Obviously two other judges didn’t like it as much as I did, or maybe Tableau have other considerations that also affect the final rankings.

      Summary

      Judging Iron Viz is quite a bit of work, but it’s one way for us Ambassadors to give back to the community. It definitely improves your critical thinking, challenges you to give constructive feedback, and of course it’s fun. Even the discussion within the closed forums among the judges is interesting. I’ll definitely do it again, if I have the opportunity, and huge thanks to Katy Clarke from Tableau who led the process and coordinated everything.

    • Multi-Fact Dimension Switching

      Multi-Fact Dimension Switching

      My session at DataFam Europe included a section about some limitations of Tableau’s multi-fact model, especially regarding stuff you can do in an “old” model but not with multiple fact (base) tables.

      A recent bout of troubleshooting with a customer unearthed some new revelations, and a partial solution, for the “Dimension switching” problem that I had demonstrated.

      Let’s start with the problem. I have a multi-fact data source, as below. The two fact tables have five common dimensions (Date, Currency, Promotion, Sales Territory, and Product), Customer is related only to Internet Sales, and Employee and Reseller only to Reseller Sales.

      I‘ll start by creating a parameter that will enable me to switch dimensions in my worksheet:

      Now I create a calculated field based on this parameter, which can be placed in my chart or table, and I get an error:

      Not good. In an old model, with just one base table, you can switch any field using this technique. Now, even if I’m only intending to use this “Selected Dimension” field with a measure from one base table (and I haven’t placed it in the worksheet yet), Tableau is already giving me an error.

      This is where the customer’s story comes in. One of the developers tried this, and received an error as expected, but another developer, working with a different data source (also multi-fact), managed to create a similar calculated field and use it in a worksheet. So we started investigating, and after some trial and error we now understand when the technique works, and, more importantly, why.

      I already know (from a conversation with Thomas Nhan, the Product Manager) that Tableau calculations in multi-fact data sources start from the base table. We’ll keep this in mind during the following examples.

      Step 1

      We start by referencing only a couple of shared dimensions from different tables (note that Category and Sub-Category are from the same table):

      That’s an error, because Tableau can’t decide from which base table to start calculating.

      Step 2

      We add a dimension that’s related only to one base table:

      No error, because Tableau can decide, based on the [Reseller Name] field, that it has to use the FactResellerSales base table.

      That’s the key: give Tableau a clue regarding which base table to use, and it will use it. Let’s try something else:

      Step 3

      That’s not working, because [Reseller Name] and [Customer Name] are related to different base tables. And it reminds us that dimension switching will only work with measures from a single base table, which we’ll see in the final result.

      But even if all the dimensions you need are related to multiple base tables – add a dummy field from the table that you’re referring to, just as a pointer:

      Step 4

      This is OK. Category, Sub-Category, and Promotion are all related to both Internet Sales and Reseller Sales, but Sales Order Number, which will never be used because “—” is not a value in the parameter list, is in the Internet Sales fact table, so it is telling Tableau to start calculating from that base table.

      And this is where you have to look out for the actual results. By pointing Tableau at a specific base table, we are limiting the use of the dimension to that table only – even though the selected dimensions are related to two or more tables:

      In the screenshot I have selected the Sub-Category dimension, but in the data pane it is applying to Internet Sales Amount only, even though it is related to Reseller Sales as well – because I “pointed” Tableau at Internet Sales with my dummy row in the calculated field. Note that Reseller Sales Amount even has the icon indicating a broken link, and hovering over it displays a message:

      Conclusion

      Dimension switching in a multi-fact model works, just as it does in the old relationship model with one base table, as long as Tableau is told explicitly which base table to use. However, there is currently no improvement in the capabilities, so you can’t switch dimensions in a single worksheet and display measures from multiple fact tables. Maybe that will come in a future iteration. And now you know how to “force” Tableau to choose a base table for the dimensions when necessary.

    • Don’t Extract an Extract

      Don’t Extract an Extract

      Recently, not for the first time, I was contacted by a Tableau customer: “We have a published data source, but after we refreshed the extract, the data in the dashbords isn’t updating!”. Why? Caching? A wrong connection? No – they had extracted the extract. As I’ve seen this mistake quite often, I’ll elaborate a bit.

      When you’re using a published data source (on Tableau Server or Cloud), the mode – live or extract – is defined in the data source. Afterwards, when connecting to the DS from a workbook, the connection has to be live, because you’re querying the DS directly in both cases. If it’s live, the queries to the database are sent through the DS definition, and if it’s an extract the data is queried from the extract on the server.

      The mistake is in thinking that because the data is extracted, the DS has to be defined as an extract within the workbook as well. That will actually create another extract, at the workbook level, that simply pulls all the data from the published DS and saves it within the workbook. And then, if you refresh the original DS data, the workbook is still using its own extract (which hasn’t been refreshed), and the dashboard data isn’t updated.

      So this is the correct configuration:

      In Tableau Desktop:

      And on the server it should look like this:

      And next time you encounter a workbook that’s “stuck” with outdated data, just make sure that you haven’t extracted the extract by mistake!