Boxes Sold Report Documentation¶
Menu Location: Reports > Billing Reports > How Many Boxes Sold
Access Level: Manager / Administrator
Last Updated: 2026-03-01
Overview¶
The Boxes Sold Report shows how many subscription boxes of each type were sold during a specified date range. It provides either totals or month-by-month breakdowns to track box type popularity and trends over time.
Primary Functions:
- Count boxes sold by box type/size
- View totals or monthly breakdowns
- Track box type popularity trends
- Calculate average orders per customer for a year
- Analyze subscription product performance
Page Layout¶
Header Section¶
- Page Title: Billing Reports / How Many Boxes Sold by Type/Date Range
- Statistics Panel: Shows 2019-specific metrics (orders and distinct customers)
Filter Controls¶
- From/To Date Pickers: Define the analysis period
- Breakdown Dropdown: Choose "Totals" or "By Month" view
- Search Button: Generates report with current settings
Main Content Area¶
- Summary Statistics: Annual order counts and customer averages
- Results Table: Box types with counts (totals or monthly columns)
- Start/End Date Display: Shows exact timestamps used for query
Report Data & Columns¶
Totals View¶
| Column | Description | Source |
|---|---|---|
| Box | Box type/size name | From boxes table |
| Boxes | Count of orders for this box type | COUNT of cust_order records with this order_box_size |
By Month View¶
| Column | Description | Source |
|---|---|---|
| Box | Box type/size name | From boxes table |
| [Month Year] | Count for that specific month | One column per month in date range |
Example: "Jan 2026", "Feb 2026", "Mar 2026" columns each showing box counts for that month
Breakdown Options¶
Totals View¶
What It Shows:
- Single number per box type
- Sum of all boxes sold in entire date range
- Simple, easy-to-read format
When to Use:
- Quick overview of box type distribution
- Comparing total sales across products
- Simple reporting needs
- Year-end summaries
Table Format:
Box Name | Boxes
Small Box | 450
Medium Box | 1,200
Large Box | 850
By Month View¶
What It Shows:
- Separate column for each month in date range
- Monthly progression visible across row
- Trends and seasonality patterns
When to Use:
- Identifying seasonal trends
- Tracking product launch performance
- Spotting growth or decline patterns
- Monthly performance comparisons
Table Format:
Box Name | Jan 2026 | Feb 2026 | Mar 2026
Small Box | 120 | 150 | 180
Medium Box | 380 | 410 | 410
Large Box | 270 | 280 | 300
Breakdown Logic:
- Automatically splits date range into calendar months
- Each cell shows count for orders delivered in that month
- Handles partial months (e.g., if range starts mid-month)
Filters & Search Options¶
Date Range Selection¶
From Date:
- Calendar picker with manual entry
- Defaults to 3 weeks ago if not specified
- Sets start of analysis period
To Date:
- Calendar picker with manual entry
- Defaults to current time if not specified
- Automatically sets to 11:59:59pm of selected date
- Sets end of analysis period
Date Handling:
- Filters by deliver_on field (when order was/will be delivered)
- Excludes cancelled orders (status != 5)
- Inclusive of both start and end dates
Breakdown Selection¶
Totals:
- Default option
- Shows single aggregate count per box type
- Simplest view
By Month:
- Creates column for each calendar month in range
- Automatically determines month boundaries
- Handles date ranges spanning multiple months
Important Note:
- Monthly breakdown uses full calendar months
- If you select Jan 15 to Mar 20, you'll still see full Jan, Feb, Mar columns
- Each month column sums orders from 1st to last day of that month
Archive Database Integration¶
Feature: Searches both current and archived databases
How It Works:
- First pass: Queries current database
- Second pass: Queries archive database (if USEARCHIVE enabled and not on app.kvl.pw)
- Combines counts from both sources
- Provides complete historical data
Benefit:
- Can report on data from years ago
- No need to worry about data archiving affecting reports
- Seamless experience for users
Common Use Cases¶
Use Case 1: Year-End Box Type Analysis¶
Goal: Understand which box types were most popular last year
Steps:
- Set From date to January 1 of previous year
- Set To date to December 31 of previous year
- Select "Totals" breakdown
- Click "Search"
- Compare box counts in table
- Identify best and worst performing products
Example: If "Family Box" sold 5,000 units but "Single Box" sold 800 units, focus marketing and inventory on Family Box.
Tips:
- Use full calendar year for clean comparison
- Compare to prior year to identify trends
- Consider profit margin, not just volume
Use Case 2: Track New Box Launch Performance¶
Goal: Monitor month-over-month growth of recently launched box type
Steps:
- Set From date to month before launch
- Set To date to current date
- Select "By Month" breakdown
- Click "Search"
- Find new box type in table
- Review progression across months
- Compare to expected adoption curve
Example: New "Keto Box" launched in January with 50 sales, grew to 200 in February, 350 in March - showing healthy 75%+ monthly growth.
Tips:
- Look for consistent month-over-month growth
- Compare to other new launches
- Adjust marketing if growth stalls
Use Case 3: Seasonal Pattern Identification¶
Goal: Identify which box types have seasonal demand
Steps:
- Set From date to 2+ years ago
- Set To date to today
- Select "By Month" breakdown
- Click "Search"
- Look for repeating patterns in specific months
- Note which products spike in summer vs winter
Example: "Grilling Box" peaks every June-August, "Comfort Food Box" peaks November-February - plan inventory accordingly.
Tips:
- Use multi-year data for reliable patterns
- Account for marketing campaigns that might skew data
- Plan promotions around seasonal low periods
Use Case 4: Monthly Performance Targets¶
Goal: Set realistic monthly sales targets per box type
Steps:
- Set From date to 12 months ago
- Set To date to current month
- Select "By Month" breakdown
- Click "Search"
- Calculate average monthly sales per box type
- Add growth percentage for target
- Use for next month's goals
Example: "Medium Box" averaged 400/month last year. Target 10% growth = 440 boxes for next month.
Tips:
- Account for growth trends when setting targets
- Adjust for known seasonal patterns
- Review targets quarterly
Use Case 5: Product Discontinuation Decision¶
Goal: Determine if underperforming box type should be discontinued
Steps:
- Set date range to last 6 months
- Select "By Month" breakdown
- Click "Search"
- Identify box types with declining or low counts
- Calculate profitability per box type
- Review customer feedback for low performers
- Make data-driven decision
Example: "Trial Box" showing 10, 8, 5, 4, 3, 2 sales across 6 months with negative profit - consider discontinuation.
Tips:
- Don't decide on volume alone - check profit margins
- Consider strategic value (customer acquisition)
- Review customer retention rates per box type
- Survey customers before discontinuing
Troubleshooting¶
Counts Don't Match Order System¶
Symptoms: Box counts in report don't align with other reports or manual counts
Check:
- Verify date range matches other report exactly
- Confirm both reports filter cancelled orders consistently
- Check if other report uses different date field (created vs delivered)
- Verify box type names match between systems
Solutions:
- Use deliver_on date range to match this report
- Exclude cancelled orders (status 5) in comparison reports
- Check order_box_size field directly in database
- Run report with wider date range to test
Common Causes:
- Different date field filtering (created, updated, delivered)
- Including vs excluding cancelled orders
- Archive data not included in other reports
Monthly Columns Show Unexpected Months¶
Symptoms: Table has months outside your selected date range
Check:
- Review "start:" and "end:" timestamps below filter form
- Note that monthly breakdown uses full calendar months
- Verify date range selection was saved
Solutions:
- This is expected behavior for monthly breakdown
- Selecting Jan 15 to Mar 20 will show full Jan, Feb, Mar
- Use "Totals" view if you need exact date range
If Problem Persists: Contact support if months outside even full calendar month range appear.
Box Type Missing From Report¶
Symptoms: Known box type doesn't appear in table
Check:
- Verify box type exists in boxes table
- Check if any orders exist for this box type in date range
- Confirm orders aren't all cancelled (status 5)
- Check order_box_size field in order records
Solutions:
- Expand date range to when box was active
- Verify box exists in Settings > Boxes configuration
- Check if box was renamed or discontinued
- Query database directly to verify orders exist
Related Pages¶
- Boxes Settings (
settings-boxes.php) - Configure box types and sizes - Average Spend Report (
average-spend-per-box-per-box-type-report.php) - Analyze add-on spending by box type - Order Reports (
order-reports.php) - General order analysis and trends - Customer Orders (
customer-orders.php) - Individual customer order lists
Typical Workflow:
- Boxes Sold Report → Identify popular box → Average Spend Report → Analyze profitability
- Boxes Sold Report → Spot declining box → Customer feedback → Consider discontinuation
- Monthly performance review → Boxes Sold Report → Set next month targets
Permissions & Access¶
Required Access Level: View access (implied from code - no explicit permission check)
Access Level Capabilities:
- Customer Service: View box sales data
- Manager: Analyze product performance and trends
- Administrator: Full access to all date ranges and data
- Kiva Admin: All features plus database access
Best Practices¶
Regular Reporting¶
- Run monthly reports first week of each month
- Compare to same month prior year
- Track year-over-year growth per box type
- Document seasonal patterns
Data Analysis¶
- Use "By Month" for trend analysis
- Use "Totals" for quick summaries
- Compare to revenue reports for profitability
- Cross-reference with customer retention by box type
Product Planning¶
- Discontinue boxes with sustained <50/month
- Promote boxes showing growth trends
- Launch new boxes in historically strong months
- Test seasonal boxes before full rollout
Things to Avoid¶
- ❌ Don't make decisions on single month's data
- ❌ Don't ignore small boxes that have high profit margins
- ❌ Don't compare without accounting for seasonal patterns
- ❌ Don't forget to check both current and archived data
Quick Reference Card¶
| Task | Action/Location |
|---|---|
| View last year totals | Set full year dates, Totals breakdown |
| Track monthly trends | Select "By Month" breakdown |
| Compare box types | Use Totals view, note counts |
| Check seasonal patterns | Multi-year range, By Month view |
| Find best seller | Totals view, highest count |
| Track new product launch | Set launch date forward, By Month |
| Calculate monthly average | By Month view, manual averaging |
| See exact query dates | Check "start:" and "end:" display |
| Analyze discontinuation | 6 month range, By Month, look for decline |
| Set monthly targets | Prior 12 months, calculate averages |
FAQs¶
Why does the report show 2019 statistics at the top?¶
These are hardcoded examples showing how to calculate orders per customer metrics. They specifically query 2019 data as a demonstration. They don't affect your actual report results.
Can I export this data to Excel?¶
The page doesn't have a built-in export button. Use your browser's copy function to select the table and paste into Excel, or print to PDF.
Why do monthly breakdown columns start from first of month even if my date range starts mid-month?¶
The monthly breakdown feature uses full calendar months to ensure clean month-over-month comparisons. This is intentional behavior for better trend analysis.
What if a box type was renamed - will it show separate entries?¶
Yes, the report groups by the current box name in the boxes table. If the box was renamed in database, it will show under the new name. Historical orders link by box ID, not name.
How does the archive database search work?¶
If enabled, the system automatically queries both the current database and the archive database, then combines the counts. This is transparent to you - just run the report normally.
Change Log¶
2026-03-01¶
- Initial documentation created
- All sections completed based on how-many-boxes.php code review
- Documented Totals vs By Month breakdown
- Added archive database integration details
- Included hardcoded 2019 statistics explanation
End of Documentation
For additional help, contact your system administrator or Kiva Logic support.