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

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