何罗鱼国际货运业务管理系统的大数据图表里会按月展示收入、支出以及利润图表供管理层决策参考,并有实时计算同比、环比增长或下降比例,同比的算法比较好理解,但环比算法还真要琢磨一下。 同比YearonYear 同比的计算公式: 同比率(本期数同期数)同期数100 同比是以年为维度去做比较,比如今年的第N个月(本期数)与去年的第N个月(同期数)的比较。 例子: 比如说某货代公司去年3月的利润为100万,本年3月的利润为150万,同比增长是怎么算? 同比增长率(150100)10050 注意这个绝对值哟,这个很关键的,代码里没有加的话,当利润为负数时,结果就很有意思了。 环比MonthonMonth 环比的计算公式: 环比率(本期数上期数)上期数100 看环比的英文写法,大概就可以理解环比是以月为维度做比较的。 但我们在开发的时候却遇到了问题(也许我们想多了,但代码总要写清楚):如何定义上期数?我们讨论了两种不同的方案: 先举例子: 比如说某货代公司本年的利润如下: 月份 利润 1月 100万 2月 150万 3月 80万 4月 200万 根据计算公式我们可以很方便地算出月度的环比: 2月环比(1月)增长了:(150100)10050 同理3月环比(2月)下降了46。67;4月环比(3月)增长了150。00。 但在系统实际使用中,月份是可以多选的,当选中的月份为3月和4月的时候,合计利润280万,问题就出现了,上期数是多少?(280?)?? 方案一: 上期数100150250万,就是3月4月的环比(1月2月)增长(280250)25012,这个方案理解起来相对简单,相邻周期作比较,但总感觉这和MonthonMonth不太相符,另外还会有一个问题,当你选择了本年112月的时候,得出的环比值就和同比值相同了,网上搜一下,其实很多网友也有这个疑惑:年度的同比与环比怎么算? 方案二: 上期数15080230万,就是3月4月的环比(2月3月)增长(280230)23021。74,这个理解起来就有点绕了,但好像是可以解释MonthonMonth这种叫法,就是以月度为基数去计算增长。 declarestartdatedate开始时间declareenddatedate结束时间dateadd(month,1,Startdate)环比开始时间dateadd(month,1,Enddate)环比结束时间 选择哪一种方案呢?