我构建的crossfilter-setup与我能找到的大多数例子有点不同,即:
我的数据阵列d包含多个数据源,其中包括data1。
var cf = crossfilter(d3.range(0, d.data1.length));
然后我构建我的dims:
var dim = cf.dimension(function(i) { return d.data1[i].id; });
我构建了我的小组:
var group = dim.group().reduceSum(function(i) { return d.data1[i].total;});
这一切都运行正常,但是当我想创建自定义reduce函数时,额外的参数i给了我麻烦。
var reduceAddPerc = function(p,v) {
p.sumOfSub += d.data1[i].var1;
p.sumOfTotal += d.data1[i].total;
p.finalVal = p.sumOfSub / p.sumOfTotal;
return p;
};
var reduceRemovePerc = function(p,v) {
p.sumOfSub -= d.data1[i].var1;
p.sumOfTotal -= d.data1[i].total;
p.finalVal = p.sumOfSub / p.sumOfTotal;
return p;
};
var reduceInitialPerc = function() {
return {sumOfSub:0, sumOfTotal:0, finalVal:0 };
};
然后用:
定义组var group = dim.group().reduce(reduceAddPerc,reduceRemovePerc,reduceInitialPerc);
这显然不起作用,因为函数中现在不知道参数i。但我尝试添加参数(p,v,i),或者通过在(p,v)函数周围创建带参数i的附加函数来嵌套函数,并在(p)中创建附加函数(i) ,v)功能,但我不能让它工作。
有人提供任何帮助吗?
答案 0 :(得分:0)
在自定义缩减功能中,101
参数是当前正在减少的记录"。在这种情况下,它应该是您的计数器,所以只需在通常使用=IF(COUNTIF($A$1:$A2,A2)=1,((INT(MAX($B$1:$B1)/100)+1)*100)+1,MAX(INDEX(($A$1:$A1=A2)*$B$1:$B1,))+1)
的地方使用它。这不起作用吗?