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

R语言如何实现仅VW品类的12个月滚动同比销售趋势计算

VW品类12个月同比销售趋势计算方案

以下是两种常用场景的实现方式,核心逻辑都是先获取上年同期销售额,再计算同比变化判断趋势:

方案1:SQL实现(基于lag窗口函数)

首先需要把日级数据聚合为月度粒度,再用lag取12个月前的对应值,支持MySQL 8.0+/PostgreSQL/Hive等支持窗口函数的数据库:

WITH monthly_vw_sales AS (
    -- 过滤VW品类,聚合得到月度总销售额
    SELECT 
        DATE_FORMAT(Dates, '%Y-%m') AS year_month, -- 不同数据库日期格式化语法可调整,PG用to_char(Dates, 'yyyy-mm')
        SUM(Sales) AS monthly_sales
    FROM 你的表名
    WHERE Category = 'VW'
    GROUP BY DATE_FORMAT(Dates, '%Y-%m')
)
SELECT 
    year_month,
    monthly_sales,
    -- 取12个月前的同期销售额
    LAG(monthly_sales, 12) OVER (ORDER BY year_month) AS last_year_same_month_sales,
    -- 计算同比增长率,保留2位小数
    ROUND((monthly_sales - LAG(monthly_sales, 12) OVER (ORDER BY year_month)) * 100.0 / LAG(monthly_sales, 12) OVER (ORDER BY year_month), 2) AS year_over_year_growth_rate
FROM monthly_vw_sales
ORDER BY year_month;

前12行数据因无上年同期值,对应字段会返回空,属于正常情况。

方案2:Python Pandas实现

逻辑和SQL一致,用shift(12)实现类似lag的取数效果:

import pandas as pd

# 假设你已导入数据到df,且Dates字段已转为datetime类型
# 1. 过滤VW品类,按月聚合销售额
vw_df = df[df['Category'] == 'VW'].set_index('Dates')
monthly_vw_sales = vw_df['Sales'].resample('M').sum().reset_index()

# 2. 取12个月前的同期销售额
monthly_vw_sales['last_year_same_month_sales'] = monthly_vw_sales['Sales'].shift(12)

# 3. 计算同比增长率
monthly_vw_sales['year_over_year_growth_rate'] = round(
    (monthly_vw_sales['Sales'] - monthly_vw_sales['last_year_same_month_sales']) * 100 / monthly_vw_sales['last_year_same_month_sales'],
    2
)

# 查看结果
print(monthly_vw_sales)

注意事项

  • 如果你的数据集本身就是月度粒度,可跳过聚合步骤,直接过滤VW品类后调用lag/shift函数即可
  • 计算同比增长率时如果上年同期销售额为0会触发除零错误,可新增判断逻辑过滤异常场景
  • 若你需要计算滚动12个月累计销售额的同比而非单月同比,可先做滚动累计计算再求同比:SQL中用sum(monthly_sales) over(order by year_month rows between 11 preceding and current row)计算滚动累计,Pandas中用rolling(12).sum()实现即可

内容的提问来源于stack exchange,提问作者Udo Gniß

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:24:02