Year-over-year comparisons: fixing calendar drift before you trust the growth
Why year-over-year comparisons drift when Black Friday moves, promo dates shift, and a 53rd week appears — plus an anchor-aligned method with worked arithmetic.
InventoryX is in development and not available today. ClearStock is the live Shopify app.
On the first Monday of December, a merchant who sells dog harnesses pulls November against last November: revenue up 10%, units up 10%. She starts sizing a January reorder to match. But the harness didn't get 10% more popular — Black Friday fell on November 28 last year and November 27 this year, so her November 1–28 window swallowed a promo Saturday this time and only a lone Friday last time. Roughly ten points of that "growth" is where the calendar put the weekend. Below: the three ways comparison windows drift, a worked example you can copy, and an alignment method that takes about twenty minutes in a spreadsheet.
This is the comparison-hygiene piece of the Q4 toolkit, and its territory is deliberately narrow: not how to estimate demand — finding baseline demand when promos distort history and building a seasonal index own that — but how to make two years measure the same thing before you call the difference growth. The date it matters most is Black Friday, which moves every year and drags a four-day promo spike with it. The BFCM inventory planning hub is where the buying and staffing calendar around that weekend gets built; this piece is where the year-over-year read around it gets made honest.
The three ways comparison windows drift
- The holiday moves. US Thanksgiving is the fourth Thursday, so Black Friday lands on a different date every year: November 29 in 2024, November 28 in 2025, November 27 in 2026, November 26 in 2027. A fixed-date window straddles the promo weekend differently each year — missing it entirely one year, catching four days the next.
- Your own promos move. The 20% email that went out October 15 last year went October 22 this year. Same month, different week, and every weekly window in between is contaminated in both directions: last year's week carries a promo spike this year's doesn't, and vice versa.
- The week count changes. Weekly reports come from one of several week-numbering systems, and some years simply have more weeks than others. A "same week last year" comparison can end up measuring different spans of the season, and year-end windows get strange when the week count doesn't match.
Any one distorts a comparison; in a Q4 analysis they stack.
A worked example: the same dates, two different Novembers
Illustrative numbers for one SKU, HARNESS-M-09. Baseline demand — ordinary days, no promo — runs 9.0 units/day in November 2025 and 9.3/day in November 2026, so the true growth is about 3%. Promo depth is identical both years (20% off site-wide, same channels), and promo-day multipliers are the same: Black Friday sells 4× baseline, the Saturday after 3×, the Sunday 2×, Cyber Monday 2.5×.
Same-date window, November 1–28 both years:
- 2025 (BF on Nov 28): Nov 1–27 = 27 baseline days × 9.0 = 243 units, plus BF Friday = 36. Total 279.
- 2026 (BF on Nov 27): Nov 1–26 = 26 baseline days × 9.3 ≈ 242 units, plus BF 37 and Saturday 28. Total 307.
- Read: 307 ÷ 279 − 1 = +10%.
Aligned window, the 28 days ending on Cyber Monday:
- 2025: Nov 4–Dec 1. Baseline days (Nov 4–27) = 24 × 9.0 = 216; promo days (BF, Sat, Sun, Cyber Monday) = 36 + 27 + 18 + 23 = 104. Total 320.
- 2026: Nov 3–Nov 30. Baseline days (Nov 3–26) = 24 × 9.3 ≈ 223; promo days = 37 + 28 + 19 + 23 = 107. Total 330.
- Read: 330 ÷ 320 − 1 = +3% — which is almost exactly what the baseline grew.
| Window | Nov 2025 | Nov 2026 | What the number measures |
|---|---|---|---|
| Same dates: Nov 1–28 | 279 units | 307 units | Calendar position + demand — not comparable (+10%) |
| Aligned: 24 baseline days | 216 | 223 | Underlying demand growth (+3%) |
| Aligned: promo weekend (BF → Cyber Monday) | 104 | 107 | Promo execution at equal depth (+3%) |
| Aligned: 28 days ending Cyber Monday | 320 | 330 | The comparable year-over-year read (+3%) |
The same-date window manufactured a phantom. Read the +10% and you plan for a demand level that exists one weekend a year — oversized Q4 buys, an inflated seasonal index, a January reorder sized to November's luck. And the phantom reverses itself: in 2027 Black Friday falls on November 26, so the same Nov 1–28 window catches Friday, Saturday, and Sunday, and the "growth" swings the other way.
Two things make the aligned read trustworthy. First, the demand record underneath it has to be complete — if the SKU sold out mid-window, the missing days look like zero demand, and both years get silently understated; that correction is its own discipline (why velocity numbers lie during out-of-stock days). Second, promo depth has to have actually matched; if it didn't, compare baseline days only, which is the core of finding baseline demand when promos distort your history.
What a 53-week year does to weekly comparisons
Week numbering has its own drift. Under the ISO 8601 week-date rules (accessed November 2026), a year contains 53 weeks whenever January 1 falls on a Thursday — which is true of 2026. This year's week 53 runs December 28 through January 3.
Two consequences, both mechanical rather than demand-driven:
- Week numbers drift against dates. Week 48 runs November 24–30 in 2025 and November 23–29 in 2026 — close today, but the mapping slides a day each year, and Black Friday migrates across week numbers over a cycle of years (it sat in week 47 in 2023, week 48 from 2024 through 2026). A "same week number last year" report compares different spots in the season depending on how long ago you built it.
- Month comparisons wobble around the boundary. In 2024 the promo weekend straddled November and December — Friday November 29 and Saturday November 30 in one month, Sunday December 1 and Cyber Monday in the other. In 2026 the whole weekend sits inside November. November-versus-November and December-versus-December both distort without any real change in demand.
Retailers running a 4-5-4 fiscal calendar have a coarser version of the same problem: that calendar adds a 53rd week in certain years, and fiscal 2023 (February 2023 through February 3, 2024) was one of them (NRF 4-5-4 calendar, accessed November 2026). The extra week lands in Q4, so a 14-week quarter compared against a 13-week one inflates by roughly a thirteenth — about 7.7% — before any real demand change. Compare weekly run-rate or equal week counts across 53-week boundaries, never raw quarter totals.
Shopify's own reports group sales by day, week, or month across any date range you set (Shopify Help Center, accessed November 2026) — the window length is yours to choose, and no native report moves it for you.
The anchor-aligned method
The fix for all three drifts is the same: stop anchoring windows to the calendar and anchor them to an event. The method:
- Name the anchor. Black Friday for seasonal peaks. Your own promo start date when you control the event. Season-open (first warm weekend, back-to-school) for weather- or calendar-driven goods.
- Fix the span relative to the anchor. For example: the 24 baseline days ending the day before Black Friday, and the promo weekend from Black Friday through Cyber Monday, reported separately. Write the span down once.
- Apply the same relative span to every year. The dates move; the span never does. That's what makes the windows comparable — each window measures the same position in the season.
- Read baseline days and promo days separately. Baseline growth and promo execution are different questions with different answers. Blended into one number, they measure the calendar, not the business.
- Only call it growth when promo depth matched — same discount, same channels, same audience. If this year's promo ran deeper, the baseline read is the only one you can act on.
When your own promo dates are the anchor
For events you run yourself — anniversary sales, email drops, channel-specific markdowns — the anchor is your promo calendar, not the retail one. The supporting tool is a one-tab spreadsheet: date, SKUs in scope, discount depth, channel, rough result. It takes a minute per promo to maintain and turns every future comparison from archaeology into a lookup. Without it, "did the spring sale do better this year?" requires reconstructing what you sent, to whom, at what discount — and after two or three years, that's guesswork.
The same log tells you which past windows a moved or deepened promo contaminated. Those windows remain evidence of what the promo did — they stop being evidence of baseline demand, and keeping the two apart is the discipline.
Where tooling helps and where it stops
Since we build one of these tools, the specifics: InventoryX (in development) does no year-over-year reporting — no reporting suite at all. What it maintains is the quality of the daily record underneath a comparison you run yourself: a per-SKU ledger of out-of-stock days and velocity computed from in-stock days only, so the baseline input to an aligned comparison isn't deflated by the days a SKU sat dark. The alignment itself remains your spreadsheet job.
Once the comparison is aligned, the baseline series becomes useful for more than a single read: it's the input to building a seasonal index from your own sales history, and the yardstick for scoring whatever forecast you buy against, using MAPE measured in a spreadsheet.
Common questions
How do I compare years when Black Friday falls on different dates? Pick Black Friday as the anchor and compare identical spans relative to it: the 24 baseline days before it, and the promo weekend through Cyber Monday, with each year's dates shifted to match. Never compare fixed calendar dates across years in Q4 — a November 1–28 window can contain one promo day one year and four the next.
Does 2026 have 53 weeks? Yes, under ISO week numbering: 2026 has 53 weeks because January 1 falls on a Thursday, and the extra week runs December 28 to January 3. If your reports use week numbers, expect oddities around New Year, and check whether any "same week last year" feature handles the 53rd week or silently misaligns it.
Should I compare months or weeks for year-over-year? Neither — compare anchor-aligned windows. Months wobble because promo weekends straddle month boundaries (in 2024, Black Friday weekend split across November and December), and week comparisons drift because numbering and week counts differ by year. A fixed span relative to an anchor, like 28 days ending Cyber Monday, measures the same thing twice.
What do I do when my promotion moved dates this year? Align to the promo, not the calendar: compare the same span around each year's promo start, and read baseline days separately from promo days. If the discount depth changed too, drop the promo comparison entirely and act only on baseline growth — that's the number your reordering decisions can actually use.
How much does a 53-week year inflate quarterly comparisons? By about a thirteenth — roughly 7.7% — when a 14-week retail quarter is set against a 13-week one, before any real demand change. The NRF 4-5-4 calendar placed the extra week in Q4 of fiscal 2023. Compare weekly run-rate or equal week counts, and treat quarter totals across a 53-week boundary as incomparable.
Next step
Would last year's Q4 comparison survive a calendar alignment? Pull your Q4 numbers for the last two years and rebuild one comparison with the anchor-aligned method: 24 baseline days plus the promo weekend, dates shifted per year, baseline and promo days read separately. If the aligned read differs from your old same-date read by more than a couple of points, earlier decisions were riding calendar drift — recalibrate the plan built from them, starting with a clean baseline-demand measure.