何羅魚(yú)國(guó)際貨運(yùn)業(yè)務(wù)管理系統(tǒng)的大數(shù)據(jù)圖表里會(huì)按月展示收入、支出以及利潤(rùn)圖表供管理層決策參考,并有實(shí)時(shí)計(jì)算同比、環(huán)比增長(zhǎng)或下降比例,同比的算法比較好理解,但環(huán)比算法還真要琢磨一下。

同比 Year on Year
同比的計(jì)算公式:
同比率=(本期數(shù)-同期數(shù))÷|同期數(shù)|×100%
同比是以年為維度去做比較,比如今年的第 N 個(gè)月(本期數(shù))與去年的第 N 個(gè)月(同期數(shù))的比較。
例子:
比如說(shuō)某貨代公司去年3月的利潤(rùn)為100萬(wàn),本年3月的利潤(rùn)為150萬(wàn),同比增長(zhǎng)是怎么算?
同比增長(zhǎng)率=(150-100)÷|100|=50%
注意這個(gè)絕對(duì)值喲,這個(gè)很關(guān)鍵的,代碼里沒(méi)有加的話,當(dāng)利潤(rùn)為負(fù)數(shù)時(shí),結(jié)果就很有意思了。
環(huán)比 Month on Month
環(huán)比的計(jì)算公式:
環(huán)比率=(本期數(shù)-上期數(shù))÷|上期數(shù)|×100%
看環(huán)比的英文寫(xiě)法,大概就可以理解環(huán)比是以月為維度做比較的。
但我們?cè)陂_(kāi)發(fā)的時(shí)候卻遇到了問(wèn)題(也許我們想多了,但代碼總要寫(xiě)清楚):如何定義上期數(shù)?我們討論了兩種不同的方案:
先舉例子:
比如說(shuō)某貨代公司本年的利潤(rùn)如下:
月份 | 利潤(rùn) |
1月 | 100萬(wàn) |
2月 | 150萬(wàn) |
3月 | 80萬(wàn) |
4月 | 200萬(wàn) |
根據(jù)計(jì)算公式我們可以很方便地算出月度的環(huán)比:
2月環(huán)比(1月)增長(zhǎng)了:(150-100)÷|100|=50%
同理3月環(huán)比(2月)下降了46.67%;4月環(huán)比(3月)增長(zhǎng)了150.00%。
但在系統(tǒng)實(shí)際使用中,月份是可以多選的,當(dāng)選中的月份為3月和4月的時(shí)候,合計(jì)利潤(rùn)280萬(wàn),問(wèn)題就出現(xiàn)了,上期數(shù)是多少?(280-?)÷|?|=?%
方案一:
上期數(shù)=100+150=250萬(wàn),就是3月+4月的環(huán)比(1月+2月)增長(zhǎng)=(280-250)÷|250|=12%,這個(gè)方案理解起來(lái)相對(duì)簡(jiǎn)單,相鄰周期作比較,但總感覺(jué)這和 Month on Month 不太相符,另外還會(huì)有一個(gè)問(wèn)題,當(dāng)你選擇了本年1-12月的時(shí)候,得出的環(huán)比值就和同比值相同了,網(wǎng)上搜一下,其實(shí)很多網(wǎng)友也有這個(gè)疑惑:年度的同比與環(huán)比怎么算?
方案二:
上期數(shù)=150+80=230萬(wàn),就是3月+4月的環(huán)比(2月+3月)增長(zhǎng)=(280-230)÷|230|=21.74%,這個(gè)理解起來(lái)就有點(diǎn)繞了,但好像是可以解釋 Month on Month 這種叫法,就是以月度為基數(shù)去計(jì)算增長(zhǎng)。
declare @start_date date --開(kāi)始時(shí)間declare @end_date date --結(jié)束時(shí)間dateadd(month,-1, @Start_date) –環(huán)比開(kāi)始時(shí)間dateadd(month,-1,@End_date) –環(huán)比結(jié)束時(shí)間
選擇哪一種方案呢?