【问题标题】:Crossfilter group a filtered dimension交叉过滤器对过滤后的维度进行分组
【发布时间】:2016-01-11 03:59:31
【问题描述】:

创建新维度后(按日期,javascript 的日期对象)。

var byDate = cf.dimension(function (d) { return d.date; });

我过滤维度以删除日期早于我选择的任意日期的所有数据。

var filteredDim = byDate.filterFunction(function (d) { return d >= startDate; });

这一行打印了一个包含所有通过过滤的对象的数组。 (正常工作)

console.log(filteredDim.top(Infinity));

这一行打印一个键值对象数组。 我希望键仅是那些通过过滤器的键,这意味着在提供给过滤器函数的任意选择的日期之后出现的日期。 实际上,该数组包含所有日期的键(也包括未过滤的),它们的值是原始值,就好像根本没有过滤一样。

console.log(filteredDim.group(d3.time.day).top(Infinity));

我想知道如何对已过滤的维度进行分组并仅对过滤后的值进行分组?

谢谢

更新: 事实证明,这种行为在设计上是正常的。 有人可以提出解决方法吗?

【问题讨论】:

    标签: javascript d3.js crossfilter


    【解决方案1】:

    我知道这篇文章已经过时了,但我的解决方案可能会对某人有所帮助。

    正如伊森所说:

    组尊重所有过滤器,但它们所在维度的过滤器除外 已定义。

    作为一种解决方法,您可以简单地从要分组的维度创建一个临时交叉过滤器。

    上面的例子是这样的:

    tempCrossfilter = crossFilter(filteredDim.top(Infinity))
    
    tempDimension = tempCrossfilter.dimension(function (d) { return d.date; });
    
    filteredGroup = tempDimension.group(d3.time.day).top(Infinity)
    

    【讨论】:

      【解决方案2】:

      交叉过滤器组尊重所有过滤器除了定义它们的维度的过滤器。在不同的维度上定义您的组,它将按照您的预期进行过滤。

      https://github.com/crossfilter/crossfilter/wiki/API-Reference#dimension_group

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多