What data we actually have
A complete map of the Dunlop Sports America S&OP data estate — every file, every column, every sheet — and the three gaps that decide whether the rest of this engagement is measurable.
A1Summary
DSA has sent us ten of the twenty-four datasets we asked for. The ten that arrived are rich enough to build on. The fourteen that didn't include two that quietly determine whether we can measure anything at all.
The estate splits cleanly in two. My Mai's extracts are eleven system pulls from JDE — shipments, item master, purchase orders, inventory, market data — delivered as flat files against a formal request specification. Brian's files are five Excel workbooks, and they are not extracts at all: they are the planning process. The SRX workbooks carry 79 sheets each, and the plan itself exists nowhere but inside them.
That asymmetry is the single most important structural fact in this document. The forecast we are being asked to improve is not a system output that can be queried. It is a spreadsheet built by hand, one channel at a time, from six manually entered drivers. Everything downstream of that — accuracy benchmarking, value estimation, automation — depends on reading it correctly first.
Resolved during this pass
Both data issues flagged at kickoff turned out to have different root causes than assumed. The missing shipping detail in T02OrderData.csv is not a bad extract — it is a dataset that was never requested to contain it. The disagreement between F01HistoricalForecast.xlsx and the B1 submission is not an error — it is a brand-coverage gap that reveals missing workbooks nobody had noticed. Both are set out in full below.
A2Delivery coverage
My's own request register — DSA_Data_Request_vShare.xlsx — lists 24 datasets with priorities, grains, join keys and DSA's own availability assessment. It is the most useful file in the estate, because it lets us measure delivery against intent rather than guess.
A3Findings that matter
Five findings change what we do next. They are ordered by how much they affect the plan, not by how interesting they are.
The SRX workbook covers one brand out of five
Every SRX workbook we hold plans Srixon only — the BRAND column contains exactly one value, SRX, across all 1,067 build-up rows. But F01HistoricalForecast.xlsx is portfolio-wide, covering Cleveland Golf, XXIO, Asics, Never Compromise and SRX Accessories.
That gap is 1.71 M units, 24% of the 2026 B1 plan. Those brands are planned somewhere — almost certainly in equivalent workbooks we have never been sent. Until we see them, any statement we make about "the plan" describes three-quarters of it.
Inventory has exactly one snapshot
F04OnHandInventory.csv holds 9,966 rows, all stamped 2026-08-18, across two locations. DSA's own register already flagged history as unavailable.
Inventory optimization is the engagement's primary value driver, and a single snapshot cannot support it — no turns, no ageing, no excess trend, no working-capital movement. This is also the only finding here that gets worse with time: if DSA isn't archiving monthly snapshots, every month we wait is permanently unrecoverable. Worth raising this week regardless of where Phase 1 stands.
B1 is far thinner than the submissions that follow it
Across three plan years, B1 carries a fraction of the detail of later cycles — 372 rows against B2's 3,067 for plan year 2024; 762 against B3's 3,849 for 2025. The 2024 B1 submission has no unit figures at all.
This directly shapes Step 2. Benchmarking "B1 accuracy" against actuals is only meaningful where B1 was submitted at a comparable grain, and for two of the three years it wasn't. The 2026 cycle (10,728 rows) is the first that supports a serious comparison.
The item master is delivered but hollowed out
Seven of eighteen columns in T05ItemMaster.csv are 100% empty: VARIANT_GROUP, GENERATION, PREDECESSOR_ITEM, LAUNCH_DATE, EOL_DATE, DEGREE, USED_CLUBS_FLAG.
Each was explicitly requested. Their absence removes predecessor-based new-product forecasting, lifecycle logic, and the mix analysis that DSA's own register calls the team's number one backorder driver.
The workbook disagrees with itself
Inside the single B1 Submitted file, the 2026 - SALES build-up totals 5,365,101 units while the 2026 SOP Template Format sheet — the tab shaped like the actual submission — totals 5,349,631. A 15,470-unit drift between two tabs of the same workbook.
F01 matches the build-up sheet, not the template sheet. So the submission tab is a stale copy that was not refreshed before the file was saved. That is a manual-process control gap, and it is exactly the class of problem that software removes.
A4The F01 reconciliation
This was the founding question: F01HistoricalForecast.xlsx does not agree with the B1 forecast in the SRX submission. Because if two sources disagree about what was forecast, "forecast accuracy" has no single definition and Step 2 cannot start.
It resolves cleanly. The two files disagree because they cover different scopes, not because either is wrong.
| Product line | F01 | SOP Template tab | Residual | Read |
|---|---|---|---|---|
| Range Balls | 1,711,543 | 1,711,543 | 0 | Exact |
| Other 3pc Balls | 749,291 | 749,291 | 0 | Exact |
| SRX Woods | 22,070 | 22,070 | 0 | Exact |
| SRX Irons | 514,689 | 514,294 | +396 | Rounding-scale; ignore |
| 2 Piece Balls | 1,534,093 | 1,538,566 | −4,474 | Small; likely late edit |
| 3 Piece Balls | 0 | 3,474 | −3,474 | Absent from F01 entirely — a line that exists in the workbook never reached the downstream record |
| Z-Series | 833,445 | 810,393 | +23,052 | Largest residual. Start here |
| Subtotal | 5,365,131 | 5,349,631 | +15,500 | F01 ties to the 2026 - SALES build-up (5,365,101) within 30 units |
What this means for Step 2
We now have a defensible answer to "which source is authoritative": for Srixon, the YYYY - SALES build-up tab is the system of record, and F01 is a faithful downstream copy of it. B1 accuracy can be benchmarked. But it can only be benchmarked for Srixon until the other brands' workbooks arrive — and the 2026 cycle is the only year where B1 was submitted at sufficient grain to make the comparison fair.
A5Agreement map
Seven business concepts appear in more than one place. Where two sources describe the same thing, we can measure whether they agree — and the answers range from a 0.1% tie to a sheet that disagrees with its own predecessor on two-thirds of its rows.
Duplication here is not waste. It is the only cross-check available, and in three cases it is the only route to data DSA told us did not exist.
Duplicated concepts, measured
| Concept | Sources compared | Agreement | What the gap is |
|---|---|---|---|
| Shipment actuals | T02 (JDE) vs SHIP DATA 2, 2021–25 | 0.11% on a 5-year total 0.43–1.61× year by year |
Do not rely on the aggregate. Over 2021–25 the two agree to 0.11% — 26,218,239 against 26,189,213 — but that is an artifact of offsetting annual errors. Year by year the ratio swings from 0.43× (2022) to 1.61× (2024). Raw units instead of pieces does not fix it either (0.83× to 2.69×). Most likely a date-basis difference: the workbook columns are named Pieces Ordered_Report Date. Unresolved. |
| Plan — closed years | 2022/2023/2024 – SALES across the three workbook vintages | 94–100% | Once a plan year is past, the sheet freezes. 2023 is byte-identical across vintages. 2022 drifted +5.6% between the 2024 and 2025 files on just 11 rows — a restatement of closed history two years after the fact, worth one question. |
| Plan — live year | 2025 – SALES: 2024 B1 file → 2025 B1 file | 37.2% | The plan is rebuilt, not adjusted. 766 SKU-channel rows dropped, 965 added, only 310 of 833 surviving rows unchanged. Volume +7.1%. By the following cycle it settles to 96.2%. |
| Forecast → downstream | F01 vs 2026 – SALES, Srixon only | ±30 units | 5,365,131 vs 5,365,101 on 5.4 M units. F01 is a faithful copy of the build-up for Srixon. |
| Forecast — within one file | 2026 – SALES vs 2026 SOP Template Format | 15,470 u | 0.3% apart, but they should be identical. The submission tab was not refreshed before the file was saved. |
| Inventory | F04 vs INV by Item Data in each workbook | n/a different dates |
Not a duplicate — a recovery. Four separate observations: 13.4 M pieces (2024 file), 9.9 M (2025 file), 10.9 M (2026 live), 6.8 M (F04, Aug 2026). Scope differs between them, so these are not directly comparable without work — but it is history where DSA reported none. |
| Purchase orders | F05 vs PO by Item Data | Broken | The 2025 B1 workbook's PO tab totals zero across all 22,957 rows — a paste that captured structure but no values. The 2024 file's copy holds 5.1 M. F05 is the only usable source. |
A correction to an earlier reading of this
An earlier version of this section reported that T02 reconciles to the workbook within a tenth of a percent, and treated that as the most useful finding here. The 0.11% is real but it is a five-year total, and it survives only because large annual errors cancel. Tested year by year the two sources disagree badly — 0.43× to 1.61× — so the aggregate agreement carries no weight.
Two decoding corrections still stand and are still undocumented anywhere in the client's own material: T02's quantity column is units, not pieces, and the workbook tabs are filtered to Srixon + Domestic Sales + Shipped. They are necessary but not sufficient.
The cause is now identified. T02's status column is an order status, not a ship status — Open is 0% of rows before 2025, 1.0% in 2025 and 16.4% in 2026, which is an order lifecycle rather than a shipment flag. Its date column is not a transaction date at all: 307 distinct values spanning 2009–2027, matching the row's own Year on only 33.6% of rows. So T02 counts orders on an order calendar while the workbook tabs count shipped volume on a report-date calendar. Those are different events measured on different clocks, and no filter reconciles them.
Consequence: T02 cannot be substituted for the workbook tabs as an actuals source — which is a real constraint, since it is the only source that separates returns and the only one covering all brands. It also means the monthly phasing result in the baseline rests on the workbook tabs alone.
Why cell-level agreement is only 10%
Product-line naming. T02 carries 216 Srixon product lines, the workbook 199, and only 163 match exactly. The rest differ by spelling and case — BALL Q-Star 5 against Ball Q-Star 5, BALL Marathon 4 present in one and not the other. Totals agree because the volume lands in both; individual cells don't because the labels don't. A name-mapping table fixes this once and permanently, and it is a prerequisite for any SKU-level accuracy work.
Concepts with no second source
Seven things exist in exactly one place. For these, "agreement" is not a question we can ask — which makes their quality assumptions load-bearing.
- F13 Golf Datatech and F14 NGF — external market data, unverifiable internally by design. Note the workbook's MARKET SIZE column is hand-keyed rather than drawn from F13, so those two could be cross-checked and currently aren't.
- T05 item master — the join spine. Nothing validates it, and seven of its attributes are empty.
- T06 channel dimension — delivered at customer grain with 40% of region labels missing.
- T07 pricing — 17% of items, no clubs. The workbook's cost tabs cover different ground and use a different structure, so they are a supplement, not a check.
- F07 BOM — single source and structurally void.
- The four non-Srixon brands — 24% of plan volume, visible only in F01, with no build-up behind them. This is the largest unverifiable block in the estate.
A6What we need next
| Ask | Owner | Unblocks | Urgency |
|---|---|---|---|
| Monthly inventory snapshots — archive going forward, plus whatever history exists | My | Inventory optimization / working capital — the primary value driver | This week |
| Workbooks for Cleveland Golf, XXIO, Asics, SRX Accessories | Brian | 24% of plan volume; portfolio-level accuracy benchmarking | This week |
| T-03 open order book & T-04 order-date detail | My | Lost-sales recapture; order-vs-ship variance | Gating |
| Column definitions for T02OrderData.csv — file has no header row | My | Any use of the shipment actuals at all | Gating |
| Re-extract of T-05 with the seven empty columns populated | My | New-product forecasting, lifecycle, mix analysis | Gating |
| F-02 key-account sell-through & F-03 account on-hand | My | The demand signal DSA itself rates highest | Phase 2 |
| Fiscal calendar definition — what period does “SRX 2025 / B1” cover? | Brian | Correct alignment of forecast to actuals | Gating |
| Methodology behind 2025 forecast accuracy.xlsx | Brian | Matching — or knowingly departing from — DSA's own accuracy definition | Before Step 2 |
| F-11 promotions & markdown events | My | Markdown reduction — currently unmeasurable | Phase 2 |
B1File inventory
Sixteen data files under 01_Data/Client_data/, split by provenance. Sizes and row counts are measured, not reported.
| File | Req | Size | Rows | Cols | Grain | State |
|---|---|---|---|---|---|---|
| DSA_Data_Request_vShare.xlsx | — | 26 KB | 24+194 | 19/8 | Register + field specs | Spec |
| T02OrderData.csv | T-02 | 108.2 MB | 640,433 | 19 | Item × year × period × region | No header |
| F13GolfDataTech.csv | F-13 | 64.5 MB | 222,448 | 20 | Period × channel × brand × model | Good |
| F05PurchaseOrder.csv | F-05 | 16.5 MB | 155,924 | 13 | PO × line | Good |
| F01HistoricalForecast.xlsx | F-01 | 7.8 MB | 62,739 | 22 | Submission × year × PL × region | Mixed grain |
| T06ChannelRegionDim.csv | T-06 | 4.9 MB | 71,369 | 8 | Customer account (not region) | 28 bad rows |
| T05ItemMaster.csv | T-05 | 2.6 MB | 14,742 | 18 | Item | 7 cols empty |
| F07BOM.csv | F-07 | 2.1 MB | 13,235 | 9 | Parent × component | Void |
| F04OnHandInventory.csv | F-04 | 0.9 MB | 9,966 | 15 | Snapshot × location × item | 1 snapshot |
| T07Pricing.csv | T-07 | 0.3 MB | 2,554 | 13 | Item | No clubs |
| F14NGF.csv | F-14 | 77 KB | 1,880 | 4 | Period × category | No rounds |
| File | Size | Sheets | Role |
|---|---|---|---|
| 2025 forecast accuracy.xlsx | 23.4 MB | 3 | DSA's own accuracy analysis. Contains a 663,610-row order date and invoice date sheet — likely the closest thing we have to T-04. |
| SRX 2025 11-13-2025 — B1 Submitted.xlsx | 19.8 MB | 79 | The submitted B1 for plan year 2026. Primary reference for the formula trace. |
| SRX 2026 Live File_new_format_with_orders.xlsx | 18.0 MB | 79 | Working file, restructured template. Adds order data and a “2026 Pivot for My” handoff sheet. |
| SRX SOP 2024-11-15 — B1.xlsx | 17.0 MB | 73 | Prior-year B1. Template predates the current format — direct comparison needs care. |
| Order Date Analysis.xlsx | 0.4 MB | 4 | Standalone analysis of order timing and GDT trends. |
Housekeeping
A LibreOffice lock file — .~lock.2025 forecast accuracy.xlsx# — is sitting in Client_data/, which means that workbook was open (or left open) when the folder was captured. Worth confirming we have the saved version.
B2System of record
Where each business concept authoritatively lives, and how a number travels from source system to submitted plan.
| Concept | System of record | Also appears in | Ruling |
|---|---|---|---|
| Plan / forecast (Srixon) | SRX YYYY - SALES | F01, SOP Template tab | Build-up wins; F01 is a faithful copy; template tab is stale |
| Plan / forecast (other brands) | Unknown | F01 only | F01 is our only view until the workbooks arrive |
| Shipment actuals | T02OrderData.csv | SRX SHIP DATA tabs | JDE extract wins; workbook tabs are point-in-time pastes |
| Item master | T05ItemMaster.csv | F04, T07, workbook lists | Sole candidate, but 7 requested attributes are empty |
| Inventory | F04OnHandInventory.csv | SRX INV DATA | Single snapshot; workbook tabs may hold older pastes worth mining |
| Returns | T02OrderData.csv c17 | — | Commingled with demand; must be separated before modelling |
| Market size / share | F13GolfDataTech.csv | SRX MARKET SIZE column | GDT wins; workbook figure is hand-keyed |
| Cost | SRX cost tabs | T07Pricing.csv | T07 covers no clubs, so workbook is the only complete view |
B3Join spine
Item is the backbone, as expected. What matters is where the key formats diverge and where the grain shifts underneath a join.
Key format hazards
- Space padding. ITEM in T02, T05 and F07 is right-padded to 25 characters. F05 stores it as an integer. Any join must normalise both sides or it silently returns nothing.
- Case drift in descriptors. F01's SRICDDESC contains both CG Accessories and CG ACCESSORIES, both Asics Accessories and ASICS Accessories, and separate XXIO Irons / XXIO IRONS entries. 48 distinct values collapse to roughly 30 real ones.
- Metric vocabulary drift. F01's METRIC column holds nine values across three casings — Units/UNITS, Revenue/REVENUE, Margin/MARGIN, plus ASP, COST, MARGIN_PCT. Filtering on exact string will drop rows.
- Mixed grain inside one file. F01's SOPRegion and SalesType are populated on only 72.4% of rows. Earlier plan years were submitted at product-line level, 2026 at channel level. Summing across the file without partitioning by year risks double counting.
- Region coverage. T06 maps customers to SOP_REGION_DESC for only 59.9% of accounts, and T02's own region column is null on 4.8% of rows. Both need a fallback rule.
B4SRX workbook anatomy
79 sheets in the B1 Submitted file, 73 in the 2024 edition, 79 in the 2026 live file. They group into seven functional families.
| Family | Sheets | Members | Role |
|---|---|---|---|
| Plan build-up | 8 | 2020 – SALES … 2027 – SALES | The plan itself. SKU × channel × sales type with the full driver chain. |
| Submission format | 2 | 2025/2026 SOP Template Format | Aggregated to product line × metric — the shape corporate receives. |
| Model build-ups | ~35 | ZXi *, ZXi2 *, Z-Forged *, Z22 *, fitting sheets | Per-model unit build with shaft/flex/loft matrices. |
| Cost | 8 | 2024/25/26 costs, Trf MTP, Balls+Acc, new method clubs, Product Costs | Feeds the COST column by SUMIFS. Tariff handled separately. |
| Pasted raw data | 16 | SHIP DATA 2, OPEN DATA, INV DATA, PO by Item, ACC DATA, Distribution Tracking | Point-in-time extracts pasted in. ACC DATA and SHIP Promo hold 171,197 rows each. |
| Category sheets | 6 | Components, Headwear, Bags, Gloves, Luggage | Accessory planning, separate from the main build-up. |
| Review & accuracy | 4 | Monthly Review (319 cols), FCST Accuracy, Promo review, Planned Outs | FCST Accuracy already compares B1 / B2 / Current FC by month — DSA's own accuracy view. |
Structural debt worth noting
2020 – SALES and C&B FCST each report 16,381 and 16,376 columns — column bloat from years of editing. In the 2024 file, ZXi Hyb reports 1,048,575 rows against ~20 real ones. These inflate file size, slow recalculation and make automated parsing fragile. Any tooling we build should read by named range or explicit bounds, never by max_row.
Version drift across the three workbooks
- The 2024 edition carries Z22 * model sheets, MARGIN DATA 2, 2023 Original Plan, DISTRIBUTION GOALS and 2024 ball seasonality — all absent later.
- The 2025 B1 Submitted adds the ZXi2 * family and 2026/2027 plan years.
- The 2026 live file is explicitly a new format: it adds 27ZXi * sheets, SHIP DATA by item and by region, and a 2026 Pivot for My handoff tab — while dropping Distribution Tracking, ACC DATA and PO by Item Data.
The consequence for Step 2: a year-over-year B1 accuracy comparison is not comparing like with like. The template changed twice in three cycles.
B5Planning driver tree
Traced from the 2026 - SALES sheet by separating formula cells from literals. This is where human judgment enters the forecast — and therefore where both the automation opportunity and the accuracy opportunity live.
| Col | Header | Type | Formula / example |
|---|---|---|---|
| A | MAP | Mixed | Half literal, half =20*12/15 — a smell worth confirming |
| C | Wholesale % | Entered | 0.76 |
| D | WHOLESALE | Formula | =A6*C6 |
| F | DISCOUNT | Entered | 0.68 |
| G | NET PRICE | Formula | =F4*D4 |
| J | COST | Formula | =SUMIFS('2026 Costs new method clubs'!…) |
| L | REVENUE | Formula | =G4*AA4 |
| M | GM | Formula | =(G4-J4)*AA4 |
| O–T | BRAND … SALES TYPE | Entered | Dimensions: SRX · product line · channel cat · sales type · channel |
| U | DOORS | Entered | 1105 |
| V | DISTRIBUTION | Entered | 1 |
| W | UNIT / DOOR | Entered | 725 |
| X | TURN | Entered | 1.0251 |
| Y | LAUNCH | Formula | =U28*V28*W28 |
| Z | REFIL | Formula | =W4*U4*X4*V4*AD4 |
| AA | TOTAL | Formula | =(Y4+Z4)*AC4 |
| AC | FACTOR −1 | Entered | 1 |
| AD | MARKET SIZE | Entered | Hand-keyed despite F13 holding the real figure |
| AK–AV | J … D | Entered | Monthly seasonality weights, entered per row |
B6Column dictionary
Every column in every delivered extract, with measured fill rates and cardinality. Fill rate is share of non-null rows.
| Pos | Inferred meaning | Fill | Uniq | Values / range |
|---|---|---|---|---|
| c00 | item | 100% | 15,284 | Space-padded to 25 chars |
| c01 | product_line_desc | 100% | 643 | RTX 6 Zipcore Wedge, COMP GRIPS… |
| c02 | year | 100% | 7 | 2020 – 2026 |
| c03 | period_num | 100% | 12 | 1 – 12 |
| c04 | sop_region_desc | 95.2% | 17 | ON COURSE, Off Course, Golftec… |
| c05 | pieces / qty | 100% | 4,244 | −31,960 → 185,500 · 145,427 negative |
| c06 | sales_amt_usd | 100% | 123,992 | −390,400 → 1,689,000 |
| c07 | gross_profit_usd | 100% | 289,558 | −390,400 → 1,247,000 |
| c08 | line / order class | 100% | 6 | BI, C, D, S, W, ZX |
| c09 | sub-class | 100% | 13 | CA, CK, NG, NI, NN, NO, NS, NT, SD, SG, SI, SO, SZ |
| c10 | domestic / affiliate | 100% | 8 | CGA, CGC, CGE, CGJ, DOM, INT, SAM, SSA |
| c11 | gl_brand_desc | 100% | 7 | Asics, Cleveland Golf, Never Compromise, Nike, Srixon, Tennis, XXIO |
| c12 | company / cost centre | 100% | 13 | 521 – 999 |
| c13 | order status — not ship status | 100% | 2 | Closed / Open. Open is 0% of rows before 2025, 1.0% in 2025, 16.4% in 2026 — the profile of an order lifecycle, not a shipment flag. Filtering on Closed does not reproduce the workbook's Ship Open = Shipped. |
| c14 | date — not a transaction date | 88.6% | 307 | 307 distinct dates spanning 2009-10-28 to 2027-05-25. Only 33.6% of rows have c14's year matching the Year column, and 2009–2014 dates appear on 2025 rows. An item-level attribute (first-available or launch date), not a ship or report date. |
| c15 | ratio / share | 100% | 4,042 | −3.196 → 25.69 |
| c16 | flag | 100% | 2 | N, Y |
| c17 | return / credit reason | 28.7% | 163 | Stock Transfer, Excess Inv-mgmt approved, Salesrep Return… |
| c18 | sales category | 100% | 3 | Domestic Sales, Int Affiliate Sales, Other |
T-02 cannot be used until the header is confirmed
Nearly 23% of rows carry negative quantities and 28.7% carry a return reason code. Returns are commingled with demand, and the file has no header to tell us which column is which. Every inference in the table above is ours, not DSA's. One email to My resolves it; building on the guess does not.
| Column | Fill | Uniq | Notes |
|---|---|---|---|
| ITEM | 100% | 14,742 | Primary key, space-padded |
| ITEM_DESC | 100% | 14,709 | 33 duplicate descriptions |
| PRODUCT_LINE_CD / _DESC | 100% | 461 | Clean 1:1 pairing |
| CATEGORY | 100% | 5 | ACCESS, CLUBS, COMPS, RANGE, ROUND |
| SUB_CATEGORY | 100% | 21 | XXIO Irons, CG Wedges, Women's/Jr/Other… |
| GL_BRAND_DESC | 100% | 6 | Space-padded — trim before joining |
| VARIANT_GROUP | 0% | 0 | Empty requested, not delivered |
| GENERATION | 0% | 0 | Empty requested, not delivered |
| PREDECESSOR_ITEM | 0% | 0 | Empty blocks predecessor-based launch forecasting |
| PIECES_PER_UNIT | 100% | 16 | 0.0833 – 20 |
| UOM | 100% | 24 | EA, S5, S7, DZ… |
| FIRST_AVAILABLE_DATE | 100% | 251 | Only date field populated |
| LAUNCH_DATE | 0% | 0 | Empty blocks lifecycle logic |
| EOL_DATE | 0% | 0 | Empty blocks end-of-life / markdown timing |
| STATUS | 100% | 2 | IN / OUT — not the Active/Inactive in the spec |
| DEGREE | 0% | 0 | Empty blocks mix analysis (#1 backorder driver) |
| USED_CLUBS_FLAG | 0% | 0 | Empty |
| Column | Fill | Notes |
|---|---|---|
| METRIC | 100% | 9 values across 3 casings — Units/UNITS, Revenue/REVENUE, Margin/MARGIN, ASP, COST, MARGIN_PCT |
| SRICD / SRICDDESC | 100% | 48 raw values, ~30 real after case normalisation. This is the brand-category level. |
| PL_CD / PL_CD_DESC | 100% | 1,622 distinct product lines — finer than T05's 461. Mapping required. |
| SOPRegion | 72.4% | Null on earlier plan years — grain shifts by year |
| SalesType | 72.4% | Same pattern as SOPRegion |
| 1 … 12 | 100% | Monthly values; TOTAL is their sum |
| COMMENTS | 100% | This is the submission ID — B1 / B2 / B3 / B4, not free text |
| YEAR | 100% | Plan year: 2024, 2025, 2026 |
| Plan year | B1 rows | B2 rows | B3 rows | B4 rows | B1 units | B4 units |
|---|---|---|---|---|---|---|
| 2024 | 372 | 3,067 | 3,109 | 3,115 | — | 6,253,676 |
| 2025 | 762 | 1,848 | 3,849 | 1,194 | 6,647,820 | 7,248,558 |
| 2026 | 10,728 | 13,650 | 21,045 | — | 7,075,630 | — |
| File | Columns of note | Issue |
|---|---|---|
| F04OnHandInventory | SNAPSHOT_DATE, LOCATION, ITEM, QTY/PIECES_ON_HAND, QTY_AVAILABLE, ON_WORK_ORDER, ON_PURCHASE_ORDER, STOCKING_TYPE, PROCESS_TYPE | One snapshot. PRODUCTGROUP 100% empty. PROCESS_TYPE 69% filled. 275 rows with negative availability. |
| F05PurchaseOrder | PO_NUMBER, PO_LINE, ITEM, QTY/PCS ORDERED · RECEIVED · OPEN, ORDER_DATE, PROMISED_DATE, RECEIVED_DATE, STATUS_CODE, VENDOR | Clean. ITEM stored as integer — cast before joining. 161 vendors, 5 status codes. |
| F07BOM | PARENT_ITEM, COMP_ITEM, LEVEL_, QTY_PER, UOM, EFFECTIVE_FROM/TO | Structurally void. PARENT_ITEM and COMP_ITEM are identical; LEVEL_ is 0 on every row. Explodes nothing. |
| T06ChannelRegionDim | SOP_REGION, SOP_REGION_DESC, SOP_CHANNEL_DESC, SOP_ON_OFF_KEY, GDT_ROLLUP, CUSTOMER_ACCOUNT, COUNTRY, ACTIVE_FLAG | Delivered at customer grain (71,369 rows) not region grain (~20). Region desc null on 40%. 28 rows unparseable — unquoted commas in names. ACTIVE_FLAG always Y. |
| T07Pricing | COSTCENTER, PRODUCTGROUP, ITEMNUMBER, WHOLESALEUNITPRICE, RETAILMAPUNITPRICE, A1_AMTSTDROLLUP, X2_AMTDUTY, X3_AMTFREIGHT, TX_AMTTAX | Covers ACCESS, RANGE, ROUND, SHOES — no CLUBS, no COMPS. 2,554 of 14,742 items (17%). COSTCENTER single-valued, TX_AMTTAX always 0. |
| F13GolfDataTech | PRODUCT, CHANNEL, PERIOD, REGION, MFG, BRAND, MODEL, UNITS, share and prior-period comparators, INVENTORY, PCTOFSHOPS | Strongest history in the estate: 2007-01 → 2026-06. But only US and UK national — no sub-region. 76 manufacturers, 3,273 models. No item key. |
| F14NGF | Period, Product, Units, Dollars | 235 periods from 2007-01. Eight categories. Rounds-played not supplied, as DSA flagged. |
B7Quality register
| # | Defect | Where | Consequence | Fix |
|---|---|---|---|---|
| Q1 | Four brands have no workbook | From_Brian | 24% of plan invisible; portfolio accuracy impossible | Request from Brian |
| Q2 | Inventory history absent | F04 | Primary value driver unmeasurable; worsens monthly | Start archiving now; consider reconstruction from F05 + T02 |
| Q3 | No header row | T02 | 19 columns unlabelled; all semantics inferred | Request column list from My |
| Q4 | Returns commingled with demand | T02 c17 | 23% of rows negative; inflates variance, distorts any model | Split on reason code once header confirmed |
| Q5 | Seven item attributes empty | T05 | No lifecycle, predecessor or mix analysis | Re-extract |
| Q6 | BOM has no hierarchy | F07 | Cannot explode finished goods to components | Re-extract with real parent/child |
| Q7 | Pricing excludes clubs | T07 | Margin and markdown analysis limited to 17% of items | Workbook cost tabs as interim source |
| Q8 | Template tab stale vs build-up | SRX workbook | 15,470-unit drift inside one file | Process control — resolved by tooling |
| Q9 | B1 grain inconsistent across years | F01 | Year-over-year B1 comparison not like-for-like | Restrict benchmark to 2026, or normalise to product line |
| Q10 | Mixed grain within file | F01 | Double-counting risk on naive aggregation | Partition by year before summing |
| Q11 | 28 unparseable rows | T06 | Customer names contain unquoted commas | Re-extract with proper quoting |
| Q12 | Case drift in descriptors | F01 | 48 values collapse to ~30; silent row loss on exact match | Normalisation layer |
| Q13 | Region unmapped for 40% of customers | T06 | Shipments unattributable to planning channel | Fallback rule + client confirmation |
| Q14 | Column and row bloat | SRX workbook | 16,381 columns; one sheet reports 1,048,575 rows | Parse by explicit bounds, never max_row |
| Q15 | Quantity column is units, not pieces | T02 | Undocumented. Naive comparison to the workbook is off by 22% and reads as a data failure | Multiply by PIECES_PER_UNIT; confirm with My |
| Q16 | Product-line names don't match | T02 vs workbook | 163 of 216 names align; blocks all cell-level reconciliation | Build a name-mapping table |
| Q17 | PO tab pasted with no values | SRX 2025 B1 | 22,957 rows, every total zero | Use F05; flag to Brian as a broken refresh |
| Q18 | Live plan year rebuilt between cycles | SALES sheets | Only 37% of rows survive unchanged; 47% key churn | Not a defect — but it means B1-vs-actual needs a fixed key set |
| Q19 | Closed plan year restated | 2022 – SALES | +5.6% volume changed two years after the year closed, on 11 rows | Ask Brian what was corrected and why |
| Q20 | Market size hand-keyed | SALES sheets | Typed by hand although F13 holds the real figure — an avoidable single source | Wire to F13 in tooling |
| Q21 | T-02 is order data on an order clock, not shipments on a report clock | T02 vs workbook SHIP tabs | The two sources count different events against different calendars, so they cannot be reconciled by filtering. Annual ratios swing 0.43×–1.61×. | Request a shipment extract keyed on ship or invoice date; or have My confirm what c02/c03 date basis represents |
| Q22 | The request spec contradicts itself on T-02 | DSA_Data_Request_vShare | The dataset is described as "Shipment actuals at SKU x channel x month" but its own field is named pieces_ordered, and the delivered file is T02OrderData.csv. Three names, two different concepts. | Settle which was intended before any further use |
Method behind the agreement figures
So the numbers in Figure 6 can be reproduced or challenged:
- Plan comparisons match on the five-part key product code · product line · channel cat · sales type · channel, summing TOTAL. "Unchanged" means equal within a relative tolerance of 1e-6 on keys present in both files. Keys present in only one side are reported separately as dropped/added rather than counted as disagreement. Note the 2024-and-earlier sheets use SRI CAT/MODEL where later ones use DSP Product Code/Product Line; the comparison uses whichever pair the sheet carries.
- Shipment comparison aggregates T02 to product line × year × period after filtering to Srixon + Domestic Sales + Closed and converting quantity to pieces via PIECES_PER_UNIT from T05. Pieces-per-unit is available for 77.2% of T02 rows; unmatched rows are treated as 1:1, which understates the true total slightly.
- Grand Total rows in the workbook's pivot exports are excluded. Failing to do so double-counts every figure.
- Caveat on inventory. The four observations differ in filter scope — F04 covers two locations with no brand filter, the workbook tabs are pivot exports with their own filters. Treat the trend as indicative until scope is normalised.
- Not yet tested: the invoice-date sheet in 2025 forecast accuracy.xlsx (663,610 rows) against T02; the workbook's hand-keyed MARKET SIZE against F13; and DSA's own accuracy figure of 43.3% found in that workbook, which we should reproduce before proposing any alternative.
B8Open questions
Answers we need before Step 2 can produce a defensible number.
For Brian
- Fiscal calendar. The B1 files are dated mid-November — 2024-11-15 and 2025-11-13 — and the register describes the submission cycle as roughly October, January/February, May and September. That implies B1 for plan year N is submitted in November of N−1, which fits the file naming for 2026 but not obviously for 2025. This must be confirmed, not inferred: a one-quarter misalignment would still produce plausible accuracy figures, just wrong ones.
- Where are the other brands planned? Separate workbooks, a different owner, or not planned at this level at all?
- Is the B1 Submitted file the version that actually went to corporate, given its template tab is 15,470 units out of step with its own build-up?
- What definition of accuracy does 2025 forecast accuracy.xlsx use, and does the FCST Accuracy tab inside the workbook use the same one?
For My
- Column definitions for T-02, and confirmation of what c14 represents.
- Are monthly inventory snapshots archived anywhere, or does only the current position exist?
- Why are the seven T-05 attributes empty — not populated in JDE, or dropped by the extract?
- Was the F-07 BOM extract intended to be parent-to-component, or is it an item list?
A note on the Step 3 hypothesis
The working assumption entering this engagement was that improving forecast accuracy is the low-hanging fruit. This pass does not settle that, but it sharpens it. The plan is built from six hand-entered drivers per SKU-channel row, with no statistical baseline anywhere in the process and market size keyed by hand despite Golf Datatech sitting in the same estate. That is a real and addressable gap. But part of the measured error will also be process drift — stale tabs, missing brands, inconsistent grain — which is a governance fix rather than a modelling one. Both are worth money. They are not the same project, and the value case should not conflate them.
B9Companion report
The forecast-accuracy work that rests on this map lives in a separate document, B1 Forecast Baseline — the options catalogue for pairing a plan with actuals, the decisions taken, and the measured result for plan year 2025.
This atlas stays what it says on the front: a map of what data exists, how the pieces connect, where they agree, and what is missing.
Compiled from direct inspection of 16 files, 2.0 M data rows and 235 workbook sheets under 01_Data/Client_data/. Figures are measured unless marked inferred. Column semantics for T-02 are inferred and await confirmation from DSA.