使用dc.js

时间:2017-08-08 09:49:52

标签: dc.js crossfilter

我有以下数据:

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

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

如何使用与系列图表一起使用的累积总和?

1 个答案:

答案 0 :(得分: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/