如何将过滤器应用于crossfilter中的组

时间:2017-05-15 15:51:50

标签: javascript aggregate crossfilter

我遇到的情况是我尝试使用crossfilter对过滤器进行一些聚合。我的问题是我似乎无法按照我想要的方式使用过滤器。

我拥有的数据基本上是来源 - >目标边缘数据,其中有一些自循环。我想要做的是计算两种情况下的值的总和1.所有自循环,即source_level2_cohort === target_level2_cohort和2.所有其他循环,即source_level2_cohort!= target_level2_cohort。我将使用聚合数据集在使用d3时构建自定义viz。

我正在使用crossfilter维度在数据集上设置过滤器,如果源... === target ...则返回true,它似乎不起作用。

这是我尝试做的事情(见下文)。我不明白为什么最后3个console.log()语句在我更改它们之间的过滤器时都会产生相同的输出。有谁知道为什么我似乎无法以这种方式使用过滤器?

function aggregateChanges(data){
  cf = crossfilter(data);

  var cnt = cf.dimension(function(d){ return d.cid_cnt;});
  var cntGrp = cnt.group();
  var revenue = cf.dimension(function(d){ return d.revenue_sum;});
  var revenueGrp = revenue.group();
  var srcL2 = cf.dimension(function(d){ return d.source_level2_cohort;});
  var srcL2Grp = srcL2.group();
  var tgtL2 = cf.dimension(function(d){ return d.target_level2_cohort;});
  var tgtL2Grp = tgtL2.group();
  var isSelf = cf.dimension(function(d){ return d.source_level2_cohort === d.target_level2_cohort;});
  var isSelfGrp = isSelf.group();

  // example 1
  // isSelf.filter(true);
  // var selfRevenue = srcL2Grp.reduceSum(function(d){ return d.revenue_sum}).all();
  // console.log("self revenue: ");
  // console.log(selfRevenue);

  // example 2
  isSelf.filter(false);
  var otherRevenue = srcL2Grp.reduceSum(function(d){ return d.revenue_sum}).all();
  console.log("other revenue: ");
  console.log(otherRevenue);
}

这是一个工作小提琴:https://jsfiddle.net/Sledge/pnkryhud/5/

更新

这是一个更好的描述。如果我取消注释example2,这是输出:

[Object, Object, Object]
0
:
Object
key
:
"cohort6"
value
:
24
__proto__
:
Object
1
:
Object
key
:
"cohort7"
value
:
24
__proto__
:
Object
2
:
Object
key
:
"cohort8"
value
:
24
__proto__
:
Object
length
:
3
__proto__
:
Array(0)

如果我取消注释示例1,这是输出:

[Object, Object, Object]
Object
key
:
"cohort6"
value
:
10000
__proto__
:
Object
1
:
Object
key
:
"cohort7"
value
:
10000
__proto__
:
Object
2
:
Object
key
:
"cohort8"
value
:
10000
__proto__
:
Object
length
:
3
__proto__
:
Array(0)

但是,如果我取消两者,这就是我得到的:

:
Object
key
:
"cohort6"
value
:
24
__proto__
:
Object
1
:
Object
key
:
"cohort7"
value
:
24
__proto__
:
Object
2
:
Object
key
:
"cohort8"
value
:
24
__proto__
:
Object
length
:
3
__proto__
:
Array(0)


Object
key
:
"cohort6"
value
:
24
__proto__
:
Object
1
:
Object
key
:
"cohort7"
value
:
24
__proto__
:
Object
2
:
Object
key
:
"cohort8"
value
:
24
__proto__
:
Object
length
:
3
__proto__
:
Array(0)

好像第二次计算会覆盖第一次计算。

编辑:更新了代码。简化以显示不稳定的行为。

0 个答案:

没有答案