A region sells through five distributors and receives five different files. Columns change, product codes change, units change, currencies change. If you join them as they arrive, the total looks plausible and the detail is wrong. This guide builds a consolidation you can defend: inventory the sources, define a canonical schema, map the dimensions, apply calendar, currency and unit rules, and run a workflow that keeps exceptions visible.
You will see the fields a canonical schema needs, how product and customer mappings attach to it, the rules that make files comparable, and the controls that let you trust the resulting market total.
Source inventory: know every file before you build anything
Start with a written inventory of every distributor file that arrives: who sends it, how often, at what grain, in which units and currency, and which codes it uses. Without this list, the consolidation schema is guesswork and every exception later becomes a surprise.
| Distributor | File | Grain | Units | Product key |
|---|---|---|---|---|
| MX-Norte | Sell-out monthly | Store | Units | Own code + EAN |
| MX-Centro | Sell-out monthly | Market | Cases | EAN-13 |
| MX-Sur | Sell-out monthly | Store | Units | Own code |
Record the grain precisely. A file at store level supports different questions than one at market level, and a consolidation that hides the difference will mislead later analysis.
The canonical schema: one structure for every source
Define one output structure that every distributor file is transformed into, and keep the source files untouched. The canonical schema is the contract between raw partner data and every downstream report, so it must be explicit and stable.
Minimal canonical fields: reporting period, market, distributor, product key, quantity in a standard unit, value in a standard currency, and a lineage reference back to the source file and row. Lineage is what makes a consolidated number explainable when someone challenges it.
Mapping dimensions: products, customers and periods
Every distributor identifies the same product differently. Build reference mappings once and let every file join through them, rather than repairing lookups in each file.
- Product: distributor code or EAN to canonical SKU, following the SKU-to-EAN and GTIN mapping model.
- Customer: distributor store codes to market, region or reporting hierarchy.
- Period: distributor reporting weeks to the calendar used in the consolidated output.
Keep each mapping versioned and effective-dated. When a distributor renames a code or a store closes, the mapping changes without breaking historical periods.
Calendar, currency and unit rules
Files become comparable only when the same conversion rules apply to all of them. Write the rules once, with a reference date, so the consolidation does not depend on whoever pressed recalculate.
- Calendar. Convert each file's reporting weeks or cutoffs to the consolidated period with an explicit boundary rule.
- Currency. Apply a fixed exchange rate with a stated reference date, and keep the original currency in the raw layer.
- Units. Convert cases, trays and eaches to one standard unit using effective-dated conversion factors.
- Coverage. Record how much of the expected market each file represents, so totals carry a coverage note.
- Rounding. Fix where rounding happens, at source or at consolidation, and record it.
Document every rule with an owner and an effective date. When a distributor changes its template or a new market joins, the rule set is the first thing to review.
A consolidation workflow you can run every cycle
The consolidation should run as a repeatable sequence, not a series of manual steps. Each stage has a defined input, output and check so a failure is caught where it happens.
- Intake. Register each file with its distributor, version and receipt date.
- Validate. Check schema, required fields, duplicates and totals against the source file.
- Map. Resolve product, customer and period keys through the reference mappings.
- Convert. Apply calendar, currency and unit rules to build canonical rows.
- Consolidate. Aggregate canonical rows into the market-level dataset.
- Check. Compare consolidated totals against the sum of validated source totals.
- Publish. Release the dataset with a version, lineage and coverage note.
Each stage writes a log entry. A year later you should be able to say which file version, which mapping version and which exchange rate produced any published number.
When a distributor corrects a published file
This illustrative scenario shows the control decision without prescribing one universal restatement policy. The question is whether the correction changes a published output and which downstream stages depend on it.
| Event | Control decision | Version and downstream effect |
|---|---|---|
| Distributor A submits period P on time | Accept, validate and consolidate as source version v1 | Publish market output v1 with file receipt and control totals |
| Period P is published | Close the original sign-off but retain source and output lineage | Published total points to Distributor A v1 and the mapping/rule versions used |
| Distributor A sends corrected file v2 | Quarantine v2 until the correction reason and affected rows are recorded | Keep v1; compare source totals and affected periods before rerun |
| Correction changes mapped or validated rows | Rerun affected validation, mapping and consolidation stages | Do not rerun unrelated distributor files unless the shared rule changed |
| Corrected output changes a published view | Choose restatement or annotated current view according to policy and materiality | Version the output, reopen sign-off where required and notify downstream users |
| Correction is accepted and closed | Record owner, evidence, before/after totals and final status | v1 remains traceable; v2 becomes the approved source for the affected result |
Worked example: consolidating three distributor files
Three distributors report the same sparkling water product in May 2026. Each file uses a different key, grain and unit; the canonical rows make them one number.
The number is usable because every component is traceable: MX-Norte's cases were converted with a recorded factor, MX-Centro and MX-Sur mapped through the product reference, and the total reconciles to the three validated source files.
Exceptions: keep them visible, never merge them silently
Not every row consolidates cleanly. Unmapped codes, missing periods and negative quantities are normal in real files. The discipline is to surface them as a controlled queue with an owner and a status, not to drop them into the total.
- Unmapped product or customer code.
- Quantity or value outside a defined range.
- Period or file missing from an expected cycle.
- Conversion factor not available for the period.
- Correction arriving after the first consolidation.
Each exception keeps its amount visible in the output as an explicit adjustment line. Excluded volume is a fact to explain, and the reconciliation only closes when the exception has an owner and an agreed resolution.
Controls before the total is used
The consolidated total should pass a fixed control set before it reaches commercial reporting. These checks are cheap and catch the differences that break a month-end number.
- Totals. Consolidated volume equals the sum of validated source files after conversion.
- Coverage. All expected files and periods are present, and gaps are flagged.
- Mappings. No canonical row is built from an expired mapping version.
- Rules. Currency and unit factors carry an effective date and a recorded source.
- Exceptions. Open exceptions are listed with amount, owner and target resolution date.
- Sign-off. A named owner accepts the dataset before release.
Run the same controls every cycle so a deviation stands out. A consolidation that cannot pass its own checks has not failed the process; it has correctly refused to publish.
| Dimension | Expected | Received | Coverage | Status |
|---|---|---|---|---|
| Distributor files | 3 | 3 | 100% | Complete |
| Reporting periods | 3 | 3 | 100% | Complete |
| Stores or customers | 420 | 408 | 97.1% | Review scope |
| Active products | 1,180 | 1,146 | 97.1% | Mapping exception |
| Rows | 86,400 | 85,920 | 99.4% | Investigate gap |
| Units | Baseline defined in source contract | Validated totals received | Reported with source coverage | Use contract rule |
| Value | Relevant where value is reported | Source currency retained | Not forced where no valid baseline exists | Document limitation |
Coverage is a visibility measure, not a universal pass threshold. The source contract and the reporting question decide whether a partial store or product set can be published, held or shown with a caveat.
Practical takeaway
Consolidating sell-out from multiple distributors works when the sources are inventoried, one canonical schema holds the output, dimensions map through controlled references and the same calendar, currency and unit rules apply to every file. Exceptions stay visible, and a fixed control set signs off the total.
Marksyte's data mapping and integration service can design the canonical schema and reference mappings, while managed data operations runs the monthly consolidation with lineage and exception control. Related work includes standardizing distributor templates and reconciling consolidated totals.
Frequently asked questions
Why do distributor sell-out files differ so much?
Each distributor prepares its own file with its own columns, product codes, units, currency and calendar. The differences are not errors; they are local reporting decisions that must be made comparable before totals are compared.
How do you consolidate sell-out data from multiple distributors?
Inventory the sources, define one canonical schema, map product and customer dimensions, apply calendar, currency and unit rules, and run a workflow that keeps exceptions visible instead of merging them silently.
Can you compare sell-out across distributors in different markets?
Only when currency, units, calendar and coverage are aligned and documented. Differences that are not converted remain visible and should never be presented as a clean market total.
