Home › Data Analytics › Tableau LOD Expression Returns Wrong Total Fix
Intermediate 6 min · September 23, 2026

Tableau LOD Expression Returns Wrong Total Fix

Scope totals with FIXED, INCLUDE, or EXCLUDE to fix wrong Tableau LOD totals.

N
Naren Founder & Principal Engineer

20+ years shipping production backend systems. Lessons pulled from things that broke in production.

Follow
✓ Production
production tested
September 27, 2026
last updated
2,085
articles · all by Naren
Before you start⏱ 15 min
  • ✓A Tableau workbook where you've built basic calculated fields
  • ✓Working familiarity with SUM and view totals
  • ✓Rough sense of how filters change visible rows
 ● Production Incident 🔎 Debug Guide
⚡Quick Answer
  • LOD totals go wrong when the expression's scope (FIXED, INCLUDE, EXCLUDE) disagrees with the view's level of detail or with dimension filters that FIXED silently ignores
  • Confirm fast: replicate the total with a WINDOW_SUM table calc on a small sample — if LOD and table calc disagree, the LOD scope or filter context is guilty
  • FIXED computes before dimension filters, so right-click must-have filters and choose Add to Context, then watch the total move when the filter toggles
  • INCLUDE adds finer grain than the view and EXCLUDE computes coarser than the view; pick the keyword whose grain matches the business question, not the view layout
✦ Definition~90s read
What is Tableau Level of Detail Expression Returns Wrong Total?

Level of Detail (LOD) expressions are Tableau's way of declaring a calculation's grouping level independently of the view's layout. FIXED computes at an absolute grain you name — { FIXED [Customer ID] : SUM([Sales]) } totals per customer on any sheet.

★
Imagine splitting a restaurant bill three ways while someone keeps changing who's at the table.

INCLUDE computes at the view's grain plus extra dimensions, going finer. EXCLUDE computes at the view's grain minus dimensions, going coarser. Introduced to solve multi-grain questions like 'each order's share of its customer total,' LODs are now the backbone of serious Tableau math.

Scope is governed by Tableau's order of operations. Data-source filters and context filters apply first, then FIXED LODs compute, then dimension filters, sets, and view layout, with INCLUDE/EXCLUDE computing after dimension filters. That ordering is the entire bug class in this article: FIXED totals ignore dimension filters by default, INCLUDE/EXCLUDE shift meaning as views change shape, and fine-grain FIXED values repeat across coarse rows where naive SUMs double-count them.

Verification comes from table calculations, which run last at pure view grain — WINDOW_SUM(SUM([Sales])) always mirrors visible rows, making it the perfect independent witness. The professional workflow is declare (LOD), witness (table calc), reconcile (match), and document (grain plus context in comments). Totals built that way survive filters, travel between sheets, and reconcile to the cent.

Plain-English First

Imagine splitting a restaurant bill three ways while someone keeps changing who's at the table. If your calculator locked in the guest list before the last two people sat down, every share is wrong. Tableau LOD expressions can lock in their grouping too early — FIXED totals compute before most filters apply — so the view shows one set of people and the total quietly counts another. The fix is telling the calculation which guest-list changes to respect.

Your LOD total looks authoritative and is wrong. The view shows regional sales summing to $2.1M, but your { FIXED : SUM([Sales]) } grand total insists on $2.8M. No error, no warning — just a confident number that disagrees with visible rows. This is Tableau's most expensive calculation bug because it never announces itself.

FIXED, INCLUDE, and EXCLUDE each declare a grouping level independent of the view, and that independence is both the power and the trap. The expression computes at its declared grain, the view renders at its own grain, and dimension filters apply at a third point in the pipeline. Any mismatch among the three produces plausible wrong numbers.

Analysts usually discover the damage downstream: a bonus paid on inflated totals, a forecast anchored to a denominator that ignored the region filter, a board slide where percentages sum to 140%. By then the LOD has been copied into five workbooks and nobody remembers which filter it was supposed to respect.

This article teaches scope the way the engine sees it. You'll learn exactly what each keyword computes, how filters interact with each, and the table-calc replication technique that proves any LOD correct in minutes. Wrong totals become diagnosable — and preventable.

Scope in One Paragraph: What FIXED, INCLUDE, and EXCLUDE Compute

FIXED declares absolute grain: { FIXED [Region] : SUM([Sales]) } totals per region no matter what the view holds. INCLUDE declares view-grain-plus: { INCLUDE [Customer] : SUM([Sales]) } computes at the view's dimensions plus Customer, going finer. EXCLUDE declares view-grain-minus: { EXCLUDE [Region] : SUM([Sales]) } computes at the view's dimensions without Region, going coarser. Three keywords, three relationships to the view.

Bare FIXED with no dimensions — { FIXED : SUM([Sales]) } — is the grand total at the whole-data level, the most copied and most dangerous LOD in circulation. It ignores every dimension filter by default, which is correct for a company-wide denominator and catastrophic for a filtered regional view. Know which population you mean before you type the colon.

Level of detail flows from these definitions, not from the view. A FIXED [Customer] total beside Order-level rows repeats the customer figure on each of their orders — correct behavior that looks like duplication to beginners. Summing those repeated cells double-counts; averaging or taking MIN of them is the right rollup. The grain you declared dictates the rollup you may use.

Order of operations completes the picture. FIXED computes after context filters and data-source filters but before dimension filters, sets, and view layout. INCLUDE and EXCLUDE compute after dimension filters, so they respect them. That single ordering fact explains nearly every 'my LOD ignores my filter' ticket.

Memorize the trio as absolute, finer, coarser — and FIXED as filter-blind by default. Every debugging step in this article is an application of those five words.

TABLEAU
1
2
3
4
5
6
7
8
9
10
11
// FIXED: absolute grain, ignores dimension filters by default
{ FIXED [Region] : SUM([Sales]) }

// INCLUDE: view grain PLUS Customer (finer than the view)
{ INCLUDE [Customer ID] : SUM([Sales]) }

// EXCLUDE: view grain MINUS Region (coarser than the view)
{ EXCLUDE [Region] : SUM([Sales]) }

// Grand total: whole-data level, most dangerous LOD in circulation
{ FIXED : SUM([Sales]) }
📊 Production Insight
Bare { FIXED : ... } grand totals are the most copied expressions in Tableau and the top source of filter-blind denominators on filtered dashboards.
🎯 Key Takeaway
FIXED is absolute grain, INCLUDE goes finer than the view, EXCLUDE goes coarser — and FIXED ignores dimension filters unless they're in context.

FIXED vs Dimension Filters: The Order of Operations Trap

Tableau filters apply in a strict pipeline: data-source filters, context filters, then FIXED LODs, then dimension filters, sets, and table calcs. FIXED sits mid-pipeline, blind to everything below it. A Region dimension filter shrinks rows but leaves every FIXED total counting the unfiltered population — numerators and denominators silently describe different worlds.

Context filters are the sanctioned override. Right-click > Add to Context promotes a filter above FIXED computation; the pill turns gray to show its status. Promote exactly the filters the business question requires: West-only attainment needs Region in context, while a company-wide benchmark denominator must keep Region as a dimension filter so FIXED keeps ignoring it.

Sets and combined fields sit below FIXED too, which surprises analysts migrating set-driven logic into LODs. A top-10-customer set won't constrain a FIXED total. Restructure with INCLUDE (which respects sets) or pre-filter via context, and verify the total moves when the set changes.

Parameters bypass the whole issue elegantly. Because LOD expressions can reference parameters directly, { FIXED : SUM(IF [Region Param] = [Region] THEN [Sales] END) } builds the filter into the computation itself. Parameter-driven LODs behave identically in every view, immune to pill placement — at the cost of single-select simplicity.

Audit every FIXED expression against its view's filter shelf before publishing. For each filter ask: should the total respect this? Context for yes, dimension for no, comment for the reasoning. Undecided filters are future incidents.

TABLEAU
1
2
3
4
5
6
7
// Filter-aware FIXED: Region must be a CONTEXT filter (gray pill)
{ FIXED [Customer ID] : SUM([Sales]) }
// Toggle test: change Region filter -> total MUST move.
// If frozen, the filter is a dimension filter: promote it.

// Parameter-driven alternative: immune to pill placement
{ FIXED : SUM(IF [Region] = [Region Param] THEN [Sales] END) }
📊 Production Insight
Gray pills are load-bearing: any FIXED denominator on a filtered dashboard without its filters in context is a wrong number waiting for month-end.
🎯 Key Takeaway
FIXED computes before dimension filters — promote respected filters to context, keep ignored ones as dimensions, and toggle-test every total.

INCLUDE and EXCLUDE: Relative Grain Done Right

INCLUDE and EXCLUDE derive grain from the view, which makes them flexible and layout-sensitive. { INCLUDE [Segment] : SUM([Sales]) } in a Region view computes per Region × Segment; move it to a Category view and it computes per Category × Segment. Same expression, different numbers — correct in both, confusing when copied between sheets.

INCLUDE shines for per-group averages: AVG({ INCLUDE [Order ID] : SUM([Sales]) }) gives average order value at whatever view level you slice, because the inner expression pins order grain while the outer AVG follows the view. That two-level dance is the canonical INCLUDE pattern; learn it once and reuse it everywhere.

EXCLUDE shines for share-of-parent math: SUM([Sales]) / SUM({ EXCLUDE [Sub-Category] : SUM([Sales]) }) shows each sub-category's share of its category total, adapting automatically as views drill. The denominator always sits one level above the view — until someone removes the parent dimension, collapsing denominator to grand total silently.

That layout sensitivity is the hazard. An EXCLUDE built in a Region × Segment view that gets reused in a Segment-only view now excludes a dimension that isn't there, returning identical values on every row. The calc didn't break; its frame of reference moved. FIXED with explicit dimensions is sturdier for expressions that travel between sheets.

Choose relative keywords for view-bound analysis that lives on one sheet, absolute FIXED for shared library calculations. And replicate either way — layout changes are silent, but a WINDOW_SUM witness column is not.

TABLEAU
1
2
3
4
5
6
7
8
// Average order value at any view level (canonical INCLUDE)
AVG({ INCLUDE [Order ID] : SUM([Sales]) })

// Share of parent category (canonical EXCLUDE)
SUM([Sales]) / SUM({ EXCLUDE [Sub-Category] : SUM([Sales]) })

// Travel-safe FIXED equivalent: explicit grain, layout-proof
SUM([Sales]) / SUM({ FIXED [Category] : SUM([Sales]) })
📊 Production Insight
EXCLUDE expressions break silently when reused in views missing their reference dimension — the denominator collapses a level with no error.
🎯 Key Takeaway
INCLUDE for finer-than-view, EXCLUDE for coarser-than-view on one sheet; FIXED with explicit grain for calculations that travel.

Replicating Any LOD With Table Calculations

WINDOW_SUM is your independent witness. Because table calcs run after all filters at view grain, WINDOW_SUM(SUM([Sales])) always reflects exactly what the view shows. Place it beside any LOD total on a small filtered sample: agreement proves scope correct; divergence convicts the LOD's grain or context. No theory required — just two columns that must match.

Compute Using is the whole technique. Set it to the view's partitioning dimensions so the window covers the right scope; a misconfigured Compute Using makes the witness lie too. Start with Table (Across) on a simple crosstab, verify, then graduate to Specific Dimensions for complex layouts. When in doubt, show the Compute Using explicitly rather than trusting defaults.

Sampling keeps it fast. Replicate on a two-region, three-month slice — small enough to hand-verify, rich enough to expose grain errors. Hand-sum the visible rows on paper once; that thirty-second check has caught more scope bugs than any amount of staring at formulas.

Keep the witness permanently on a hidden validation sheet per workbook. Every future edit to the LOD, the view, or the filters re-runs the trial automatically: columns agree, ship it; columns diverge, investigate. Regression testing for dashboards costs one hidden sheet.

Table calcs can't replace LODs — they depend on view layout and vanish with dimensions — but as a verification instrument they're unmatched. The LOD declares intent; the table calc testifies to outcome. Ship only when both agree.

TABLEAU
1
2
3
4
5
6
7
// Witness column: reflects exactly what the view shows
WINDOW_SUM(SUM([Sales]))
// Compute Using: Table (Across) on the validation crosstab

// Share check: LOD denominator vs witness must match
SUM({ FIXED [Region] : SUM([Sales]) })
WINDOW_SUM(SUM([Sales]), FIRST(), LAST())
📊 Production Insight
A hidden validation sheet with WINDOW_SUM witnesses beside every LOD total converts silent scope drift into an automatic visible mismatch on every edit.
🎯 Key Takeaway
Prove every LOD with a WINDOW_SUM witness on a small sample — agreement ships, divergence investigates.

Nested LODs and Measure Rollups: Counting Without Double-Counting

FIXED at fine grain beside coarse views repeats values: a customer total stamped on each of their orders. SUM over those repeats multiplies the truth by the row count — the classic LOD double-count. The rollup must match the grain: AVG, MIN, or MAX over repeated FIXED values, never SUM, unless you've deduplicated first.

Nested LODs layer grains deliberately: { FIXED [Region] : AVG({ FIXED [Customer ID] : SUM([Sales]) }) } averages customer totals within each region. The inner expression fixes customer grain; the outer aggregates those results at region grain. Read inside-out, verify inside-out: validate the inner LOD alone before trusting the outer average.

COUNTD inside LODs needs the same care. { FIXED [Region] : COUNTD([Customer ID]) } counts distinct customers per region correctly because the LOD groups before counting. But COUNTD over a blended or pre-aggregated source inherits that source's grain limits — distinct counts of summaries undercount, exactly as blending does.

Late-arriving filter dimensions inside FIXED declarations are a subtle trap: { FIXED [Region], [Segment] : SUM([Sales]) } hard-codes both dimensions, so a view filtered to one segment still totals correctly — but a view sliced by an unlisted third dimension repeats subgroup-blind values. List every grain dimension the question needs; omit none.

When nesting exceeds two levels, split the expression. Named intermediate fields — [Customer Total], then [Regional Avg of Customer Totals] — let you validate each layer's witness column independently. Readable LODs are debuggable LODs.

SQL
1
2
3
4
5
6
7
8
9
10
-- The double-count, in SQL terms: repeating a grouped value
-- across detail rows, then summing the repeats.
SELECT region,
       AVG(customer_total) AS avg_customer_sales,  -- correct rollup
       SUM(customer_total) AS inflated_double_count -- the trap
FROM (SELECT region, customer_id,
             SUM(sales) AS customer_total
      FROM orders
      GROUP BY region, customer_id) t
GROUP BY region;
⚠ Never SUM a Repeated FIXED Value
A customer-level FIXED total stamped on order-level rows repeats per order. Summing the repeats multiplies the truth. Roll repeated LOD values with AVG, MIN, or MAX — or deduplicate first — and verify against a hand-summed sample.
📊 Production Insight
Double-counted FIXED rollups inflate revenue in direct proportion to order frequency, so your best customers distort the total most — exactly backwards from safe.
🎯 Key Takeaway
Match the rollup to the grain: AVG/MIN/MAX over repeated FIXED values, validate nested LODs inside-out, and split deep nesting into named fields.

A Scope Checklist Before Any LOD Ships

Every LOD deserves a five-line audit before it reaches a shared dashboard. One: name the grain in a comment — which dimensions, which population. Two: list every view filter and mark respect-or-ignore with context status to match. Three: replicate with WINDOW_SUM on a sample and record agreement. Four: toggle each filter and watch the total move or hold as designed. Five: state the rollup rule for repeated values.

Shared LOD libraries multiply the value. Keep canonical expressions — average order value, share of parent, cohort totals — in one documented workbook with their grain, context requirements, and witness sheets. New analyses copy from the library instead of reinventing scope, and fixes propagate from one maintained source.

Version your assumptions, not just formulas. When a FIXED denominator intentionally ignores Region for a company-wide benchmark, that intent belongs in a comment; otherwise the next analyst 'fixes' it into context and breaks the benchmark. Documented intent survives staff turnover.

Rehearse the failure modes with your team. Show them a frozen FIXED total, a collapsed EXCLUDE, a double-counted SUM — live, on real data. Analysts who've seen each failure once diagnose it in minutes forever. Scope literacy compounds across a team faster than any documentation.

Scope discipline is what separates analysts who build totals from analysts who build trusted totals. The engine always computes exactly what you declared. Make sure you declared what the business asked.

📊 Production Insight
Teams with a shared LOD library and witness sheets ship scope bugs once; teams without them ship the same bug once per analyst per quarter.
🎯 Key Takeaway
Grain comment, filter audit, WINDOW_SUM proof, toggle test, rollup rule — five lines that retire wrong-total incidents.
● Production incidentPOST-MORTEMseverity: high

The $700K Bonus Pool Inflated by a Filter-Blind LOD Total

Symptom
The West region's quarterly bonus pool calculated 34% higher than finance's independent figure — a $700K gap. The dashboard's visible rows summed correctly, but the { FIXED : SUM([Sales]) } denominator used for attainment percentages reflected all regions. Every rep's attainment looked better than reality, and payouts were nearly approved on the inflated base.
Assumption
The analyst assumed the Region filter on the view applied to the whole dashboard equally, as filters do for ordinary measures. The LOD expression was copied from a company-wide view where ignoring filters was correct, and nobody re-examined its behavior when the workbook was filtered to West. Filter pills look universal; LOD scope is not.
Root cause
FIXED LOD expressions compute before dimension filters in Tableau's order of operations, so the regional filter shrank the visible rows while the FIXED denominator kept counting all regions. Numerator and denominator described different populations. The mismatch was invisible because both numbers rendered cleanly with no error or warning.
Fix
The team added the Region filter to context (right-click > Add to Context), which forces it to apply before FIXED computation, and the denominator dropped to the correct West-only figure. They added a WINDOW_SUM replication column on the validation sheet so any future scope drift shows as an immediate mismatch. The LOD library now tags every FIXED expression with its required context filters in comments.
Key lesson
  • FIXED means fixed against dimension filters until you say otherwise — every FIXED expression needs an explicit decision about which filters belong in context.
  • Never ship a denominator you haven't replicated: a WINDOW_SUM column beside any LOD total turns silent scope bugs into visible mismatches.
  • Copied LODs carry their original scope assumptions with them, so each reuse must re-answer which population the total should describe.
Production debug guideFive scope checks that prove which grain your total actually computed at.5 entries
Symptom · 01
LOD total disagrees with the sum of visible rows
→
Fix
Replicate with a table calc on a tiny sample: add WINDOW_SUM(SUM([Sales])) beside your LOD total with Compute Using set to the view's dimensions. If both agree, the LOD scope matches the view and the problem is elsewhere; if they diverge, the LOD grain or filter context is guilty. Keep this replication column on a hidden validation sheet permanently — it's your cheapest regression test.
Symptom · 02
FIXED total ignores a dimension filter that visibly filters rows
→
Fix
Right-click the filter pill and select Add to Context — it turns gray on the shelf, confirming it now applies before FIXED computation. Toggle the filter and watch the LOD total: if it moves, context fixed it. If business logic says the total should ignore some filters (e.g. company-wide denominator) but respect others, split them deliberately — context for respected ones, dimension for ignored ones — and comment the decision.
Symptom · 03
INCLUDE total returns row-level-looking values instead of group totals
→
Fix
Check what the view already contains: INCLUDE adds dimensions to the view's grain, so if the view already includes that dimension, the expression computes at row level and looks broken. Remove the redundant dimension or switch to FIXED with the exact grain you need. Confirm by listing the expression as a discrete pill and counting marks — the mark count reveals the true computation grain.
Symptom · 04
EXCLUDE total repeats the grand total on every row instead of subgroup values
→
Fix
EXCLUDE removes dimensions from the view's grain, so excluding a dimension the view doesn't contain changes nothing — every row gets the same number. Verify which dimensions the view actually holds, then exclude only those present. Alternatively rewrite as FIXED listing the exact dimensions to keep, which is explicit about grain instead of relative to the layout. Validate by filtering to one subgroup and checking the value matches a manual total.
Symptom · 05
LOD works in one sheet but returns wrong numbers when reused elsewhere
→
Fix
The expression's grain is absolute but the new view's grain and filters differ — scope assumptions didn't travel with the copy. Audit the new view's dimensions and context filters against the original, adjust keywords or context accordingly, and re-run the WINDOW_SUM replication there. Maintain a shared LOD library with each expression's intended grain and required context filters documented in comments.
LOD Scope Failures Compared
Root CauseHow to ConfirmFixPrevention
FIXED ignores dimension filtersToggle filter: rows move but LOD total frozenAdd respected filters to context (gray pill)Audit every filter as respect-or-ignore before publishing
INCLUDE/EXCLUDE frame shifted with viewSame calc returns different grain on another sheetRewrite travelers as FIXED with explicit dimensionsKeep relative LODs sheet-bound; library stores FIXED forms
SUM over repeated FIXED valuesTotal scales with row count; MIN/AVG disagree with SUMRoll repeats with AVG/MIN/MAX or deduplicate firstDeclare the rollup rule in a comment on every fine-grain LOD
Copied LOD carries old scope assumptionsWorks on original sheet, wrong on the new view/filtersRe-audit grain and context for the new view; re-replicateShared library documents grain plus required context filters
⚙ Quick Reference
5 commands from this guide
FileCommand / CodePurpose
{ FIXED [Region] : SUM([Sales]) }Scope in One Paragraph
{ FIXED [Customer ID] : SUM([Sales]) }FIXED vs Dimension Filters
AVG({ INCLUDE [Order ID] : SUM([Sales]) })INCLUDE and EXCLUDE
WINDOW_SUM(SUM([Sales]))Replicating Any LOD With Table Calculations
SELECT region,Nested LODs and Measure Rollups

Key takeaways

1
FIXED declares absolute grain and ignores dimension filters; INCLUDE/EXCLUDE float relative to the view.
2
Promote respected filters to context; keep intentionally ignored ones as dimension filters with comments.
3
Prove every LOD with a WINDOW_SUM witness on a small sample before it ships.
4
Never SUM repeated fine-grain FIXED values
roll with AVG, MIN, or MAX.
5
Traveling calculations should be FIXED with explicit grain, not view-relative EXCLUDE.
6
Document grain, context, and rollup on every shared LOD so the next analyst inherits intent.

Common mistakes to avoid

5 patterns
×

Copying a FIXED denominator into a filtered view without review

Symptom
Attainment percentages exceed reality because the denominator counts all regions while rows show one.
Fix
Promote respected filters to context, keep benchmark filters as dimensions, and toggle-test the total.
×

SUMming a customer-level FIXED total on order-level rows

Symptom
Revenue inflates in proportion to order frequency — best customers distort the total most.
Fix
Roll repeated values with AVG, MIN, or MAX; verify against a hand-summed sample before publishing.
×

Reusing EXCLUDE expressions across views with different dimensions

Symptom
Every row shows the same value because the excluded dimension isn't in the new view.
Fix
Rewrite traveling calcs as FIXED with explicit grain instead of view-relative EXCLUDE.
×

Trusting Compute Using defaults on the witness column

Symptom
WINDOW_SUM witness disagrees for partitioning reasons, sending you chasing a healthy LOD.
Fix
Set Compute Using explicitly to the view's dimensions, starting with Table (Across) on a simple crosstab.
×

Shipping LODs with no grain comment or filter audit

Symptom
The next analyst 'fixes' an intentional scope decision and breaks a working benchmark.
Fix
Comment grain, context requirements, and rollup rule on every shared LOD; keep witness sheets alongside.
INTERVIEW PREP · PRACTICE MODE

Interview Questions on This Topic

Q01JUNIOR
What grain does { FIXED [Region] : SUM([Sales]) } compute at, regardless...
Q02JUNIOR
Why does a FIXED total ignore your Region filter?
Q03SENIOR
How do you independently verify an LOD total is correct?
Q04SENIOR
When would you choose EXCLUDE over FIXED for share-of-total math?
Q05SENIOR
A nested LOD averages customer totals per region but the figure drifts m...
Q01 of 05JUNIOR

What grain does { FIXED [Region] : SUM([Sales]) } compute at, regardless of view?

ANSWER
Per region — FIXED declares absolute grain independent of view layout. Each region's total repeats on that region's rows, so rollups over it must use AVG/MIN/MAX rather than SUM to avoid double-counting.
FAQ · 6 QUESTIONS

Frequently Asked Questions

01
What's the fastest test for a suspect LOD total?
02
Should totals use FIXED or table calculations?
03
Why do my percentages sum to more than 100%?
04
Can LOD expressions reference each other?
05
Do INCLUDE/EXCLUDE respect dimension filters?
06
How do I stop double-counting a FIXED total on detail rows?
N
Naren Founder & Principal Engineer

20+ years shipping production backend systems. Lessons pulled from things that broke in production.

Follow
✓ Verified
production tested
September 27, 2026
last updated
2,085
articles · all by Naren
🔥

That's Tableau. Mark it forged?

6 min read · try the examples if you haven't

←
Previous
Tableau Extract Refresh Failed on Server
4 / 5 · Tableau
Next
Tableau Relationships vs Joins — Duplicated Measures
→