2017-08-08 262 views
1

,我有以下數據:累積和

Store year earnings 
A 2011 1000 
A 2012 2000 
A 2013 2000 
A 2014 3000 
B 2012 200 
B 2012 300 
B 2012 500 
B 2014 3000 
B 2015 4000 
C 2013 2000 
C 2013 200 
C 2015 1200 
C 2016 4000 

我想要做的就是使用dc.js讓每家商店和每年和顯示累積和它在一個系列圖表中。

每年每店累計總和將

Store year earnings 
    A 2011 1000 
    A 2012 3000 
    A 2013 5000 
    A 2014 8000 
    B 2012 1000 
    B 2014 4000 
    B 2015 8000 
    C 2013 2200 
    C 2015 3400 
    C 2016 7400 

找遍四周,發現這可以爲簡單的尺寸來完成,組,像這樣:

function createCumulativeGroup(source_group) { 
     return { 
      all:function() { 
       var cumulate = 0; 
       return source_group.all().map(function(d) { 
        cumulate += d.value; 

        return {key:d.key, value:cumulate}; 
       }); 
      } 
     }; 
    } 

但爲了要使用系列圖表,我需要減少年份和商店,將兩者都放入複合關鍵字中。當我嘗試在一系列圖表上使用上述功能時,所有商店都會發生累積,導致比預期更大的值。

我怎樣才能做一個累積和與系列圖一起工作?

+0

請檢查下面的jsfiddle: https://jsfiddle.net/thyfoubq/10/ – Thanos

+0

「它不工作」從來都不是問題的一個很好的說明。 :)我已經編輯了這一點,以澄清它是關於擴展累積和以使用系列圖表。請確認這是你的意思。 – Gordon

+0

嗨,戈登,你是對的,正確的是它不適用於系列圖表。謝謝! – Thanos

回答

2

您的createCumulativeGroup函數只是累積所有商店的價值。你需要通過商店來累積價值。這應該工作:

function createCumulativeGroup(source_group) { 
     return { 
      all:function() { 
       var cumulate = {}; 
       return source_group.all().map(function(d) { 
        if(cumulate[d.key[0]]) { 
        cumulate[d.key[0]] += d.value; 
        } else { 
        cumulate[d.key[0]] = d.value; 
        } 
        return {key:d.key, value:cumulate[d.key[0]]}; 
       }); 
      } 
     }; 
    } 

https://jsfiddle.net/rn3ja9n4/

+0

它完美的作品!非常感謝你 – Thanos