dc.js - 使用下拉列表过滤交叉过滤器维度

标签 dc.js crossfilter

我正在尝试通过在下拉列表中选择值来过滤我的行图。
为此,我创建了一个维度并根据下拉列表中的选定值对该维度应用过滤器。

行图必须显示平均值,为此我创建了 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();
 }

Here for example, when "banana"is selected for filtering. ReduceRemove 为所有未选择的值调用,但此外,ReduceAdd 为香蕉调用(即使它已经在其中)。
所以现在在选择香蕉后,选择了苹果。香蕉还是有一定的值(value)的。

有人可以解释为什么会这样吗?或者我怎样才能避免这种情况发生?

提前致谢!
罗伯特

最佳答案

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

我可以告诉我我是怎么做的:

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

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

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

    关于dc.js - 使用下拉列表过滤交叉过滤器维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23676236/

    相关文章:

    dc.js - 如何选择 dc.js 条形图中的 bin 数量?

    javascript - 在 crossfilter.dimension 中检索值

    javascript - dc.js:具有多个 CSV 的 ReduceSum

    javascript - 带序号 x 轴刻度的 dc.js 条形图无法正确呈现

    javascript - 复杂数据如何使用散点图?

    javascript - DC.js - 空白数据点和直方图

    d3.js - DC.js 中的日期过滤器

    crossfilter - 有没有办法附加回调,每当交叉过滤器维度过滤器发生变化时会触发什么?

    javascript - dc.js 获取折线图分组后的值

    javascript - 显示应用于一处多个图表的过滤器