我遇到的情况是我尝试使用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)
好像第二次计算会覆盖第一次计算。
编辑:更新了代码。简化以显示不稳定的行为。