【问题标题】:Baffled with CrossFilter filtering对 CrossFilter 过滤感到困惑
【发布时间】:2015-11-15 16:16:49
【问题描述】:

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

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

正如 Jeffrey Biles 在其中所说,“所以结果表明 crossfilter 不会将过滤器应用于您放置过滤器的维度。它会将其应用于其他所有内容。”

好的,我不明白为什么会这样,但是好的,过滤器适用于其他所有内容,明白了。

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

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

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

  1. 为什么 CrossFilter 会这样做,以便将过滤器应用于除您调用它的维度之外的所有维度?
  2. 如果是这种情况,为什么 rbristow 的代码可以工作?

提前致谢!

【问题讨论】:

    标签: javascript crossfilter


    【解决方案1】:

    在 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 中使用的维度上的任何过滤器。

    【讨论】:

    • 非常感谢 Ethan 帮我解决了这个问题!
    猜你喜欢
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 2012-07-22
    • 2013-05-13
    • 2020-04-16
    • 2023-03-08
    • 2019-08-04
    相关资源
    最近更新 更多