DC.js,crossfilter - 运行 reduce() on groupAll()
DC.js, crossfilter - running reduce() on groupAll()
这感觉应该很简单:/
交叉过滤器 API 说我可以 运行 减少 groupAll:
https://github.com/square/crossfilter/wiki/API-Reference#groupAll_reduce
但我无法让它工作。我试过 facts.groupAll() where var facts = crossfilter(data);我试过 all.reduce() where var all = facts.groupAll()。我试过带括号和不带括号,并在谷歌上搜索了示例。有谁知道一个工作示例?我希望所有行都有一个输出。
我发现我的 reduce 函数不完整而且看起来很复杂。它可以很好地减少维度,但在事实中为 groupAll 提供了 undefined。
谢谢
var accumGrp = facts.groupAll().reduce(
function(p,v) {
for (var i=0; i<supplierFields[0].length; i++) {
if (!p.population[supplierFields[0][i]]) { p.population[supplierFields[0][i]] = []; }
p.population[supplierFields[0][i]].push(v[supplierFields[0][i]+'_l']);
}
return p;
},
function(p,v) { return p; },
function() {
var obj = {};
obj.population = {};
obj.highlight = {};
return obj;
}
);
print_filter('accumGrp');
您的基本问题可能是您需要调用 groupAll.value()
才能执行组聚合,而常规组在定义或数据加载时计算聚合,而不是在您使用 group.top
或 group.all
。
看起来你的基本方法在其他方面是正确的,我看不出 print_filter
做了什么,所以这只是一个猜测,但请尝试在你的脚本末尾调用 console.log(accumGrp.value())
和看看能不能用。
如果没有,这里有一个简短的工作示例供参考:
var data = [1,2,3,4]
var cf = crossfilter(data)
var grp = cf.groupAll().reduce(
function(p, d) { return p + d },
function(p, d) { return p - d },
function() { return 0 }
)
console.log(grp.value())
这会打印 10
。这是一个有效的 JSFiddle,您可以在其中进行尝试(还有一些控制台语句可能有助于了解正在发生的事情):https://jsfiddle.net/esjewett/39xgn5ah/1/
这感觉应该很简单:/
交叉过滤器 API 说我可以 运行 减少 groupAll: https://github.com/square/crossfilter/wiki/API-Reference#groupAll_reduce
但我无法让它工作。我试过 facts.groupAll() where var facts = crossfilter(data);我试过 all.reduce() where var all = facts.groupAll()。我试过带括号和不带括号,并在谷歌上搜索了示例。有谁知道一个工作示例?我希望所有行都有一个输出。
我发现我的 reduce 函数不完整而且看起来很复杂。它可以很好地减少维度,但在事实中为 groupAll 提供了 undefined。
谢谢
var accumGrp = facts.groupAll().reduce(
function(p,v) {
for (var i=0; i<supplierFields[0].length; i++) {
if (!p.population[supplierFields[0][i]]) { p.population[supplierFields[0][i]] = []; }
p.population[supplierFields[0][i]].push(v[supplierFields[0][i]+'_l']);
}
return p;
},
function(p,v) { return p; },
function() {
var obj = {};
obj.population = {};
obj.highlight = {};
return obj;
}
);
print_filter('accumGrp');
您的基本问题可能是您需要调用 groupAll.value()
才能执行组聚合,而常规组在定义或数据加载时计算聚合,而不是在您使用 group.top
或 group.all
。
看起来你的基本方法在其他方面是正确的,我看不出 print_filter
做了什么,所以这只是一个猜测,但请尝试在你的脚本末尾调用 console.log(accumGrp.value())
和看看能不能用。
如果没有,这里有一个简短的工作示例供参考:
var data = [1,2,3,4]
var cf = crossfilter(data)
var grp = cf.groupAll().reduce(
function(p, d) { return p + d },
function(p, d) { return p - d },
function() { return 0 }
)
console.log(grp.value())
这会打印 10
。这是一个有效的 JSFiddle,您可以在其中进行尝试(还有一些控制台语句可能有助于了解正在发生的事情):https://jsfiddle.net/esjewett/39xgn5ah/1/