感到困惑的是CrossFilter过滤

时间:2015-08-21 16:18:39

标签: javascript crossfilter

我一直在尝试理解跨滤波器过滤,我终于能够在我的代码中正确使用它,但我似乎无法理解为什么CrossFilter会做它的功能。

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

正如Jeffrey Biles在其中所说的那样“事实证明,crossfilter不会将过滤器应用于您放置滤镜的尺寸。它将其应用于其他所有内容。”

好吧,我不明白为什么会这样做但是好的,过滤器适用于其他一切,得到它。

但后来我找到了Custom Text filter for DC.js dataTable

在这里,rbristow使用文本过滤器框来过滤他的代码。但是过滤了他的selendroid-client jar file维度。这似乎也是过滤的维度。

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

  1. 为什么CrossFilter会这样做,以便将过滤器应用于除您调用它之外的所有维度?
  2. 为什么rbristow的代码会起作用?
  3. 提前感谢!

1 个答案:

答案 0 :(得分:4)

在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是不同的。它使用维度来获取所需的数据。因此,如上所述,dataTable将显示尊重Crossfilter上所有过滤器的数据,包括dataTable中使用的维度上的任何过滤器。