分析函数-环比lag()

编辑
  • 文档创建者:zsh331
  • 浏览次数:3531次
  • 编辑次数:6次
  • 最近更新:Kevin-s 于 2019-06-18
  • 1. 环境

    注意事项:由于设计器内置的是 Sqlite 数据库,在使用上很多语法都不支持,请将 Sqlite 数据库文件迁移到主流数据库(MySql、MSSQL、Oracle…)后运行。

    迁移方法:使用第三方软件迁移内置 FRDemo 数据库到指定数据库

    本文运行环境:Microsoft SQL Server 2012 - 11.0.2100.60 (X64) 

                           Copyright (c) Microsoft Corporation

                           Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)


    2. 描述

    对于一些有规律的数据统计表,有时候需要对其分组求每层上期环比来做分析统计操作,称求【环比值】。

    如图:

    222


    3. 思路

    在数据集中用 SQL 的【lag() over(PARTITION BY 分组字段 order by 逐层字段)】函数处理,然后进行直接调用。

    注:LAG() 统计函数可以在一次查询中取出同一字段的前 N 行数据的值,LAG 非常高效。

    LAG(a,b,c):a 是从其他行返回的表达式; b是希望检索的当前行分区的偏移量,是一个正的偏移量,一个往回检索以前的行的数目;c 是在 b 表示的数目超出了分组的范围时返回的值。


    4. 示例

    4.1 准备数据

    打开 SQL Server库中的【大陆汽车销售】表:

    222


    4.2 上期或环比 SQL

    SELECT [年份], [月份], [销量], NULLIF (lag ([销量], 1, 0) OVER ( partition BY [年份] ORDER BY [月份] ),0) AS 上月销量, round( ( [销量] - NULLIF ( lag ([销量], 1, 0) OVER ( partition BY [年份] ORDER BY [月份] ), 0 ) ) / NULLIF ( lag ([销量], 1, 0) OVER ( partition BY [年份] ORDER BY [月份] ), 0 ) * 100, 2, 3 ) AS '环比(%)' FROM 大陆车辆销售;

    公式解释:

    NULLIF():如果两个指定的表达式相等,则返回空值。语法 NULLIF ( expression1 , expression2 ) LAG ([销量], 1, 0):组内前一个月的的销量值。 ROUND(a,b):通常用于四舍五入求值,通常函数中会传入两个参数,第一个参数是要四舍五入的数字,第二个参数就是位数。


    4.3 效果预览

    执行 SQL 脚本,效果如下:

    222


    附件列表


    主题: 报表设计
    标签: 暂无标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]