DC.js,crossfilter - 在groupAll()上运行reduce()

时间:2017-04-25 11:26:13

标签: javascript dc.js crossfilter

这感觉应该很容易:/

crossfilter API说我可以在groupAll上运行reduce: https://github.com/square/crossfilter/wiki/API-Reference#groupAll_reduce

但我无法让它发挥作用。我已经尝试过fact.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 个答案:

答案 0 :(得分:1)

您的基本问题可能是您需要调用groupAll.value()才能执行组聚合,而常规组在定义或数据加载时计算聚合,而不是在使用{{1 }或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()) 。这是一个有效的JSFiddle,您可以尝试一下(使用一些可能有助于查看正在发生的事情的控制台语句):https://jsfiddle.net/esjewett/39xgn5ah/1/