DC.js - Crossfilter 简介
Crossfilter 是一个多维数据集。它支持与包含一百万或更多记录的数据集进行极快的交互。
基本概念
Crossfilter 在 crossfilter 命名空间下定义。它使用语义版本控制。考虑一个加载了水果集合的 crossfilter 对象,该集合定义如下 −
var fruits = crossfilter ([ { name: "Apple", type: "fruit", count: 20 }, { name: "Orange", type: "fruit", count: 10 }, { name: "Grapes", type: "fruit", count: 50 }, { name: "Mango", type: "fruit", count: 40 } ]);
如果我们需要对组中的记录进行总计,我们可以使用以下函数 −
var count = fruit.groupAll().reduceCount().value();
如果我们想按特定类型进行过滤 −
var screening = fruit.dimension(function(d) { return d.type; }); screening.filter("Grapes")
同样,我们可以使用 Crossfilter 进行分组。为此,我们可以使用以下函数 −
var grouping = screening.group().reduceCount(); var first = grouping.top(2);
因此,Crossfilter 的构建速度极快。如果您想在应用过滤器时重新计算组,它会逐步计算。Crossfilter 维度非常昂贵。
Crossfilter API
让我们详细了解值得注意的 Crossfilter API。
crossfilter([records]) − 它用于构造一个新的 crossfilter。如果指定了记录,则它会同时添加指定的记录。记录可以是任何 JavaScript 对象或原语数组。
crossfilter.add(records) − 将指定的记录添加到 crossfilter。
crossfilter.remove() − 从 crossfilter 中删除所有与当前过滤器匹配的记录。
crossfilter.size() −返回 crossfilter 中的记录数。
crossfilter.groupAll() − 该函数用于对所有记录进行分组并缩减为单个值。
crossfilter.dimension(value) − 该函数用于使用指定的值访问器函数构造新的维度。
dimension.filter(value) − 该函数用于根据维度的匹配值过滤记录并返回该维度。
dimension.filterRange(range) − 根据维度值过滤大于或等于 range[0] 且小于 range[1] 的记录。
dimension.filterAll() −清除此维度上的所有过滤器。
dimension.top(k) − 用于返回一个新数组,其中包含根据此维度的自然顺序排列的前 k 条记录。
dimension.bottom(k) − 用于返回一个新数组,其中包含根据此维度的自然顺序排列的后 k 条记录。
dimension.dispose() − 用于从交叉过滤器中删除维度。
在下一章中,我们将简要了解 D3.js。