You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按周一、周二等工作日计算商品日均销量?技术咨询

解决方案:按工作日计算商品日均销量

你的思路完全正确——核心逻辑就是单工作日总销量 ÷ 当期该工作日的总天数,通过新增工作日计数列来实现计算是可行的。下面提供两种更高效的实现方案,你可以根据需求选择:

方案一:SQL层面直接计算(推荐,减少Excel处理负担)

直接在数据库中完成统计和计算,导出后无需在Excel中做复杂操作,适合数据量较大的场景。

修改后的SQL代码如下:

WITH DailyItemSales AS (
    -- 统计每个商品、每个工作日的总销量
    SELECT 
        StockItems.Description AS 'Item',
        DATENAME(dw, Transactions.Date) AS 'Day',
        SUM(TransactionsLine.ItemQuantity) AS TotalSales
    FROM [IPSTransaction].[dbo].[TransactionsLine]
    LEFT JOIN StockItems ON TransactionsLine.StockItemID = StockItems.ID
    LEFT JOIN Transactions ON TransactionsLine.TransactionID = Transactions.id
    WHERE 
        YEAR(Transactions.Date) = YEAR(GETDATE())
        AND Transactions.TransactionTypeID = '5'
    GROUP BY StockItems.Description, DATENAME(dw, Transactions.Date)
),
WeekdayCount AS (
    -- 统计本年每个工作日的总天数
    SELECT 
        DATENAME(dw, Date) AS 'Day',
        COUNT(*) AS DayCount
    FROM (
        -- 生成本年所有日期
        SELECT DATEADD(day, number, DATEFROMPARTS(YEAR(GETDATE()), 1, 1)) AS Date
        FROM master..spt_values
        WHERE type = 'P'
        AND DATEADD(day, number, DATEFROMPARTS(YEAR(GETDATE()), 1, 1)) <= DATEFROMPARTS(YEAR(GETDATE()), 12, 31)
    ) AS AllDates
    GROUP BY DATENAME(dw, Date)
)
-- 关联计算日均销量
SELECT 
    dis.Item,
    dis.Day,
    dis.TotalSales,
    wc.DayCount,
    ROUND(CAST(dis.TotalSales AS FLOAT) / wc.DayCount, 2) AS AvgDailySales
FROM DailyItemSales dis
JOIN WeekdayCount wc ON dis.Day = wc.Day
ORDER BY dis.Item, dis.Day;

代码说明:

  • DailyItemSales:按商品和工作日分组,算出每个商品在对应工作日的总销量
  • WeekdayCount:生成本年所有日期,统计每个工作日的总天数(比如本年共有40个周一)
  • 最后关联两个结果集,用总销量除以对应工作日的天数,得到日均销量(保留两位小数)

方案二:Excel透视表内实现(基于你的思路优化)

如果不想修改SQL,可在现有数据基础上,通过Excel完成计算:

  1. 构建透视表:将Item拖至行区域,Day拖至列区域,ItemQuantity拖至值区域并设置为求和,得到每个商品每个工作日的总销量
  2. 统计工作日天数:在Excel空白区域用公式统计本年每个工作日的数量,比如统计周一的天数:
    =SUMPRODUCT(--(TEXT(ROW(INDIRECT(DATE(YEAR(TODAY()),1,1)&":"&DATE(YEAR(TODAY()),12,31))),"aaa")="一"))
    
    (注:"aaa"会返回中文星期简称,如"一"代表周一,可根据你的Excel语言环境调整)
  3. 添加计算字段:在透视表中插入计算字段,公式为日均销量 = 求和项:ItemQuantity / VLOOKUP(Day, 工作日天数表区域, 2, FALSE),通过VLOOKUP匹配对应工作日的天数完成除法计算

内容的提问来源于stack exchange,提问作者James Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 00:15:35