同环比应用场景分析

7893
7

1505121235 数据老手Lv5

发表于2019-3-15 14:46

楼主
本帖最后由 1505121235 于 2019-11-12 15:15 编辑

同环比说明:
        同环比分析在统计分析领域是非常常见的统计分析方法,通过同环比分析可以帮助我们了解数据的变化情况,辅助决策应用。同环比分析中常见的几个统计指标如下:
l 同比增减额:与去年同期进行比较,公式为本期-去年同期;
l 同比增幅:与去年同期进行比较,公式为(本期-去年同期)/去年同期*100% ;
l 环比增减额:与上期进行比较,公式为本期-上期;
l 环比增幅:与上期比较,公式为(本期-上期)/上期*100% ;
l 上期:本期的上一期数据;
l 去年同期:本期对应的去年这一期数据;
应用场景一:系统算子求同环比
系统算子说明
算子
说明和举例
1、_ZF(num)
对某一指标计算求出"(本期-去年同期)/去年同期"的值,即同比增幅。
例如:_ZF(T03_1.C3),表示计算指标T03_1.C3的同比±%。
2、_HBZF(num)
对某一数据计算求出(本期-上期/上期)的值,即环比增幅。
例如:_HBZF(T03_1.C3),表示计算指标T03_1.C3的环比增幅。
3、_HBZJE(num)
对某一数据计算求出(本期-上期)的值,即环比增减额。
例如:_HBZJE(T03_1.C3),表示统计T03_1.C3表元的环比增减额。
4、_ZJE(num)
对某一数据计算求出(本期-去年同期)的值,即同比增减额。
例如:_ZJE(T03_1.C3)表示计算指标T03_1.C3的同期±额。
5、_NCZF(num)
对某一数据计算求出(本期-年初)/年初  的值,这里年初指的是本期对应该年的第一期的值,
例:月报就是该年第一月的值;
6、_NCZJE(num)
对某一数据求出 (本期-年初) 的值,年初的意义同上
7、_ZF(zb,bbq)
对某一指标求 (本期-指定期)/指定期 的值,这里指定期是指bbq参数的值;
例:_ZF(T03_1.C3,'200704--')表示计算指标T03_1.C3的本期相对200704期的增幅;
8、_ZJE(zb,bbq)
对某一指标求(本期-指定期)的值;
例:_ZJE(T03_1.C3,'200708--')表示计算指标T03_1.C3的本期相对于200708期的增减额;
9、_PREV(zb)
表示取zb的上期值;
_PREV(zb,-12)表示取月报zb的去年同期值;
_PREV(zb,'200601--')表示取zb指定期:200601的值;
_PREV(zb,'SQ')表示求上期,可以是任意报表类型;
_PREV(zb,'TQ')表示求去年同期,可以是任意报表类型;
算子使用前提条件
l 条件一:主题集属性中,必须设置主题表的数据期字段;
设置入口:主题集属性-数据表映射
l 条件二:报表模板中,计算的当前期只能是一期数据,例如年报,计算2009年这一年的数据;例如月报,计算2009年11月这一个月的数据;
报表模板的设计与实现
【报表设计】
如下图所示,求XXB.E33的同比增减额、同比增幅,只需要定义算子表达式_ZJE(XXB.E33)和_ZF(XXB.E33)即可

【结果展示】  
说明:因为数据库表中只存了2017年01月-2018年02月的数据,所以只有201801和201802有去年同期,所以这里只显示了这两行的同比

优缺点说明
       优点:直接就可以得到想要的值,写法简单;
       缺点:有应用场景的约束,并非所有场景都能用算子实现;

应用场景二:表内计算公式求同环比
实现思路
表内计算公式求同环比,原理就是在报表中计算出本期值、去年同期值、上期值,用表内的表达式运算得到同比和环比;
如下图所示,B2本期值,C2去年同期值,同比计算表达式:(B2-C2)/C2*100%
这种方法,主要是在报表内获取本期、上期、去年同期数据,那么根据不同的条件和场景,获取上期、去年同期也有如下不同方法:
方式一:算子方式获取上期、同期
当主题表设置了数据期字段,且报表只需要求某一期的数据时可以用_prev()算子。假设主题表的数据期字段为XXB.BBQ,同期、上期可以这么写:
同期表达式:_prev(XXB.BBQ,’TQ’)
上期表达式:_prev(XXB.BBQ,-1)
方式二:时间条件过滤,获取上期、同期
本期、上期、同期用相同的取数表达式,对指标设置不同的时间进行过滤。假设主题表的数据期字段为XXB.BBQ,报表中时间参数为@bbq,报表期为月报的话,那么本期、上期、同期分别定义如下过滤条件:
本期条件XXB.BBQ=@bbq
上期条件XXB.BBQ=od(@bbq,’m-1’)
同期条件XXB.BBQ=od(@bbq,’y-1’)
方式三:数组表达式获取上期、同期
当浮动维表元为数据期的时候,可以用数组表达式获取上期值、同期值。假设本期值在BI上的取数表达式表元为B2,那么如何求同期、上期,表达式如下:
同期:B2$$.select(@.leftdimcell.value=od(self.leftdimcell.value,'y-1'))[0]
上期:B2$$.select(@.leftdimcell.value=od(self.leftdimcell.value,'m-1'))[0]

优缺点说明
       优点:通用性更强,适用于任何同环比场景;
       缺点:如果只需要求同环比,此时需要冗余上期和同期值;

应用场景三:求某个时间段数据的同环比
如果数据期类型为月报,数据库表中可能有2009年12月~2010年3月的数据,BI报表模板计算参数有时间起和时间止两个参数,时间起选择2009年12月,时间止选择2010年3月,那么想求2009年12月~2010年3月这四个月的上期 、去年同期、同比、环比,这个需求又该怎样实现呢?
求某个时间段数据的环比
分析过程:
假设报表有两个时间参数:时间起 @sj1 和 时间止@sj2(选择的是年月参数组件)
某个时间段的环比:假设@sj1=200912;@sj2=201003,此时时间段跨度是4个月。则以4个月的时间跨度往前推,上期应该求得2009年8月~2009年11月的数据;
实现关键点
ü 本期时间过滤条件设置:DXSL.BIMONTH>=@sj1 and DXSL.BIMONTH<=@sj2
ü 求两个计算参数的月份差额:listmonths(@sj1,@sj2).count
ü 上期时间过滤条件设置:DXSL.BIMONTH>=od(@sj1,"m-<#=listmonths(@sj1,@sj2).count#>") and DXSL.BIMONTH<=od(@sj2,"m-<#=listmonths(@sj1,@sj2).count#>")
ü 本期、上期用相同的取数表达式,利用场景二中的表内运算公式,就可以得到环比值;

求某个时间段数据的同比
分析过程:
某个时间段的同比:去年同期应该求得2008年12月~2009年3月的数据,得到去年同期数据,只需要通过OD函数,在过滤条件中设置就能得到去年此时间段数据;
实现关键点:
ü 同期过滤条件:DXSL.BIMONTH>=od(@sj1,"y-1") and DXSL.BIMONTH<=od(@sj2,"y-1")
优缺点说明
        优点:适用于需要展现一段时间内数据的变动情况;
        缺点:上期和同期的过滤条件设置复杂。

最近看过此主题的会员

esen_4UV3WQOHK1

西瓜小姐

灰龙

esen_4SBQYN0BZ5TZ

gelin

ssssssss

哈啊哈啊

7个回答

只看楼主

tangmq 数据达人Lv4

发表于2019-3-15 15:00

只看该作者

取消 关注该作者的回复

沙发

这是我见过最完整的同环比分析场景介绍,666

缱绻 数据领袖Lv6

发表于2019-3-15 18:57

只看该作者

取消 关注该作者的回复

板凳

666

韦韬然 数据老手Lv5

发表于2019-6-25 18:16

只看该作者

取消 关注该作者的回复

地板

厉害了,这都有总结。

1505121235 数据老手Lv5

发表于2019-12-18 15:04

只看该作者

取消 关注该作者的回复

5#

本帖最后由 1505121235 于 2019-12-18 15:07 编辑

补充1交叉浮动分别按年和月显示指标的同环比,效果图:


报表设计:
上期:B2$$.select(@.topdimcell.value=right(od(self.leftdimcell.value^self.topdimcell.value,'m-1'),2) & @.leftdimcell.value=left(od(self.leftdimcell.value^self.topdimcell.value,'m-1'),4))[0]
去年同期:B2$$.select(@.topdimcell.value=right(od(self.leftdimcell.value^self.topdimcell.value,'y-1'),2) & @.leftdimcell.value=left(od(self.leftdimcell.value^self.topdimcell.value,'y-1'),4))[0]




1505121235 数据老手Lv5

发表于2020-3-31 10:16

只看该作者

取消 关注该作者的回复

6#

本帖最后由 1505121235 于 2020-3-31 10:30 编辑

补充2.按照下钻级次求去年同期,上期tameid字段分别求年和月的下钻级次,按照地区进行浮动
去年同期表元表达式:D2$$.select(@.leftcell(3).value=od(self.leftcell(4).value,"y-1") & @.leftcell(2).value=self.leftcell(3).value & @.leftcell.value=self.leftcell(2).value)[0]
要点:select里面3个过滤:1、去年同期年份-1
2、本期和去年同期月份相同
3、本期地区和去年同期地区相同
上期表元表达式:D2$$.select(@.leftcell(3).value=self.leftcell(5).value & @.leftcell(2).value=right(od(self.leftcell(5).value+self.leftcell(4).value,'m-1'),2) & @.leftcell.value=self.leftcell(3).value)[0]




要点:同理去年同期,但是上期月份-1,od第一个参数必须是6位,使用年+月拼接








lhl1111111 数据小白Lv1

发表于2020-12-21 19:08

只看该作者

取消 关注该作者的回复

7#

不好使啊,完全行不通啊!!

lhl1111111 数据小白Lv1

发表于2020-12-21 19:51

只看该作者

取消 关注该作者的回复

8#

l 条件二:报表模板中,计算的当前期只能是一期数据,例如年报,计算2009年这一年的数据;例如月报,计算2009年11月这一个月的数据; 啥意思啊?

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

渠道咨询电话:137-0120-6790

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号