Synthetic Beverage Sales Data Analysis
Home // Β AI-Powered Data Analysis
π Project Overviewβ
This project aims to analyze sales transactions from a SQL Server database to uncover key insights related to customer purchasing behavior, revenue trends, and regional performance. The final insights will be presented through a Power BI dashboard to help stakeholders make data-driven business decisions.
Tech Stack:
- SQL Server β Data storage, querying, and transformation.
- Power BI β Data visualization and interactive dashboards.
- DAX (Power BI) β Advanced calculations and performance metrics.
π Summary of the Dataset
Total Records: 8,999,910
Total Columns: 11
Β Key Columns:
- Order_ID β Unique identifier for each order.
- Customer_ID β Unique identifier for each customer.
- Customer_Type β B2B (business) or B2C (individual).
- Product β The name of the product sold.
- Category β Product category (Water, Soft Drinks, Juices, Alcoholic Beverages, etc.).
- Unit_Price β Price per unit of the product.
- Quantity β Number of units sold.
- Discount β Percentage discount applied.
- Total_Price β Total revenue after discount.
- Region β Geographic location of the customer.
- Order_Date β Date when the order was placed.
π Key Analysis Areas:
- Customer Revenue Analysis β Identify top customers (B2B & B2C) by revenue and order frequency.
- Product Performance β Determine the best-selling and least profitable products.
- Regional Sales Insights β Analyze how different regions contribute to overall revenue.
- Discount Impact Analysis β Evaluate how discounts affect sales and profitability.
- Sales Trend Forecasting β Use SQL analytics to predict future sales trends based on historical data.
πΎ Data Acquisition & Preparation
Create the Table and Run BULK INSERT
CREATE TABLE Sales (
Order_ID VARCHAR(50),
Customer_ID VARCHAR(50),
Customer_Type VARCHAR(10),
Product VARCHAR(255),
Category VARCHAR(255),
Unit_Price DECIMAL(10,2),
Quantity INT,
Discount DECIMAL(5,2),
Total_Price DECIMAL(10,2),
Region VARCHAR(255),
Order_Date DATE
);
BULK INSERT Sales
FROM 'D:\roy\roy files\Data\synthetic_beverage_sales_data.csv'
FORMAT = 'CSV',
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
TABLOCK
);
Data Cleaning & Integrity Checks
--Check for Exact Duplicate Rows
SELECT Order_ID, Customer_ID, Product, Category, Unit_Price, Quantity, Discount, Total_Price, Region, Order_Date, COUNT(*)
FROM Sales
GROUP BY Order_ID, Customer_ID, Product, Category, Unit_Price, Quantity, Discount, Total_Price, Region, Order_Date
HAVING COUNT(*) > 1;
--Check for NULL Values
SELECT
SUM(CASE WHEN Order_ID IS NULL THEN 1 ELSE 0 END) AS Null_Order_ID,
SUM(CASE WHEN Customer_ID IS NULL THEN 1 ELSE 0 END) AS Null_Customer_ID,
SUM(CASE WHEN Product IS NULL THEN 1 ELSE 0 END) AS Null_Product,
SUM(CASE WHEN Category IS NULL THEN 1 ELSE 0 END) AS Null_Category,
SUM(CASE WHEN Unit_Price IS NULL THEN 1 ELSE 0 END) AS Null_Unit_Price,
SUM(CASE WHEN Quantity IS NULL THEN 1 ELSE 0 END) AS Null_Quantity,
SUM(CASE WHEN Discount IS NULL THEN 1 ELSE 0 END) AS Null_Discount,
SUM(CASE WHEN Total_Price IS NULL THEN 1 ELSE 0 END) AS Null_Total_Price,
SUM(CASE WHEN Region IS NULL THEN 1 ELSE 0 END) AS Null_Region,
SUM(CASE WHEN Order_Date IS NULL THEN 1 ELSE 0 END) AS Null_Order_Date
FROM Sales;
Null_Order_ID | Null_Customer_ID | Null_Product | Null_Category | Null_Unit_Price | Null_Quantity | Null_Discount | Null_Total_Price | Null_Region | Null_Order_Date |
---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
--Check for Invalid Data
SELECT *
FROM Sales
WHERE Unit_Price <= 0
OR Quantity <= 0
OR Total_Price < 0;
--Check Data Types
SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Sales';
COLUMN_NAME | DATA_TYPE | CHARACTER_MAXIMUM_LENGTH |
---|---|---|
Order_ID | varchar | 50 |
Customer_ID | varchar | 50 |
Customer_Type | varchar | 10 |
Product | varchar | 255 |
Category | varchar | 255 |
Unit_Price | decimal | NULL |
Quantity | int | NULL |
Discount | decimal | NULL |
Total_Price | decimal | NULL |
Region | varchar | 255 |
Order_Date | date | NULL |
--Apply Optimizations
ALTER TABLE Sales ALTER COLUMN Order_ID VARCHAR(20);
ALTER TABLE Sales ALTER COLUMN Customer_ID VARCHAR(20);
ALTER TABLE Sales ALTER COLUMN Customer_Type CHAR(3);
ALTER TABLE Sales ALTER COLUMN Product VARCHAR(100);
ALTER TABLE Sales ALTER COLUMN Category VARCHAR(50);
ALTER TABLE Sales ALTER COLUMN Unit_Price DECIMAL(10,2);
ALTER TABLE Sales ALTER COLUMN Quantity SMALLINT;
ALTER TABLE Sales ALTER COLUMN Discount DECIMAL(5,2);
ALTER TABLE Sales ALTER COLUMN Total_Price DECIMAL(10,2);
Indexing for Query Optimization
-- Index for time-based queries
CREATE INDEX idx_sales_orderdate ON Sales (Order_Date);
-- Index for customer-based lookups
CREATE INDEX idx_sales_customer ON Sales (Customer_ID);
-- Index for product-based analysis
CREATE INDEX idx_sales_product ON Sales (Product);
-- Index for regional sales queries
CREATE INDEX idx_sales_region ON Sales (Region);
-- Index for fast revenue calculations
CREATE INDEX idx_sales_revenue ON Sales (Total_Price DESC);
Partitioning
--Create a Partition Function
CREATE PARTITION FUNCTION pf_OrderDate (DATE)
AS RANGE RIGHT FOR VALUES ('2022-01-01', '2023-01-01');
--Create a Partition Scheme
CREATE PARTITION SCHEME ps_OrderDate
AS PARTITION pf_OrderDate ALL TO ([PRIMARY]);
--Create a Partitioned Table
CREATE TABLE Sales_Partitioned (
Order_ID VARCHAR(20),
Customer_ID VARCHAR(15),
Customer_Type CHAR(3),
Product VARCHAR(100),
Category VARCHAR(50),
Unit_Price DECIMAL(10,2),
Quantity SMALLINT,
Discount DECIMAL(5,2),
Total_Price DECIMAL(10,2),
Region VARCHAR(50),
Order_Date DATE
)
ON ps_OrderDate(Order_Date); -- Apply partitioning
--Insert Data into Partitioned Table
INSERT INTO Sales_Partitioned
SELECT * FROM Sales;
--Rename the partitioned table to Sales and Drop the old one
DROP TABLE Sales; -- Drop old table
EXEC sp_rename 'Sales_Partitioned', 'Sales';
--Check the row distribution per partition
SELECT $PARTITION.pf_OrderDate(Order_Date) AS Partition_Number, COUNT(*)
FROM Sales
GROUP BY $PARTITION.pf_OrderDate(Order_Date);
Partition_Number | (No column name) |
---|---|
1 | 2997956 |
2 | 3007297 |
3 | 2994657 |
π Advanced SQL Analysis
Customer Revenue Analysis
π‘ Business Question:
- Identify the top 5 customers (B2B & B2C separately) who have contributed the highest revenue in the last 12 months, considering discounts and order frequency.
WITH CustomerRevenue AS (
SELECT
Customer_ID,
Customer_Type,
COUNT(DISTINCT Order_ID) AS Total_Orders,
SUM((Unit_Price * Quantity) - (Discount * Unit_Price * Quantity)) AS Total_Revenue
FROM Sales
WHERE Order_Date >= DATEADD(YEAR, -1, '2023-01-01')
GROUP BY Customer_ID, Customer_Type
),
RankedCustomers AS (
SELECT
Customer_ID,
Customer_Type,
Total_Orders,
Total_Revenue,
RANK() OVER (PARTITION BY Customer_Type ORDER BY Total_Revenue DESC) AS RevenueRank
FROM CustomerRevenue
)
SELECT
Customer_ID,
Customer_Type,
Total_Orders,
Total_Revenue
FROM RankedCustomers
WHERE RevenueRank <= 5
ORDER BY Customer_Type, RevenueRank;
Customer_ID | Customer_Type | Total_Orders | Total_Revenue |
---|---|---|---|
CUS1256 | B2B | 243 | 273172.4015 |
CUS9241 | B2B | 210 | 261596.7225 |
CUS2662 | B2B | 235 | 260785.9145 |
CUS9868 | B2B | 220 | 260193.9800 |
CUS4834 | B2B | 222 | 256911.5470 |
CUS9683 | B2C | 228 | 52350.0500 |
CUS2694 | B2C | 228 | 46306.2200 |
CUS5597 | B2C | 234 | 45370.0300 |
CUS5210 | B2C | 216 | 44884.7500 |
CUS2091 | B2C | 219 | 44870.5500 |
Key Observations
- B2B customers generate much higher revenue than B2C customers (5x difference!).
- Total Orders do not always correlate with Total Revenue (higher-value orders play a role).
- B2C customers are closer in revenue, while B2B has larger revenue gaps between top customers.
Product Performance Analysis
π‘ Business Question:
- Which products are the best-selling and least profitable, considering revenue, discounts, and sales volume?
- How do product sales and profitability trends change over time (monthly, quarterly, yearly)?
WITH ProductSales AS (
SELECT
Product,
Category,
SUM(Quantity) AS Total_Quantity_Sold,
SUM((Unit_Price * Quantity) - (Discount * Unit_Price * Quantity)) AS Total_Revenue
FROM Sales
GROUP BY Product, Category
),
RankedProducts AS (
SELECT
Product,
Category,
Total_Quantity_Sold,
Total_Revenue,
RANK() OVER (ORDER BY Total_Quantity_Sold DESC) AS Best_Selling_Rank,
RANK() OVER (ORDER BY Total_Revenue ASC) AS Least_Profitable_Rank
FROM ProductSales
)
SELECT
Product,
Category,
Total_Quantity_Sold,
Total_Revenue,
Best_Selling_Rank,
Least_Profitable_Rank
FROM RankedProducts
WHERE Best_Selling_Rank <= 5 OR Least_Profitable_Rank <= 5
ORDER BY Best_Selling_Rank, Least_Profitable_Rank;
Product | Category | Total_Quantity_Sold | Total_Revenue | Best_Selling_Rank | Least_Profitable_Rank |
---|---|---|---|---|---|
Hohes C Orange | Juices | 7794189 | 15048221.7680 | 1 | 30 |
Tomato Juice | Juices | 7395329 | 19758651.7635 | 2 | 32 |
Granini Apple | Juices | 7393212 | 12671654.7465 | 3 | 29 |
Cranberry Juice | Juices | 7380841 | 23044834.0420 | 4 | 39 |
Passion Fruit Juice | Juices | 7372320 | 22143149.2490 | 5 | 36 |
Vittel | Water | 5921086 | 3791982.8410 | 9 | 4 |
Volvic | Water | 5738479 | 3571393.6015 | 15 | 2 |
Mezzo Mix | Soft Drinks | 4129809 | 3721743.4680 | 27 | 3 |
Krombacher | Alcoholic Beverages | 2722613 | 3897180.6365 | 34 | 5 |
Warsteiner | Alcoholic Beverages | 2705225 | 3548409.3180 | 36 | 1 |
Key Observations
- Juices dominate sales volume β The top 5 best-selling products are all juices.
- Water & Alcoholic Beverages rank high in least profitability β Products like Warsteiner (#1 least profitable) and Vittel (#4 least profitable) generate low revenue compared to sales.
- Soft Drinks (Mezzo Mix) are neither top-selling nor high-revenue generators β Ranking #27 in best-selling but #3 in least profitable, indicating it might be a low-margin product.
WITH ProductSales AS (
SELECT
Product,
Category,
YEAR(Order_Date) AS Sales_Year,
SUM(Quantity) AS Total_Quantity_Sold,
SUM((Unit_Price * Quantity) - (Discount * Unit_Price * Quantity)) AS Total_Revenue
FROM Sales WITH (NOLOCK)
GROUP BY Product, Category, YEAR(Order_Date)
),
RankedProducts AS (
SELECT
Product,
Category,
Sales_Year,
Total_Quantity_Sold,
Total_Revenue,
RANK() OVER (PARTITION BY Sales_Year ORDER BY Total_Quantity_Sold DESC) AS Best_Selling_Rank,
RANK() OVER (PARTITION BY Sales_Year ORDER BY Total_Revenue ASC) AS Least_Profitable_Rank
FROM ProductSales
)
SELECT
Sales_Year,
Product,
Category,
Total_Quantity_Sold,
Total_Revenue,
Best_Selling_Rank,
Least_Profitable_Rank
FROM RankedProducts
WHERE Best_Selling_Rank <= 5 OR Least_Profitable_Rank <= 5
ORDER BY Sales_Year DESC, Best_Selling_Rank, Least_Profitable_Rank;
Sales_Year | Product | Category | Total_Quantity_Sold | Total_Revenue | Best_Selling_Rank | Least_Profitable_Rank |
---|---|---|---|---|---|---|
2023 | Hohes C Orange | Juices | 2591904 | 5151293.2435 | 1 | 30 |
2023 | Granini Apple | Juices | 2465064 | 4355558.2705 | 2 | 29 |
2023 | Passion Fruit Juice | Juices | 2454938 | 7596955.2960 | 3 | 36 |
2023 | Rauch Multivitamin | Juices | 2450170 | 6201396.3390 | 4 | 31 |
2023 | Mango Juice | Juices | 2449497 | 7689154.2705 | 5 | 37 |
2023 | Vittel | Water | 1965535 | 1292822.0300 | 9 | 4 |
2023 | Volvic | Water | 1906351 | 1220434.5830 | 15 | 2 |
2023 | Mezzo Mix | Soft Drinks | 1371163 | 1272048.0975 | 28 | 3 |
2023 | Krombacher | Alcoholic Beverages | 909340 | 1337450.7410 | 35 | 5 |
2023 | Warsteiner | Alcoholic Beverages | 901095 | 1216468.2340 | 36 | 1 |
2022 | Hohes C Orange | Juices | 2598841 | 5018407.0090 | 1 | 30 |
2022 | Tomato Juice | Juices | 2487024 | 6641356.8905 | 2 | 32 |
2022 | Cranberry Juice | Juices | 2470974 | 7704555.9210 | 3 | 39 |
2022 | Passion Fruit Juice | Juices | 2470281 | 7412354.2290 | 4 | 36 |
2022 | Granini Apple | Juices | 2467975 | 4225958.7500 | 5 | 29 |
2022 | Vittel | Water | 1999845 | 1282619.3890 | 8 | 4 |
2022 | Volvic | Water | 1938689 | 1207813.8385 | 10 | 2 |
2022 | Mezzo Mix | Soft Drinks | 1389841 | 1253588.7695 | 24 | 3 |
2022 | Krombacher | Alcoholic Beverages | 914729 | 1311510.7020 | 34 | 5 |
2022 | Warsteiner | Alcoholic Beverages | 902019 | 1183765.6715 | 36 | 1 |
2021 | Hohes C Orange | Juices | 2603444 | 4878521.5155 | 1 | 30 |
2021 | Tomato Juice | Juices | 2466261 | 6391263.6040 | 2 | 32 |
2021 | Cranberry Juice | Juices | 2460722 | 7461822.0065 | 3 | 39 |
2021 | Granini Apple | Juices | 2460173 | 4090137.7260 | 4 | 29 |
2021 | Passion Fruit Juice | Juices | 2447101 | 7133839.7240 | 5 | 36 |
2021 | Vittel | Water | 1955706 | 1216541.4220 | 9 | 4 |
2021 | Volvic | Water | 1893439 | 1143145.1800 | 15 | 1 |
2021 | Mezzo Mix | Soft Drinks | 1368805 | 1196106.6010 | 28 | 3 |
2021 | Warsteiner | Alcoholic Beverages | 902111 | 1148175.4125 | 34 | 2 |
2021 | Krombacher | Alcoholic Beverages | 898544 | 1248219.1935 | 36 | 5 |
Key Observations
- Juices dominate the best-selling category across all years.
- Water & Alcoholic Beverages consistently rank among the least profitable β Warsteiner, Volvic, and Vittel struggle in revenue every year.
- Year-over-year product trends remain stable, indicating consistent customer preferences.
Regional Sales Insights
WITH MonthlySales AS (
SELECT
YEAR(Order_Date) AS Sales_Year,
MONTH(Order_Date) AS Sales_Month,
SUM((Unit_Price * Quantity) - (Discount * Unit_Price * Quantity)) AS Total_Revenue
FROM Sales WITH (NOLOCK)
GROUP BY YEAR(Order_Date), MONTH(Order_Date)
),
MovingAverage AS (
SELECT
Sales_Year,
Sales_Month,
Total_Revenue,
AVG(Total_Revenue) OVER (ORDER BY Sales_Year, Sales_Month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS Moving_Avg_3Months
FROM MonthlySales
)
SELECT * FROM MovingAverage
ORDER BY Sales_Year DESC, Sales_Month DESC;
π‘ Business Question:
- Which regions contribute the most to total revenue, and how do sales trends vary across regions?
WITH RegionalSales AS (
SELECT
Region,
COUNT(DISTINCT Order_ID) AS Total_Orders,
SUM((Unit_Price * Quantity) - (Discount * Unit_Price * Quantity)) AS Total_Revenue
FROM Sales WITH (NOLOCK)
GROUP BY Region
)
SELECT
Region,
Total_Orders,
Total_Revenue,
RANK() OVER (ORDER BY Total_Revenue DESC) AS Revenue_Rank
FROM RegionalSales
ORDER BY Total_Revenue DESC;
Region | Total_Orders | Total_Revenue | Revenue_Rank |
---|---|---|---|
Hamburg | 201457 | 82470780.2285 | 1 |
Hessen | 182343 | 78400118.3155 | 2 |
Saarland | 191273 | 78390596.4725 | 3 |
Rheinland-Pfalz | 192687 | 75838685.7170 | 4 |
Mecklenburg-Vorpommern | 181637 | 75517255.0845 | 5 |
Thηringen | 187859 | 75324875.7725 | 6 |
Berlin | 182569 | 74567936.4860 | 7 |
Bayern | 185352 | 72825405.8320 | 8 |
Niedersachsen | 192298 | 71959057.6580 | 9 |
Sachsen | 190813 | 71947001.6665 | 10 |
Baden-Wηrttemberg | 184213 | 71594846.2460 | 11 |
Nordrhein-Westfalen | 189719 | 71393809.7100 | 12 |
Brandenburg | 177616 | 71349037.9050 | 13 |
Schleswig-Holstein | 188685 | 70317836.2790 | 14 |
Sachsen-Anhalt | 182091 | 69765550.4080 | 15 |
Bremen | 189388 | 65018497.4140 | 16 |
Key Observations
- Hamburg leads in total revenue β Highest revenue ($82M+) despite having similar order volume to other regions.
- Some regions generate lower revenue despite high order count β Example: Bremen ranks #16 in revenue but has 189k+ orders.
- Revenue distribution is competitive β The top 10 regions have revenues above $70M, showing balanced regional sales.
Discount Impact on Sales & Profitability
π‘ Business Question:
- How do discounts impact total revenue, profit margins, and sales volume? Are discounts helping or hurting profitability?
WITH DiscountAnalysis AS (
SELECT
CASE
WHEN Discount = 0 THEN 'No Discount'
WHEN Discount BETWEEN 0.01 AND 0.05 THEN 'Low Discount (1-5%)'
WHEN Discount BETWEEN 0.06 AND 0.10 THEN 'Medium Discount (6-10%)'
ELSE 'High Discount (>10%)'
END AS Discount_Category,
COUNT(DISTINCT Order_ID) AS Total_Orders,
SUM(Quantity) AS Total_Quantity_Sold,
SUM((Unit_Price * Quantity) - (Discount * Unit_Price * Quantity)) AS Total_Revenue,
AVG((Unit_Price * Quantity) - (Discount * Unit_Price * Quantity)) AS Avg_Revenue_Per_Order
FROM Sales WITH (NOLOCK)
GROUP BY
CASE
WHEN Discount = 0 THEN 'No Discount'
WHEN Discount BETWEEN 0.01 AND 0.05 THEN 'Low Discount (1-5%)'
WHEN Discount BETWEEN 0.06 AND 0.10 THEN 'Medium Discount (6-10%)'
ELSE 'High Discount (>10%)'
END
)
SELECT
Discount_Category,
Total_Orders,
Total_Quantity_Sold,
Total_Revenue,
Avg_Revenue_Per_Order
FROM DiscountAnalysis
ORDER BY Total_Revenue DESC;
Discount_Category | Total_Orders | Total_Quantity_Sold | Total_Revenue | Avg_Revenue_Per_Order |
---|---|---|---|---|
Medium Discount (6-10%) | 804217 | 85916100 | 492967690.5150 | 356.039005 |
No Discount | 1931192 | 46360564 | 275061551.0800 | 47.462006 |
Low Discount (1-5%) | 818956 | 48815077 | 246116475.5090 | 171.044997 |
High Discount (>10%) | 325690 | 27149380 | 162535574.0910 | 426.583522 |
Key Observations
- Medium Discount (6-10%) generates the highest total revenue β Contributing $492M with a strong order volume (804K+ orders).
- High Discounts (>10%) drive the highest revenue per order ($426), but lowest sales volume β Fewer orders, but customers spend more.
- No Discount orders are the highest (1.9M orders), but the lowest revenue per order ($47.46) β Customers still buy, but average spending is lower.
- Low Discount (1-5%) doesn’t boost revenue significantly compared to medium discounts β May indicate 1-5% discounts aren’t very effective.
Sales Trend Forecasting
π‘ Business Question:
- How can we predict future sales trends based on historical data?
WITH MonthlySales AS (
SELECT
YEAR(Order_Date) AS Sales_Year,
MONTH(Order_Date) AS Sales_Month,
SUM((Unit_Price * Quantity) - (Discount * Unit_Price * Quantity)) AS Total_Revenue
FROM Sales WITH (NOLOCK)
GROUP BY YEAR(Order_Date), MONTH(Order_Date)
),
MovingAverage AS (
SELECT
Sales_Year,
Sales_Month,
Total_Revenue,
AVG(Total_Revenue) OVER (ORDER BY Sales_Year, Sales_Month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS Moving_Avg_3Months
FROM MonthlySales
)
SELECT * FROM MovingAverage
ORDER BY Sales_Year DESC, Sales_Month DESC;
WITH YearlySales AS (
SELECT
YEAR(Order_Date) AS Sales_Year,
SUM((Unit_Price * Quantity) - (Discount * Unit_Price * Quantity)) AS Total_Revenue
FROM Sales WITH (NOLOCK)
GROUP BY YEAR(Order_Date)
),
GrowthAnalysis AS (
SELECT
Sales_Year,
Total_Revenue,
LAG(Total_Revenue) OVER (ORDER BY Sales_Year) AS Previous_Year_Revenue,
(Total_Revenue - LAG(Total_Revenue) OVER (ORDER BY Sales_Year)) / NULLIF(LAG(Total_Revenue) OVER (ORDER BY Sales_Year), 0) * 100 AS Yearly_Growth_Percentage
FROM YearlySales
)
SELECT * FROM GrowthAnalysis
ORDER BY Sales_Year DESC;
Sales_Year | Sales_Month | Total_Revenue | Moving_Avg_3Months |
---|---|---|---|
2023 | 12 | 33766725.5135 | 33896828.012666 |
2023 | 11 | 33712861.6100 | 33635810.899666 |
2023 | 10 | 34210896.9145 | 33893958.163333 |
2023 | 9 | 32983674.1745 | 33909750.330000 |
2023 | 8 | 34487303.4010 | 33981349.161166 |
2023 | 7 | 34258273.4145 | 33659205.189000 |
2023 | 6 | 33198470.6680 | 33027256.722833 |
2023 | 5 | 33520871.4845 | 33202760.579333 |
2023 | 4 | 32362428.0160 | 32554577.952500 |
2023 | 3 | 33724982.2375 | 33091092.853500 |
2023 | 2 | 31576323.6040 | 33334820.229833 |
2023 | 1 | 33971972.7190 | 33602645.149500 |
2022 | 12 | 34456164.3665 | 33457520.148000 |
2022 | 11 | 32379798.3630 | 32806685.140333 |
2022 | 10 | 33536597.7145 | 33185142.770500 |
2022 | 9 | 32503659.3435 | 33140252.686833 |
2022 | 8 | 33515171.2535 | 33155876.733000 |
2022 | 7 | 33401927.4635 | 33073539.599000 |
2022 | 6 | 32550531.4820 | 32734477.748000 |
2022 | 5 | 33268159.8515 | 33152078.151500 |
2022 | 4 | 32384741.9105 | 32137655.949666 |
2022 | 3 | 33803332.6925 | 32287689.647500 |
2022 | 2 | 30224893.2460 | 32167348.150500 |
2022 | 1 | 32834843.0040 | 32418190.189500 |
2021 | 12 | 33442308.2015 | 32095819.657666 |
2021 | 11 | 30977419.3630 | 31360941.113166 |
2021 | 10 | 31867731.4085 | 31677002.079833 |
2021 | 9 | 31237672.5680 | 31758446.030833 |
2021 | 8 | 31925602.2630 | 31676985.205000 |
2021 | 7 | 32112063.2615 | 31653615.765333 |
2021 | 6 | 30993290.0905 | 31330281.203000 |
2021 | 5 | 31855493.9440 | 31984997.909166 |
2021 | 4 | 31142059.5745 | 31069890.608666 |
2021 | 3 | 32957440.2090 | 31497682.024166 |
2021 | 2 | 29110172.0425 | 30767802.931750 |
2021 | 1 | 32425433.8210 | 32425433.821000 |
Sales_Year | Total_Revenue | Previous_Year_Revenue | Yearly_Growth_Percentage |
---|---|---|---|
2023 | 401774783.7570 | 394859820.6910 | 1.751200 |
2022 | 394859820.6910 | 380046686.7470 | 3.897700 |
2021 | 380046686.7470 | NULL | NULL |
Key Observations
- Sales have consistently grown year-over-year, but the growth rate is slowing down (3.89% in 2022 vs. 1.75% in 2023).
- 2023’s growth is lower than 2022’s, suggesting potential market saturation or lower demand.
- If this trend continues, 2024’s projected growth might be even lower.
- Sales fluctuate seasonally, but the 3-month moving average smooths the trend.
- Revenue dips slightly in some months (e.g., Sept 2023 – $32.98M), showing possible seasonal variation.
- Peak months (e.g., Aug 2023 – $34.48M) show potential high-demand periods (promotions, events?).