dc.js 系列图表中的累积总和

Cumulative sum in series chart with dc.js

我有以下数据:

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};
                });
            }
        };
    }

但是为了使用系列图表,我需要减少年份和商店,将两者放入复合键中。当我尝试将上述函数与系列图表一起使用时,累积发生在所有商店,导致比预期大得多的值。

如何计算适用于系列图表的累计总和?

您的 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/