在dc.js中使用多个数据集

时间:2015-03-17 10:00:17

标签: dc.js

我有超过5个带有一个共同维度(主键)的规范化表。

我不想将它们组合成单个数据集和绘图。

我创建了单独的crossfilter对象来加载数据。

当所有属于受尊重的crossfilter对象的图表被过滤时,

我使用(主键)以下列方式检索过滤器

rowchart.on("filtered",function(){
var filter=dimension.group().all().filter(function(d){return d.value>0}).map(function(d){return d.key});
}

然后在所有其他crossfilter对象的公共维度上传递此过滤器。

此实现适用于任何两个对象。

但当属于其他crossfilter对象的任何其他图表被过滤时,它会重置所有对象的所有维度。

有没有更好的方法来实现这个用例?

1 个答案:

答案 0 :(得分:3)

如果您能够通过主键查找行,则执行此操作的一种方法是告诉crossfilter您的数据只是一组键,然后定义维度和组函数以实际执行表格查找。

E.g。对于数据的数组AB,长度相同,主键是索引的简单示例,请执行

var ndx = crossfilter(d3.range(0, A.length));
var dateDim = ndx.dimension(function(i) { return A[i].date; });
var nameDim = ndx.dimension(function(i) { return B[i].name; });

类似地,对于组缩减,以相同的方式引用数据,因为reduce函数从主交叉滤波器中取“行”。假设您正在减少B中的工资总额:

var salaryGroup = nameDim.reduceSum(function(i) { return B[i].salary; });

我这样做的情况是我的数据是专栏而不是行专业(R数据帧),而且效果很好。