dc.js - 从多列创建行图并启用过滤

时间:2015-12-15 20:42:03

标签: dc.js crossfilter

这与dc.js - how to create a row chart from multiple columns类似,但我想更进一步,并在点击行时启用过滤。

回答问题"它应该过滤什么?" - 仅显示值为>的记录例如,当Row' a'单击它将仅显示具有>值的记录。因此,Type饼图将更改为foo:1,bar:2

我想我必须覆盖onClick方法?但我不确定如何。

chart.onClick = function(d) {}

来自上述问题答案的jsfiddle - http://jsfiddle.net/gordonwoodhull/37uET/6/

有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

好的,这是一个解决方案,如果记录的值为> 0表示任何所选行,包括该记录。正如@Ethan所说,这是定义过滤器处理程序的问题:

sidewaysRow.filterHandler(function(dim, filters) {
    if(filters && filters.length)
        dim.filterFunction(function(r) {
            return filters.some(function(c) {
                return r[c] > 0;
            });
        })
    else dim.filterAll();
    return filters;
});

此外,由于filterFunction只能访问密钥,因此我们将整个记录作为密钥传递。在现实世界中,这并没有多大意义。但由于我们已经横向使用横向滤波器,因此可能没问题:

var dim = ndx.dimension(function(r) { return r; });

小提琴的新版本:http://jsfiddle.net/gordonwoodhull/37uET/18/

BTW听起来你想一次只选择一行。以下是如何做到这一点:

sidewaysRow.addFilterHandler(function(filters, filter) {
  filters.length = 0;
  filters[0] = filter;
  return filters;
})

(这在开发分支的dc 2.1中会更简单,其中图表使用过滤处理程序的结果,而不是要求您修改过滤器;正文变为return [filter];