2015-08-21 47 views
1

我一直在尝试了解crossfilter过滤,并且终于能够在我的代码中正确使用它,但我似乎无法理解CrossFilter为什么会这样做。使用CrossFilter过滤障碍

所以这里就是我从这里Crossfilter filters not filtering (dc.js)得到:

正如杰弗里Biles说,在它“因此,原来crossfilter没有过滤器适用于你把过滤器上的维它适用于一切。 “。

好吧,我不明白为什么会这样做,但好吧,过滤器适用于其他任何事情,明白了。

但后来我发现这个Custom Text filter for DC.js dataTable

而在这里,rbristow使用文本过滤箱过滤他的代码。但他的companyDimension维度过滤器。这似乎也是过滤的维度。

所以...我有两个问题:

  1. 那为什么CrossFilter做它,因此过滤器将除非你把它在一个适用于所有尺寸是多少?
  2. 为什么rbristow的代码在这种情况下工作?

感谢提前一吨!

回答

3

在Crossfilter中,您可以查询尺寸(例如dimension.top(10))或组(例如group.all()group.top(10))。维度上的查询返回维度顺序中的原始数据记录,并且他们尊重Crossfilter including the filter on that dimension上的所有过滤器(如果有的话)。对群组的查询会返回您的群组聚合和尊重过滤器到Crossfilter except the filter on the dimension the group is defined on

此设计的原因是您将使用组查询的结果来构建交互式图表(即用户将过滤的图表),因为我们想绘制聚合值。当用户在图表上过滤时,您确实不希望该图表发生变化。数据应该保留给用户。所有其他图表(基于其他维度上定义的组)应该改变。所以这就是组织忽略自身维度的过滤器的原因。

您引用的dataTable示例的工作原理如下:dc.js通常使用传递的组来构建其图表,该方法使用group.topgroup.all方法获取数据,忽略该组的维度上的过滤器。传递给图表的维度通常仅用于应用该图表中的过滤器。它通常(虽然不一定是)在同一个图表中定义的维度。 dc.js数据表是不同的。它使用维度来获取它所需的数据。正因如此,如上所述,dataTable将向您显示尊重Crossfilter上所有过滤器的数据,包括dataTable中使用的维上的所有过滤器。

+0

非常感谢Ethan,真的帮助我清除它! – archeezee