2017-04-25 43 views
1

这种感觉应该很容易:/DC.js,crossfilter - 减少运行()上groupAll()

的crossfilter API说,我可以运行在一个groupAll减少: https://github.com/square/crossfilter/wiki/API-Reference#groupAll_reduce

但我不能让它工作。我试过facts.groupAll()其中var facts = crossfilter(data);我试过all.reduce()var all = facts.groupAll()。我尝试过使用和不使用括号,并以Google搜索为例。有谁知道一个工作的例子?我希望所有行都有单个输出。

我意识到我的减少功能不完整,看起来很复杂。它可以很好地减少维度,但给groupAll事实上未定义。

感谢

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

回答

1

这里你基本的问题可能是,你需要调用groupAll.value()以执行组聚合,而常规组在定义或数据载荷的时间计算聚合,而不是当你查询他们与group.topgroup.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/