Crossfilter / dc.js 中的假组过滤

Fake group filtering in Crossfilter / dc.js

我正在尝试了解 dc.js 常见问题解答 How do I filter the data before it's charted?

中描述的 "fake group" 过滤方法

请在此处查看我的示例:dc.js jsfiddle

我想在绘制图表之前按类型过滤我的数据(要过滤的类型将来自我的应用程序的另一部分)。基本上它应该与单击行图表中的四个条形之一 (A、B、C、D) 具有相同的效果,但我希望能够从我的代码中的其他地方控制它,并且它应该发生在绘制图表。

我想我需要在名为 "type" 的组中使用 Filter out bins by predicate function on the values 方法,例如

function filter_bins(source_group, f) {
return {
    all:function () {
        return source_group.all().filter(function(d) {
            return f(d.value);
        });
    }
};

}

但我不清楚我应该将什么函数作为 f 传递,或者谓词函数是什么。

如有任何帮助,我将不胜感激!谢谢。

如果您希望它真正表现得好像在 typeRowChart 中单击了类型(这可能是您想要的),那么在您想要的任何地方执行此操作:

typeRowChart.filter("A");

如果您出于某种原因希望 typeRowChart 保持原样(未过滤),但又想对 typeDim 进行过滤,则直接对维度进行过滤并调用 dc.redrawAll():

typeDim.filter("A");
dc.redrawAll();

如果您希望 typeRowChart 也被新选择过滤,则创建一个新的类型维度并对其进行过滤:

var typeDim2 = cf.dimension(function (d) {return d.TYPE;});
typeDim2.filter("A");
dc.redrawAll();

幸运的是,我认为在这种情况下不需要假组模式。 :-)