Track 15 · Applied Statistics for Professionals · Lesson 1 of 12

Sales performance and KPIs

Calculate period and compound growth rates and make seasonality-aware sales comparisons that a manager can act on.

30 minIntermediate8 graded exercisesFree

On a Monday morning the weekly dashboard shows chain sales up 43% on the previous week, and the marketing team is already celebrating. It was a holiday week. Whether that number is good news depends entirely on what you compare it with — and choosing the comparison is the most important statistical decision in sales reporting.

A key performance indicator (KPI) is a number a business tracks to judge performance: weekly sales, sales per square metre, average spend per visitor. On its own a KPI says little. It becomes information only when it is compared with something — last week, the same week last year, a target, or another store — and most reporting mistakes are mistakes of comparison, not of arithmetic.

gt=xt−xt−1xt−1=xtxt−1−1g_t = \frac{x_t - x_{t-1}}{x_{t-1}} = \frac{x_t}{x_{t-1}} - 1
Growth rate from one period to the next (multiply by 100 for a percentage)
xtx_t
the KPI in the current period (this week, this month, this year)
xt−1x_{t-1}
the KPI in the comparison period — the base. Growth is always measured relative to the base, never to the new value.
gtg_t
the growth rate; negative values are declines

Growth rates compound. A 10% rise followed by a 10% fall does not return you to the start: 1.10×0.90=0.991.10 \times 0.90 = 0.99, a 1% loss. For the same reason the average growth per year over several years is not the total growth divided by the number of years but the compound annual growth rate (CAGR), which is a geometric mean of the yearly growth factors.

CAGR=(xendxstart)1/n−1\text{CAGR} = \left(\frac{x_{\text{end}}}{x_{\text{start}}}\right)^{1/n} - 1
Compound annual growth rate
xstart,xendx_{\text{start}}, x_{\text{end}}
the KPI at the start and at the end of the period
nn
the number of years (growth steps) between them — not the number of yearly values

Dataset

Weekly store sales

4,160 rows · one row = one store-week · synthetic data

StoreRegionStore sizeWeek numberHoliday weekPromotionFootfall (visitors)Weekly sales (SAR)
ST01CentralSmall1falsetrue1986214951.9
ST01CentralSmall2falsefalse1811201838.41
ST01CentralSmall3falsetrue2045217021.33
ST01CentralSmall4falsetrue1947212706.67
ST01CentralSmall5falsefalse1798193921.23
ST01CentralSmall6falsefalse1894201477.48

Lumen Bay Stores (fictional): 40 stores × 104 weeks of sales, footfall and holiday/promotion flags.

Line chart of 104 weekly sales values for store ST01, mostly between about 170 000 and 250 000 SAR, with five tall spikes around 290 000 to 370 000 SAR in holiday weeks.Week numberWeekly sales (SAR)
Weekly sales of one store (ST01) over two years. The sharp spikes are holiday weeks; the gentle wave is annual seasonality with a summer dip.
Show the data as a table
Week numberWeekly sales
1214952
2201838
3217021
4212707
5193921
6201477
7197267
8206280
9211218
10201213
11206739
12199819
13209185
14197123
15293939
16313148
17203765
18197709
19232446
20246758
21212820
22205871
23216734
24205562
25198589
26266500
27236579
28204712
29225071
30177968
31189915
32194620
33171665
34166083
35181943
36199899
37185408
38296005
39189010
40179410
41186868
42195030
43185182
44176416
45197533
46188537
47192513
48178527
49192016
50187312
51309569
52203754
53166637
54210566
55214755
56195425
57184641
58250361
59199192
60205819
61241159
62209134
63223981
64213078
65211331
66334444
67369291
68215761
69212458
70208998
71222373
72228725
73231077
74227540
75210337
76204514
77323839
78227540
79218137
80221926
81188962
82235957
83192834
84214758
85198978
86197903
87205242
88236614
89202619
90259522
91194378
92189092
93203780
94206979
95213130
96193551
97215059
98197784
99234531
100190308
101198242
102199824
103308311
104195791

Retail sales are seasonal: they follow the calendar. In this (synthetic) chain, total weekly sales are usually between 11 and 14 million SAR, but holiday weeks jump to 16–19 million. That is why week-on-week growth is a poor guide in a seasonal business: from week 14 to the holiday week 15, chain sales rose by 42.9% — almost all of it the calendar, not performance.

Worked example

Comparing a holiday week fairly

In Year 1 the festival holiday fell in weeks 15–16; in Year 2 it fell in weeks 66–67 (lunar-calendar holidays move about 11 days earlier each year). Chain sales were 12.70M SAR in week 14, 18.15M in week 15, 18.43M in week 16, 13.33M in week 65, 18.90M in week 66 and 18.64M in week 67. How did the Year 2 holiday perform?

  1. Week-on-week. Week 66 vs week 65: 18.90/13.33−1=41.8%18.90 / 13.33 - 1 = 41.8\%. This compares a holiday week with an ordinary week, so it measures the holiday, not the business.

  2. Same week number last year. Week 66 is week 14 of Year 2, so a naive year-on-year comparison uses Year 1 week 14: 18.90/12.70−1=48.8%18.90 / 12.70 - 1 = 48.8\%. The holiday moved, so this compares a holiday week with a normal week again. One week later the same method gives week 68 vs week 16: −26.7%, an apparent collapse.

  3. Align the calendars. Compare the holiday period with the holiday period: 18.90+18.6418.15+18.43−1=2.6%\dfrac{18.90 + 18.64}{18.15 + 18.43} - 1 = 2.6\%.

The Year 2 holiday was about 2.6% above the Year 1 holiday — a little below the chain's underlying growth of 4.8% a year (two weeks are a noisy basis, so treat that gap as "no clear difference"), and nothing like the 41.8% the week-on-week view suggests.

Over a full year the calendar effects mostly cancel. The mean store-week sales were 315,402 SAR in Year 1 (weeks 1–52) and 330,639 SAR in Year 2, a growth of 4.83%. Every one of the 40 stores traded in both years, so this is also a like-for-like (same-store) comparison. In real chains, new store openings inflate total growth, so analysts report like-for-like growth on stores open in both periods.

Normalise before you rank. Large stores sell the most per week (513,322 SAR on average vs 210,274 SAR for small stores), but per square metre of floor the small stores lead: 245.8 vs 196.7 SAR per m² per week (total sales ÷ total floor area of each group: a ratio of totals, so every square metre counts equally). Sales per m², sales per visitor (here about 94.5 SAR) and like-for-like growth answer different questions; choose the KPI that matches the decision (space allocation, staffing, marketing).

Loading the interactive…
The same weekly sales drawn honestly and with presentation tricks.

Try this

  • Turn the truncated axis on and off. How much larger does a 5% change look when the axis starts near the lowest value?

  • Try the cherry-picked window: which start week makes growth look biggest? Why is that window a holiday-driven comparison?

Quick check

Sales rose 20% in March and fell 20% in April. What is the net change from the start of March to the end of April?

ComparisonGood forWatch out for
Week-on-weekSpotting sudden operational problemsSeasonality, holidays and promotions dominate
Same period last yearUnderlying growth in a seasonal businessMoving holidays, calendar shifts, store openings
Seasonally adjusted (÷ seasonal index)Month-to-month trend readingThe index must come from several past years
Like-for-like (same stores)Organic growth of the existing estateExcludes the effect of openings and closures
Per m² / per visitorFair ranking of different-sized storesRatios hide total volume
Which comparison answers which question

Exercises

The lesson is complete when every exercise is answered correctly. Hints are free; viewing a worked solution before solving means the exercise won't count towards mastery.

0 of 8 exercises correct (not saved — sign in to keep your progress)

Exercise 1 · Guided, difficulty 1 of 3

Week-on-week growth

Not started

A store sold 227,506.00 SAR last week and 201,271.91 SAR this week. What is the week-on-week growth rate? Give a percentage to 2 decimal places (negative for a decline).

Exercise 2 · Practice, difficulty 2 of 3

Compound annual growth

Not started

A regional chain's annual sales were 17.3 million SAR in the base year and 21.5 million SAR 3 years later. What was the compound annual growth rate (CAGR)? Give a percentage to 2 decimal places.

Exercise 3 · Interpretation, difficulty 2 of 3

Choosing the comparison for a moved holiday

Not started

In this chain the festival holiday fell in weeks 15–16 of Year 1 and weeks 66–67 of Year 2 (weeks 14–15 of the second year). The regional director wants to know whether week 66 was a good week. Chain sales in week 66 were 18.90 million SAR. Which comparison should the report lead with?

Choose one

Exercise 4 · Application, difficulty 2 of 3

Year-on-year growth of the chain

Not started

Use the retail_weekly dataset. Year 1 is weeks 1–52 and Year 2 is weeks 53–104; all 40 stores trade in every week. In the lab, filter on week and find the mean store-week sales for each year, then the year-on-year growth rate. (Because both years have the same number of store-weeks, the ratio of the means equals the ratio of the totals.)

Data: retail_weekly · Open in the lab to explore and calculate.

Exercise 5 · Application, difficulty 3 of 3

How big is the holiday effect?

Not started

In retail_weekly, compare store-weeks with holiday = true and false. Find the mean store-week sales in each group, the holiday uplift (holiday mean ÷ non-holiday mean − 1), and the percentage of store-weeks with a promotion in each group (a crosstab of holiday × promotion gives the counts).

Data: retail_weekly · Open in the lab to explore and calculate.

Exercise 6 · Practice, difficulty 2 of 3

Seasonally adjusted month-on-month change

Not started

A store's seasonal indices (from five previous years) are 0.94 for November and 1.27 for December: December sales are typically 27% above an average month. This year November sales were 880,000 SAR and December sales 1,168,700 SAR.

What is the seasonally adjusted change from November to December? Give a percentage to 1 decimal place.

Exercise 7 · Practice, difficulty 2 of 3

Fair or misleading comparison?

Not started

Classify each sales comparison as fair for the stated purpose or misleading.

Ranking stores of very different sizes by total weekly sales to decide which store managers get a bonus
Comparing this year's March with last year's March, when the same holidays fell in March both years
Reporting chain growth of 12% after opening eight new stores, as evidence that existing stores are doing better
Comparing a promoted week with an unpromoted week to judge a new window display
Comparing seasonally adjusted December sales with seasonally adjusted November sales
Comparing a holiday week with the same week number last year when the holiday has moved by 11 days

Exercise 8 · Interpretation, difficulty 3 of 3

Respond to the Monday dashboard

Not started

The marketing manager writes: "Chain sales jumped 41.8% in week 66 compared with week 65. Our new in-store display, launched in all stores in week 66, is clearly working." Week 66 was the first week of the Year 2 holiday. You know that the Year 2 holiday weeks 66–67 were 2.6% above the Year 1 holiday weeks 15–16, and that the chain's underlying growth is about 4.8% a year. Write a short reply (3–4 sentences) explaining what the 41.8% does and does not show, what comparison you would use instead, and what that comparison suggests.

0 words

What you can now do

  • Calculate period-on-period growth relative to the correct base, and compound annual growth (CAGR) over several years
  • Choose seasonality-aware comparisons: same period last year aligned on calendar events, or seasonally adjusted figures
  • Normalise KPIs (per m², per visitor, like-for-like) before ranking units of different size
  • Explain why a jump in sales cannot be credited to an initiative without a fair comparison group