仅分享个人解题思路,方法不只一种

------------------------------------------------------------

步骤:1.先查询出各年月的销售数据

2.在查询出同期年份,同期销量,上月,上月销量,代码如下:

我用的是自连接的方式求同环比,这里不用lag偏移函数求,因为年月的数据不全,偏移的话会有误差

with tab1 as (                                              -- 将查询的销量写入一张临时表
    select 
        strftime('%Y-%m', b.订购日期) as 年月,
        date(strftime('%Y-%m',b.订购日期) || '-01') as 日期, -- 使用月份第一天
        sum(a.数量) as 销量
    FROM 订单明细 a 
    left join 订单 b ON a.订单ID = b.订单ID
    where strftime('%Y', b.订购日期) in ('${年份}', '${年份-1}')  -- 查询出当前的年份和当前年份的去年,方便后面的同期销量计算,比如输入1997,这里过滤的就是1997年和1996年
    GROUP BY strftime('%Y-%m', b.订购日期)
)
SELECT curr.年月,
       curr.销量,
       pre_ym.年月 as 同期年月,
       pre_ym.销量 as 同期销量,
       (case when pre_ym.销量=0 then 0 else curr.销量/pre_ym.销量 - 1 end) as 同比,
       pre_m.年月 as 上月,
       pre_m.销量 as 上月销量,
       (case when pre_m.销量=0 then 0 else curr.销量/pre_m.销量 - 1 end) as 环比
from tab1 curr 
left join tab1 pre_ym on pre_ym.年月=strftime('%Y-%m',date(curr.日期,'-1 year'))
left join tab1 pre_m on pre_m.年月=strftime('%Y-%m',date(curr.日期),'-1 month')
where substr(curr.年月, 1, 4) = '${年份}'   -- 过滤出当前年份,比如前面输入1997,这里过滤出1997年的数据
order by curr.年月

3.查询出年份数据字典,添加年份参数并绑定

4.制作表格,将查询的数据拖入表格,设置隔行换色

5.将同环比设置格式为百分比,保留一位小数,在sql中处理也可以,不过在工作中一般会在报表前端设置

6.为同比增长率、环比增长率设置为负标红加粗

7.合并单元格,添加公式,设置标题

8.保存预览结果

这道题最重要考的是在sql中计算同环比,一般用窗口函数能解决,也可以使用自连接,不过效率不高,在实际中根据实际情况而定

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐