Salesforce Tableau Data Analyst study materials
Salesforce Tableau Data Analyst study resources

Bimodal Store Performance and a Mean That Misleads

Salesforce Tableau Data Analyst · Put your knowledge to work in context.

All case studies

Bimodal Store Performance and a Mean That Misleads

An analyst is preparing a store-performance review for a 1,800-store retail chain using 18 months of daily sales, about 985,000 rows. The COO has asked for "the average daily sales per store" to anchor next year's target. Across stores, the mean daily sales is $8,400 and the median is $4,100. A histogram of average daily sales per store is clearly bimodal, with peaks near $2,800 and $11,500. Two further facts: 12 stores record exactly zero every Sunday but normal volume Monday through Saturday, and those 12 sit in the low peak. The COO wants one number, one chart, and no caveats.

1. Which number and which chart do you put in front of the COO, and how do you justify the gap between $8,400 and $4,100 without losing the room?

Read the worked answer

The number

Lead with the median ($4,100) as the summary of a typical store, and pair it with the two peak values. A mean roughly double the median plus a bimodal distribution means the mean is describing a store that does not exist - it sits in the trough between two populations. Quoting $8,400 as "the average store" would set a target that the majority of the estate cannot reach and would tell high-volume stores they are underperforming against a bar that was never theirs.

The chart

A histogram of average daily sales per store, with the two clusters called out and labelled, plus the median line and mean line both drawn. This is the single view that explains the gap without a caveat paragraph - the reader sees the trough and understands immediately that the mean is an artifact of mixing two formats.

The justification, in one sentence

"Most of our stores cluster around $2,800 and a smaller group around $11,500; the average of $8,400 falls in the gap between them, so the median store does $4,100 - and a single target for all 1,800 stores would be wrong for nearly every one of them."

What to avoid: a bar chart of one aggregate (hides the shape entirely), a pie, or a box plot as the opening visual - a box plot is the right second chart, not the first.

2. How would you establish what causes the bimodality and whether it is a real business split or an artifact of the data?

Read the worked answer

Treat it as a hypothesis test, not a story

Bimodality usually comes from one of three sources: a genuine structural split (store format, size, catchment), a measurement difference (different POS systems, currency, or a feed that reports net vs gross), or a data artifact (partial periods, closed days, duplicated rows).

Sequence

  1. Profile the distribution first. Bucket stores by average daily sales and count them. Two clean modes with a genuine trough is structural; a smear with a lump on the end is usually an artifact.
  2. Add candidate explanatory fields one at a time and re-run the histogram colored by that field: store format/metro vs rural, square footage, selling area, number of registers, opening year, replenishment model. A field is the explanation if it separates the two modes cleanly - color the histogram by it and see whether the colors band rather than mix.
  3. Test the measurement hypothesis. Compare a few stores from each peak against source-system reports for the same week. If the high peak is exactly 2× the low peak for comparable stores, suspect a duplicated row per transaction or a gross-vs-net reporting difference rather than genuinely better stores.
  4. Test for partial periods. Stores opened or closed mid-window will drag toward the low peak. Check first and last transaction dates per store, and restrict to stores with complete periods before drawing conclusions.
  5. Confirm with an independent measure - transactions per day or units per day. If Sales is high but transactions are not, it is price/mix; if both are high, it is volume. That distinction changes the target-setting conversation.

Deliverable: a segmented histogram plus a one-line split ("$2,800 cohort = small-format, $11,500 cohort = large-format") and separate targets per segment, rather than a single number forced to cover both.

3. The 12 stores with zero every Sunday: how do you determine whether that is a closure or a data failure, and how do you handle it in the analysis and the target?

Read the worked answer

Diagnose

Zero is a value, not a missing value - and that is the problem, because it looks like a legitimate observation to every aggregate downstream. Distinguish the two cases:

  • Check the operational record. Open/closed status per store per day, mall or centre trading hours, and the store's own signage. Twelve stores all in one location type (mall units) with matching Sunday-zero is almost certainly a real closure.
  • Check the feed. For the same store-days, pull transaction counts, footfall, and inventory movement. If footfall is also zero, the store was closed. If footfall or stock movement is non-zero while sales read zero, the POS feed dropped the day and the zero is a fabricated value.
  • Check for a null-that-became-zero. Confirm whether the source sends NULL or 0. If the extract or a calculation uses ZN() or IFNULL(...,0), a missing day is silently converted to a real zero - a common and expensive cause.
  • Check the pattern. Twelve out of 1,800 stores is 0.7%; if only those 12 zero out, it is store-specific, not a pipeline-wide outage.

Handle it

  1. If they are genuine closures, do not treat Sunday as a zero-sales trading day. Exclude those store-days from daily averages, or measure per open day, and state the basis on the chart.
  2. Recompute the average daily sales for those 12 stores on open days only, then re-check whether they still sit in the low peak. If the Sunday zeros were what pushed them low, the bimodality story changes and the earlier conclusion must be retracted.
  3. Never impute a Sunday figure for a closed day - it manufactures revenue that never existed and inflates every downstream total.
  4. Add a data quality check that flags store-days with zero sales and non-zero footfall, so this is caught on refresh rather than in a board review.
  5. For target setting, use the open-day basis for all stores so the 12 are not penalised for a trading calendar they do not control.