过滤的CrossFilter尺寸与通过过滤属性定义维度



库克的CrossFilter教程似乎以两种不同的方式完成了结果;

首先通过一般属性定义维度,然后我们应用过滤器。

var delayDimension = cf.dimension(function(d) {return d.delay;});
delayDimension.filter(function(d) {return d > 0}); 

通过定义属性d.delay > 0

来直接获得所得维度
var isDelayedDimension = cf.dimension(function(d) {return d.delay > 0;});

我想知道两种方法在性能方面有什么区别。

通过特定属性直接定义维度和以更通用的方式定义维度之间的性能是否存在差异,然后我们应用了特定的过滤器?

这些示例具有两个不同的目的。

第一个示例中的维度使您可以按延迟量进行分组和过滤。

然后,过滤器命令更新尺寸的过滤器,以便在整个CrossFilter实例中,仅在返回行或聚合时使用具有一定延迟的飞行。滤波器命令是必须的:它不会创建一个新的维度,该维度被过滤或返回过滤后的行,只需更改该维度的滤波器属性并返回相同的维度。

第二个示例允许您按布尔值进行分组和过滤"是否延迟"。它尚未执行任何过滤。为了将等效效果作为第一个示例中的过滤器命令,您将做

isDelayedDimension.filter(true);

再次返回相同的维度,而不是新维度。它迫切地过滤了整个CrossFilter实例的数据,因此基于它们的其他维度和组将不再看到任何未延迟的航班。

如果这是您要做的一切,请过滤航班是否延迟,那么我认为第二种方法应该稍快地稍快,但这可能不是一个明显的差异。它不会改变算法的复杂性,但是如果有布尔值而不是整数值,则可以使排序更加容易。

由于某种原因您想显示汇总或排序的飞行延迟信息,并且还要根据是否延迟航班过滤,这将是使用第一个形式的原因之一:它可以做这两个事情,您可以避免创建第二维。尺寸是最昂贵的CrossFilter对象。

但是,一个组没有观察自己的尺寸的过滤器,因此,如果您希望在"延迟"过滤时要更改汇总的延迟信息,则仍然需要使用两个维度。

最新更新