gpt4 book ai didi

d3.js - 将过滤器从一个 Crossfilter 数据集应用到另一个 Crossfilter

转载 作者:行者123 更新时间:2023-12-04 23:50:15 27 4
gpt4 key购买 nike

我有两个数据集,它们具有相似的列/维度,但按行分组并包含不同的度量。

前任:

数据集 1

Year   Category   SubCategory    Value01    Value02
2000 Cars Sport 10 11
2000 Cars Family 15 16
2000 Boats Sport 20 21
2000 Boats Family 25 26
...

数据集 2
Year   Category    ValueA     ValueB
2000 Cars 100 101
2000 Boats 200 201
...

数据集 1 有自己的交叉过滤器对象,数据集 2 有一个单独的交叉过滤器对象。我有多个 dc.js 图表,一些与数据集 1 相关,一些与数据集 2 相关。

当 dc.js 图表在数据集 2 中也存在的列/维度上过滤数据集 1 时,我想将相同的过滤器应用于数据集 2。如何实现?

最佳答案

我认为在 crossfilter 或 dc.js 中没有任何自动方法可以做到这一点。但是,如果您愿意滚动自己的维度包装器,则可以提供它而不是原始维度对象,并将其转发到所有底层维度。

编辑:基于@Aravind's fiddle 下面,这是一个有效的“维度镜像”,至少对于这个简单的例子:

function mirror_dimension() {
var dims = Array.prototype.slice.call(arguments, 0);
function mirror(fname) {
return function(v) {
dims.forEach(function(dim) {
dim[fname](v);
});
};
}
return {
filter: mirror('filter'),
filterExact: mirror('filterExact'),
filterRange: mirror('filterRange'),
filterFunction: mirror('filterFunction')
};
}

使用这个有点乱。对于要从​​交叉过滤器 A 镜像到交叉过滤器 B 的每个维度,您需要在交叉过滤器 B 上创建一个镜像维度,反之亦然:
// Creating the dimensions
subject_DA = CFA.dimension(function(d){ return d.Subject; });
name_DA = CFA.dimension(function(d){ return d.Name; });
// mirror dimensions to receive events from crossfilter B
mirror_subject_DA = CFA.dimension(function(d){ return d.Subject; });
mirror_name_DA = CFA.dimension(function(d){ return d.Name; });

subject_DB = CFB.dimension(function(d){ return d.Subject; });
name_DB = CFB.dimension(function(d){ return d.Name; });
// mirror dimensions to receive events from crossfilter A
mirror_subject_DB = CFB.dimension(function(d){ return d.Subject; });
mirror_name_DB = CFB.dimension(function(d){ return d.Name; });

现在,在将它们传递到图表时将它们绑在一起:
// subject Chart
subjectAChart
.dimension(mirror_dimension(subject_DA, mirror_subject_DB))
// ...

// subject Chart
subjectBChart
.dimension(mirror_dimension(subject_DB, mirror_subject_DA))
// ...

nameAChart
.dimension(mirror_dimension(name_DA, mirror_name_DB))
// ...

nameBChart
.dimension(mirror_dimension(name_DB, mirror_name_DA))
// ...

由于所有图表都是 implicitly on the same chart group ,重绘事件将在它们被过滤时自动在它们之间传播。一个交叉过滤器上的每个过滤器操作都将应用于另一个交叉过滤器上的镜像维度。

也许不是我建议做的事情,但像往常一样,它可以工作。

这是 fiddle : https://jsfiddle.net/gordonwoodhull/7dwn4y87/8/

关于d3.js - 将过滤器从一个 Crossfilter 数据集应用到另一个 Crossfilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24225364/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com