dc.js在多个值上添加过滤器

时间:2014-02-19 10:39:50

标签: d3.js crossfilter dc.js

我正在使用dc.js,

我想根据复选框选择添加过滤器。这是我的方案

enter image description here

当我选择基于我需要过滤器的复选框时。

这是我的代码

     var ndx = crossfilter(readData);

    var practiceDimension = ndx.dimension(function (d) {
            return d.practice_name;
        }); 

    $('#treeview input[name="practice_name[]"]:checked').each(function() {
            if(searchPracticeArray.indexOf($(this).val()) == -1)
                searchPracticeArray.push($(this).val());
                // If  I added searchPracticeArray as filter parameter then it's not working 
                // searchPracticeArray value are ['LPS','Mercy']

practiceDimension = practiceDimension.filter($(this).val());
                bubbleChart.filter($(this).val());       

        });

目前我有两个复选框,但它应该超过两个或更多。

2 个答案:

答案 0 :(得分:0)

您可以根据功能过滤维度。我建议你这样做。 API documentation

但是,请记住,此函数将在某个时刻在数据集中的每个记录上运行,因此您只需要执行一次DOM查询,然后将这些值保存到范围内的数组中。功能,然后对其进行过滤。

答案 1 :(得分:0)

您好我找到了一些像这样的解决方案

这里的searchPracticeArray是基于选择存储值的数组值。

if(searchPracticeArray.length > 0)
{
var practiceDimensionFilterData;
for(var d=0; d < searchPracticeArray.length; d++ )
{
    pract_name_search = searchPracticeArray[d].key;            
    practiceDimensionFilterData = readData.filter(function(d){ return(d.practice_name == pract_name_search)})            
    practiceDimension2[d] = practiceDimensionFilterData
    if(d > 0)
    {
    practiceDimension6 = practiceDimension2[0].concat(practiceDimension2[d])
    }
    else{
    practiceDimension6 = practiceDimension2[d];
    }
    bubbleChart.filter(pract_name_search);
}
ndx = crossfilter(practiceDimension6);  

}