Style Contribution %
Style Contribution % shows what share of your total revenue each product Category earned in a chosen date range — a ranked bar-chart table of revenue, units sold and percentage share, from your single top category down to the smallest, with one-click CSV export.
Overview
Despite the "Style" name, this report groups revenue purely by each product's Category field (e.g. "Shirts", "Trousers", "Jackets") — there is no separate "style" or "style code" attribute read anywhere in this feature. If two different styles share the same category, their revenue is combined into one row.
Products with no category set are grouped together under an "Uncategorised" row rather than being dropped.
Only completed sales (payment status COMPLETED, transaction type SALE) within the chosen date range are counted — the default range is January 1st of the current year through today.
Three summary tiles show the number of distinct categories with sales, the total revenue for the period, and the single top category by revenue share with its percentage.
The table below ranks every category by revenue descending, with a proportional coloured bar (cycling through an 8-colour palette) and its exact percentage share alongside units sold.
Before You Start
- Requires the "reports" plan feature to be enabled.
- Meaningful results depend on your products actually having a Category value set consistently — anything without one is lumped into "Uncategorised" rather than broken out further.
Step-by-Step Guide
1 Review revenue share by category
- Set the From and To dates (defaults to Jan 1st of this year through today) and click Apply.
- Check the three summary tiles: number of Categories, Total Revenue, and the Top Category with its percentage share.
- Scan the ranked table — each row shows the category, its revenue, units sold, and a proportional bar with its percentage of total revenue.
2 Export the breakdown
- Click Export CSV (disabled until at least one category has data for the period) to download a CSV with Category, Revenue, Units Sold and % of Revenue columns.
Every Field & Button, Explained
| Field / Button | What it does |
|---|---|
From / To + Apply | Date range for the revenue calculation; defaults to Jan 1st of the current year through today; click Apply (or change either date) to reload. |
Export CSV | Downloads Category, Revenue, Units Sold, % of Revenue as a CSV file; disabled until there is at least one row of data. |
Categories tile | Count of distinct categories (including "Uncategorised") that had at least one completed sale in the period. |
Total Revenue tile | Sum of revenue across every category in the period. |
Top Category tile | The single highest-revenue category and its percentage share of the period's total revenue. |
Table — Category | Product category name, or "Uncategorised" if the product had no category set; colour dot matches its chart bar colour. |
Table — Revenue | Total revenue for that category in the selected period. |
Table — Units | Total quantity sold for that category in the selected period. |
Table — Share | Proportional bar (relative to the top category's revenue) plus the exact percentage of total revenue. |
Tips & Best Practices
- Keep the Category field consistent and specific on every product — this report is only as useful as that field; a large "Uncategorised" or overly broad single-category share hides which lines are really driving revenue.
- Run this alongside Sell-Through Report and Age of Inventory — a category can contribute a large revenue share while still having individual slow-moving or aging SKUs within it.
- Widen the date range to a full year for buying-plan decisions, or narrow it to a single season/month to check how a specific launch performed.
Troubleshooting & FAQ
A product I expected to see broken out by its style number is missing.
Everything is showing under "Uncategorised".
The numbers here don't match Sell-Through Report for the same period.
Export CSV button is greyed out.
🧑💻 Developer Notes
Source component(s):
frontend-app/pos-app-garment/src/pages/garment/StyleContributionPage.jsx
Backend endpoints used:
GET /garment/analytics/style-contribution?from=&to=
Related tables (db-core repositories):
SaleSaleItemProduct
Redux slices:
None — local component state only
Feature flag key: reports
Backed by packages/pos-core/src/garment.js getStyleContribution (~line 645), which inner-joins Sale to SaleItem and left-joins Product, filters to paymentStatus COMPLETED / type SALE within the date range (and by tenantId/storeId when provided), and groups purely on Product.category — falling back to "Uncategorised" when null. There is no "style" or "style code" column read anywhere in this function despite the page/nav label; the group-by granularity is exactly whatever value shops put in Products → Category. CSV export is entirely client-side (Blob + object URL), no backend export endpoint.