首页 文章

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

提问于
浏览
1

我有超过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 回答

  • 3

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

    例如 . 对于具有相同长度的数据 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函数从主交叉滤波器中获取"row" . 假设您在 B 中减少了工资总额:

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

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

相关问题