2017-08-08 225 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