to
Top Sales Items
{{ topItems.length }} Products| Rank | Product Name | Brand | Total Volume | Total Revenue ($) | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ idx + 1 }} | {{ item.name }} | {{ item.brand }} | {{ item.qtyBreakdown }} | ${{ item.sales.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) }} | |||||||||
|
Customer Outlets Purchasing this Item
|
|||||||||||||
| No sales data matches the current filters. | |||||||||||||
| OVERALL SUM | ${{ topItems.reduce((sum, i) => sum + i.sales, 0).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) }} | ||||||||||||
Top Customer Outlets
{{ salesByOutlet.length }} Outlets| Rank | Outlet Name | Total Volume | Total Spend ($) | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ idx + 1 }} | {{ outlet.shopName }} | {{ outlet.qtyBreakdown }} | ${{ outlet.sales.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) }} | |||||||||||||||
|
Product Items Purchased by this Outlet
|
||||||||||||||||||
| No outlet data matches the current filters. | ||||||||||||||||||
| OVERALL SUM | ${{ salesByOutlet.reduce((sum, o) => sum + o.sales, 0).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) }} | |||||||||||||||||
Multi-Month Filter Required
To compare month-by-month sales data, please select a broader Date Range of 2 or more months (e.g., from April 1 to June 30) in the filters above.
Month-over-Month Comparison Grid
{{ planningFilters.groupBy === 'products' ? productsMoM.length : brandsMoM.length }} Rows| {{ planningFilters.groupBy === 'products' ? 'Product Name' : 'Brand' }} | Brand | {{ formatMonthLabel(m) }} | Overall Total | Average / Month | Next 3 Months | On Hand Stock | Calculate Next PO |
|---|---|---|---|---|---|---|---|
| {{ row.name }} {{ row.brand }} | {{ row.brand }} |
${{ row.monthlySales[m].toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 0}) }}
{{ row.monthlyQty[m] > 0 ? row.monthlyQty[m].toLocaleString() : '-' }}
|
${{ row.totalSales.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) }} {{ row.totalQty.toLocaleString() }} {{ planningFilters.unit }} | ${{ getRowMetricAverage(row).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) }} {{ getRowMetricAverage(row).toLocaleString(undefined, {minimumFractionDigits: 1, maximumFractionDigits: 1}) }} {{ planningFilters.unit }} | ${{ getRowMetricNext3Months(row).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) }} {{ getRowMetricNext3Months(row).toLocaleString(undefined, {minimumFractionDigits: 1, maximumFractionDigits: 1}) }} {{ planningFilters.unit }} |
{{ planningFilters.unit }}
—
|
{{ calculateNextPO(row).toLocaleString(undefined, {maximumFractionDigits: 0}) }} {{ planningFilters.unit }}
0 {{ planningFilters.unit }}
—
|
| No sales details matches the current filters. | |||||||
| COLUMN TOTALS | ${{ calculateMonthSum(m, 'sales').toLocaleString(undefined, {maximumFractionDigits: 0}) }} {{ calculateMonthSum(m, 'qty').toLocaleString() }} | ${{ (planningFilters.groupBy === 'products' ? productsMoM : brandsMoM).reduce((s, r) => s + r.totalSales, 0).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) }} {{ (planningFilters.groupBy === 'products' ? productsMoM : brandsMoM).reduce((s, r) => s + r.totalQty, 0).toLocaleString() }} {{ planningFilters.unit }} | ${{ (planningFilters.groupBy === 'products' ? productsMoM : brandsMoM).reduce((s, r) => s + getRowMetricAverage(r), 0).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) }} {{ (planningFilters.groupBy === 'products' ? productsMoM : brandsMoM).reduce((s, r) => s + getRowMetricAverage(r), 0).toLocaleString(undefined, {minimumFractionDigits: 1, maximumFractionDigits: 1}) }} {{ planningFilters.unit }} | ${{ (planningFilters.groupBy === 'products' ? productsMoM : brandsMoM).reduce((s, r) => s + getRowMetricNext3Months(r), 0).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) }} {{ (planningFilters.groupBy === 'products' ? productsMoM : brandsMoM).reduce((s, r) => s + getRowMetricNext3Months(r), 0).toLocaleString(undefined, {minimumFractionDigits: 1, maximumFractionDigits: 1}) }} {{ planningFilters.unit }} | {{ (planningFilters.groupBy === 'products' ? productsMoM : brandsMoM).reduce((s, r) => s + getOnHandStock(r), 0).toLocaleString() }} {{ planningFilters.unit }} — | {{ (planningFilters.groupBy === 'products' ? productsMoM : brandsMoM).reduce((s, r) => s + calculateNextPO(r), 0).toLocaleString() }} {{ planningFilters.unit }} — |
No Data Loaded
Select your date range and filters above, then click 'Fetch Data' to view your sales reports.