【发布时间】:2014-05-15 10:55:59
【问题描述】:
我正在尝试通过在下拉列表中选择值来过滤我的行图。 我通过创建一个维度并根据下拉列表中的选定值对该维度应用过滤器来做到这一点。
行图必须显示平均值,为此我创建了 ReduceAdd/Remove/Initial 函数。 平均值按预期工作。
但是,当我过滤用于下拉菜单的维度时,它似乎在我的行图中添加了重复值。
示例代码:http://jsfiddle.net/sy9xA/4/
var dropDownFilterDimension;
function ReduceAdd(p, v) {
var value = v.value;
++p.countAvg;
p.totalAvg += value;
return p;
}
function ReduceRemove(p, v) {
var value = v.value
--p.countAvg;
p.totalAvg -= value;
return p;
}
function ReduceInitial() {
return {countAvg: 0, totalAvg: 0};
}
function filterDropdown(dropDownID){
dropDown = document.getElementById(dropDownID);
dropDownFilterDimension.filterAll();
values = $(dropDown).val();
if( values != null ){
dropDownFilterDimension.filter(function(d) { if (values.indexOf(d) > -1) {return d;} });
}
dc.redrawAll();
}
例如,选择“香蕉”以进行过滤时。对所有未选择的值调用 ReduceRemove,但另外对香蕉调用 ReduceAdd(即使它已经在其中)。 所以现在选择香蕉后,选择苹果。香蕉还是有一些价值的。
有人可以解释为什么会这样吗?或者我怎样才能避免这种情况发生?
提前致谢! 罗伯特
【问题讨论】:
标签: dc.js crossfilter