【问题标题】:Filtering crossfilter dimension using dropdown使用下拉菜单过滤交叉过滤器维度
【发布时间】: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


    【解决方案1】:

    我也没有完全理解你在做什么,因为 jsfddle 只显示 js。

    我知道我是怎么做的:

    • 您有一个与 dc 图表关联的维度(例如 chartDim)
    • 您有一个计算与 dc 图表相关的平均值的组(例如 averageGroup)
    • 您有一个下拉列表,其中包含一组用作过滤器的值 (#myDropDown)

      d3.select('#myDropDown') .on('改变', function(){ chartDim.filter(this.value) dc.redrawAll(); })

    dc.redrawAll() 的调用不仅会更新图表,还会更新 averageGroup,一切都会正常。如果 dropDown 有自己的维度,只需过滤这个而不是 chartDim

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 2016-01-11
      • 2018-09-06
      • 2015-04-02
      相关资源
      最近更新 更多