Skip to main content

Tableau Feed

Treten Sie mit anderen Trailblazers in Verbindung. Stellen und beantworten Sie Fragen, um Ihre Fertigkeiten und Ihr Netzwerk auszubauen.

Hello, 

 

My question on the topic detailed below is : is this the expected behavior on Tableau Server or is there something to investigate? 

  

On Tableau Desktop, when you have a table with lots of values, the header values are always on sight even if the number of underlining rows is much higher than the number of rows you can see immediately. To illustrate, you can see

Austria here even if the formatting is in the Middle, and that the middle of that row is much lower in the sheet :Header values visible in Desktop but not on Server

 

When publishing on server, no matter what the formatting is, the behavior is not the same. I.e. it will only show the value if you are viewing the top, middle or bottom of that row's results depending on your formatting choice : 

image.png

 

 

#Tableau Server

0/9000

some of the rep wantes to see their territory data on Pulse metrics. 

Is it possible to do this on Tableau Pulse ? 

or is their any capability of pulse we can achieve. 

can you share a scenario or solution if I can achieve this? 

 

#Tableau Desktop & Web Authoring  #Tableau Pulse

9 Antworten
  1. 20. Aug., 07:23

    Hi Himshikha - good news that it works for you and your colleagues; that tells us the RLS logic itself is sound and it is now down to just that one user. When a single follower sees blank/error while everyone else is fine, it is almost always one of two things - and the blank-vs-error distinction tells you which: 

     

    1) An ERROR (red banner / cannot load the metric) is usually a data source PERMISSION issue, not RLS at all. This is the number-one gotcha: adding someone as a Pulse follower does NOT grant them access to the published data source the metric is built on. That one rep needs at least View (and typically Connect) permission on the underlying published data source, plus a site role that allows it (a licensed Viewer/Explorer, not Unlicensed). Grant her access to the data source and the error should clear. 

     

    2) A truly BLANK metric (loads fine, just no numbers) is an RLS entitlement MISMATCH - her Tableau identity does not exactly match the value your user filter compares against. USERNAME() returns her Tableau Cloud sign-in identity (usually the full email), and the match is exact and case-sensitive. So if your Territory Owner / entitlement value is her display name, an old email, a different domain, or has a stray space or different capitalization, the filter returns zero rows for her - blank. Her name showing in Tableau is not enough; the value in the DATA has to equal her USERNAME() character-for-character. 

     

    Fast way to tell them apart and pinpoint it: open the published data source (or the workbook) as the owner, drop USERNAME() and your Territory Owner field side by side on a sheet, then use the 'View As / filter as user' option to impersonate her. You will immediately see whether her USERNAME() finds a matching row (a data/mapping problem = blank) or whether it throws a permission error (an access problem). That one check usually settles which of the two it is. 

     

    Diego's advanced-definition idea is good as well, but that is a newer Pulse capability still rolling out - your data-source user-filter approach is the right one to get working now. 

     

    If this helps, please mark it as the Best Answer so it helps the next person - thanks :)

0/9000

Hi everyone, 

I’m building a Sankey chart in Tableau and I’m struggling with the correct percentage labels for each level. 

My data structure is a pre-aggregated funnel table with these fields: 

  • ds
  • Step1
  • Step2_Filter
  • Step2
  • Step3
  • Step4
  • users
  • Table Name

  

The Sankey is built using duplicated rows via Table Name: 

 

  • Orders
  • Orders1

  

Then I use a Path calculation to create the left/right side of the polygon: 

 

// Path

IIF([Table Name] = {MIN([Table Name])}, 0, 97)

  

Path is then converted to Path (bin) with bin size 1. 

  

The funnel logic is roughly like this: 

 

  • Step1: No Order / With Order
  • Step2_Filter: Card / Pip
  • Step2: Pip Enabled / Pip Disabled / Card Enabled / Card Disabled
  • Step3: ... → Pip Confirm, ... → Card Confirm, ... → No Confirm
  • Step4: ... → Purchased, ... → Lost after Confirm, or NULL for No Confirm

  

Example filtered view: 

 

Step1 = No Order

Step2_Filter = Pip

  

Then the first visible split is: 

 

Pip Enabled

Pip Disabled

  

I want the labels to show users and percentages correctly at each level: 

 

  1. For Step2, I need each branch as a percentage of the selected base:

 

Pip Enabled / (Pip Enabled + Pip Disabled)

Pip Disabled / (Pip Enabled + Pip Disabled)

 

  1. For Step3, I need each branch as a percentage of its parent Step2 node:

 

Pip Enabled → Pip Confirm / Pip Enabled

Pip Enabled → No Confirm / Pip Enabled

Pip Enabled → Card Confirm / Pip Enabled

 

  1. For Step4, I need each branch as a percentage of its parent Step3 node:

 

Pip Enabled → Pip Confirm → Purchased / Pip Enabled → Pip Confirm

Pip Enabled → Pip Confirm → Lost after Confirm / Pip Enabled → Pip Confirm

  

The Sankey polygon itself works, but the percentage labels are incorrect because the view has multiple technical dimensions: 

 

  • Path (bin)
  • Table Name
  • Step2
  • Step3
  • Step4
  • table calculations like INDEX(), RUNNING_SUM(), WINDOW_MAX()

  

Because of this, when I try to calculate percentages in Tableau, the denominators are either duplicated or calculated at the wrong partition level. 

  

Current core Sankey calculations: 

 

// Flow Size

SUM([users]) * (1 - [Whitespace]) / TOTAL(SUM([users]))

// Position-L

RUNNING_SUM([Flow Size]) - [Flow Size] + [Whitespace L]

// Position-R

RUNNING_SUM([Flow Size]) - [Flow Size] + [Whitespace R]

// Curve Max Win

[Position Max Win L] + ([Position Max Win R] - [Position Max Win L]) * [Sigmoid]

// Curve Min Win

[Position Min Win L] + ([Position Min Win R] - [Position Min Win L]) * [Sigmoid]

// Curve Polygon Win

IIF(INDEX() >= 50, [Curve Min Win], [Curve Max Win])

  

For label positioning I currently use something like: 

 

// Label

IF [t] = 6 THEN WINDOW_MAX([Bar Position]) END

  

What I need help with: 

  

How should I calculate the correct denominators for each Sankey level so that: 

 

  • Step2 % = Step2 users / selected base users
  • Step3 % = Step3 users / parent Step2 users
  • Step4 % = Step4 users / parent Step3 users

  

Should this be done in Tableau using table calculations, or is it better to pre-calculate parent denominators in SQL and only use Tableau for rendering? 

  

If SQL pre-calculation is the better approach, what grain should the SQL output have to work correctly with Tableau Sankey densification? 

  

How to calculate correct parent-level percentages in a Tableau Sankey chart with Path bins and duplicated rows?

 

 

 

#Tableau Cloud

1 Antwort
0/9000

Hi everyone, I’m looking for some help with a Tableau dashboard I’m building. I’ve attached screenshots of my current worksheets and the dashboard layout.

 

I have

multiple athletes displayed on the same dashboard, and each athlete has their own position filter. For example, Athlete 1 could be benchmarked as a GS while Athlete 2 could be benchmarked as a GA.

 

For each statistic, I want the athlete’s

AVG/Q to automatically colour:

  • 🟢 Green = above their selected position’s League Avg/Q
  • 🟡 Yellow = equal to the League Avg/Q
  • 🔴 Red = below the League Avg/Q

The main issue is that the athlete AVG/Q and League Avg/Q are on separate worksheets. I need the position selection to change the League Avg/Q benchmark, but I don’t want it to filter the athlete’s own statistics, as their AVG/Q should remain their total for the match.

 

I also need each athlete’s position selection to work

independently. Changing Athlete 1 from GS to GA, for example, shouldn’t change the benchmark selected for Athlete 2.

I need this to work across multiple stats such as CPR/Q, Feeds/Q, Assists/Q, Gains/Q, etc.

 

What would be the best way to set this up in Tableau so the conditional colouring works correctly?

Thanks for any help! 

 

#Tableau Desktop & Web Authoring

1 Antwort
  1. Heute 05:58

    I would suggest that you attach your packaged workbook (twbx) so that any solution suggested is relevant and works for you. 

0/9000

Hello all, 

 

Having an issue transferring my workbooks from my old computer (2019 MBP Intel) to my new one (2024 M4). 

 

I use the Singlestore connectors and on my old device and it works fine (with the driver I have downloaded) 

 

I downloaded the default one from the Tableau website for the new computer and it is not working (continues to say its out of date) and the link to github is from 2021. 

 

I have tried various workarounds but cannot get them to work properly. I have several questions: 

 

1) Is there a simple way to see what driver Tableau is using for the old device? Or at least confirm the folder location of said driver I have several downloaded and they are in different spots so its hard for me to know exactly which one it is utilizing. Perhaps I can then just transfer that driver to my new device. 

 

2) I did have success with the Singlestore JDBC driver BUT that will require me to reconnect all my connections (both direct and custom SQL) which will take a long time for all my deployments. Is there a simple way to switch those connections from Singlestore to Singlestore JDBC that isn't just a full swap 

 

3) Is there a possibility that a MySQL driver will do the trick?  

 

Appreciate any responses in advance! Hopefully what I outlined makes some sense. 

 

 

 

#Tableau Desktop & Web Authoring

1 Antwort
  1. Heute 05:52

    SingleStore JDBC is the way to go. 

    The ODBC driver is for x86 (Intel) only -- no way to run it on Apple Silicon after macOS 27+.

0/9000

Hi I have one issue to filter my KPIs and table as well. 

 

I need to filter by % change and I use the field itself, this option has one drowback now, cause some combinations of DUNS and Local Nr have no tunover so there is no % change. this will be filtered out by default so I set it as all values. in this case I see such records but moving the slider they need to be filtered out as well. Second issue is the calculation in KPI. the quick filter has no effect. When % change is above -50 there should be 1 DUNS and 6 817 819 as Allocation in the KPIs.  why is that and how to filter the KPIs and table properly 

 

#Tableau Desktop & Web Authoring

5 Antworten
0/9000

Hi,  

I'm trying to embed a Tableau Dashboard into a Sharepoint page. I have ironed out connection and permissions issues and all is now working well.. expcept.. when somebody first lands on the Sharepoint page instead of seeing the dashboard they see a "Sign in to Tableau" server message / button. If they press this, the dashboard is then displayed, without the need for them to enter any further credetials. So its not a huge issue, but also not a great user experience. Does anybody know a way I can prevent the Tableau sign in page stage please? 

 

#Tableau Server

5 Antworten
  1. Heute 04:45

    This sounds like an authentication/session issue. Check your Tableau SSO or Connected Apps configuration, and also make sure browser third-party cookies aren’t blocking the Tableau session. Since clicking “Sign in” immediately works without credentials, the user is likely already authenticated, but Tableau isn’t recognizing the session on initial load. 

0/9000

Litify + Tableau + Salesforce

I’m trying to pull information from Intakes and Matters and connect the two using a join, but I can’t seem to find the correct key/field to link them.

I reached out to Tableau Support, and they told me I would need to use SQL to pull the Matter information and that I wouldn’t be able to use joins.

Has anyone else run into this issue or found a way to connect Intakes and Matters in Tableau?

Any advice on which fields/keys to use would be greatly appreciated! 

 

#Tableau Desktop & Web Authoring

1 Antwort
  1. 26. Aug., 18:33

     Hi Katherine, 

    I've seen this exact pain point come up with Litify orgs before — it's not that there's no relationship, it's that Tableau's native Salesforce connector doesn't always expose the Litify managed-package lookups the same way it does standard Salesforce lookups, especially when the field lives on the "far" side of a conversion (Intake → Matter). 

    A few things to check/try: 

    1. Look for the lookup field directly on Intake or Matter. In most Litify implementations, the Intake object has a lookup field back to the Matter it converted into — commonly something like litify_pm__Matter__c (or a custom-named equivalent if your admin renamed it). Sometimes it's the reverse — the Matter has an Intake__c/litify_pm__Intake__c field pointing back to the originating Intake. Go into Setup → Object Manager → Intake → Fields & Relationships (and the same for Matter) and search for anything with "Intake" or "Matter" in the field name — a lot of firms customize this field's label so it doesn't show up obviously as "Matter" in the picklist Tableau shows you.
    2. If there's no direct lookup, it may be conversion-only. Some Litify configs don't keep Intake and Matter linked via a stored lookup at all — the "conversion" is really just field-mapping data across at creation time, with no persistent relationship ID kept afterward. If that's the case, Support's answer (use SQL, no join) is technically correct because there's genuinely no key Tableau's join UI can see/use. In that scenario, people usually link via a shared Party/Client record (the Account or Contact tied to both) or via a common custom field like Case Number/Matter Number if your intake form captures it.
    3. Custom SQL isn't as bad as it sounds — since you're already being pointed there, you can just write something like:

     

    sql

    SELECT i.*, m.*

    FROM litify_pm__Intake__c i

    JOIN litify_pm__Matter__c m ON i.litify_pm__Matter__c = m.Id

      

    (substitute the actual field names once you confirm them in Object Manager). This bypasses whatever limitation is stopping the point-and-click join from finding the relationship. 

     

    1. Alternative: build a formula field or reporting layer in Salesforce first. Some teams create a custom "Bridge" object or just add a formula/lookup field that copies the Matter Id onto Intake (or vice versa) specifically so BI tools like Tableau can join cleanly without needing SQL. If you have admin access, this is often less brittle long-term than maintaining custom SQL in every workbook.
0/9000

I have a dashboard with 3 separate crosstabs stacked vertically. I have the same columns in all, only some filtering differs so I want to keep the columns aligned.  

One of these crosstabs can be very long and a scroll bar appears. How can I keep the columns fixed and have the scrollbar appear to the right of the fixed space. 

I am on cloud, and desktop is also 26.2. This used to work in previous releases using standard fit and fixing the columns, but in 26.2 the viz resized with the scrollbar instead of drawing the scrollbar outside of the columns 

 

#Tableau Desktop & Web Authoring

1 Antwort
  1. 26. Aug., 18:32

    Hey Matz, 

    Yeah, I've run into this too — sounds like a regression rather than something you're doing wrong. The "Standard" fit + "Entire View" combo used to keep fixed columns pinned and push the vertical scrollbar out past the last column, but in 2026.2 the scrollbar seems to be eating into the crosstab's own width and forcing a resize/reflow of the columns instead of sitting outside them. A few things worth trying while you wait on a possible fix: 

    1. Double-check the fit setting per sheet. Right-click the crosstab → make sure it's still set to "Standard" (not "Fit Width" or "Entire View") — sometimes upgrades quietly reset this.
    2. Try fixing the container width, not just the columns. Put each crosstab in its own vertical container with a fixed/set height and width, rather than letting it float in the dashboard. Sometimes forcing the outer container size stops Tableau from trying to "helpfully" resize the inner viz to fill the space when the scrollbar appears.
    3. Add a floating layout container for just the long crosstab and give it a fixed pixel width slightly wider than the sum of your column widths, so there's room reserved for the scrollbar to render outside the last column rather than overlapping it.
    4. Test with "Show scrollbars" behavior — under the crosstab's Format pane there's sometimes a difference in how it handles overflow depending on whether it's inside a horizontal layout container vs. placed directly. Moving it out of a nested container (if you have one) has fixed similar column-shift issues for others.
    5. File it as a bug. This smells like a genuine regression tied to 2026.2's rendering engine changes rather than an authoring mistake on your end, especially since you said it worked fine on prior versions with the exact same setup. Worth opening a case with Salesforce/Tableau Support and referencing that it's reproducible on both Desktop and Cloud at 26.2 — that combo (same behavior across two platforms) usually gets bugs escalated faster than "it just looks off."
0/9000

Hello Salesforce Developer Community,

We are optimizing background listener stability and webhook handling when syncing lead payloads into Salesforce CRM endpoints.

Technical Setup:

  • Our integration layer at Frontline Sales Consultancy (flsc.co.uk) triggers automated sales notifications and syncs inbound lead pipelines via Salesforce REST Webhooks.
  • Listener sockets are configured using TLS 1.3 encryption over secure HTTPS.

The Issue:

  1. Under high concurrent transaction spikes, external POST webhook listeners occasionally hit HTTP 504 gateway timeout thresholds before acknowledging payload completion.
  2. Direct REST API calls to the org endpoints resolve normally under 150ms.
  3. Are there recommended Apex asynchronous queueable job patterns or buffer queue settings to optimize inbound payload ingestion without dropping connection sockets?

Any advice on managing high-volume asynchronous API triggers would be appreciated!

Thanks!  

 

#Salesforce Developer  #Tableau APIs & Embedding  #Integration

1 Antwort
  1. 26. Aug., 17:03

    Hey Tony, 

     

    The core fix here is architectural: your Apex REST endpoint should do almost nothing synchronously. Right now, if your handler is doing lead validation, dedup logic, or DML inline before returning a response, that's what's blowing past the 504 threshold under load, real business logic execution easily drifts past 2-3 seconds, which the gateway treats as a dropped connection. 

     

    Recommended pattern: 

    1. Inbound Apex REST method only: validates the payload/signature, publishes a Platform Event with the raw data, and returns HTTP 200 immediately. Nothing else happens in that thread. 

    2. A separate Platform Event trigger picks up the event asynchronously, does your actual business validation, then enqueues a Queueable job (implementing Queueable, Database.AllowsCallouts if you need outbound calls) to do the real processing/DML. 

    3. Cap callouts below Salesforce's 100-per-transaction limit, chain overflow records to a new Queueable automatically rather than dropping them. 

    4. If Apex's async queue itself hits a capacity rejection under heavy concurrent load, catch that exception and fall back to a Scheduled job (e.g., retry in ~20 seconds) so nothing gets silently dropped. 

     

    This decouples network response time from your actual processing time entirely, so gateway timeouts stop being a factor regardless of how complex the downstream logic is. Your observation that direct REST calls resolve under 150ms but webhooks spike under concurrency confirms it's specifically the synchronous processing inside the handler causing the bottleneck, not the API layer itself. 

     

    Also worth adding: idempotency (dedupe on a unique payload ID) since Platform Events and async retries can occasionally redeliver, and Named Credentials for any outbound calls so secrets stay out of code.

0/9000