2个字段上的交叉过滤器尺寸

时间:2019-06-28 03:25:44

标签: mapreduce dc.js crossfilter reductio

我的数据看起来像这样

field1,field2,value1,value2
a,b,1,1
b,a,2,2
c,a,3,5
b,c,6,7
d,a,6,7

我没有很好的方法来重新排列数据,所以让我们假设数据必须保持这种状态。

我想在结合在一起的field1field2上创建一个维度:一个单一维度,它将field1field2中所有值的并集(在我的例如,值应为[a,b,c,d]

作为归约函数,您可以在reduceSum上假设value2(现在允许重复计算)。

(已标记dc.js和Reductio,因为它可能对那些库的用户有用)

1 个答案:

答案 0 :(得分:0)

首先,我需要指出的是,您的数据是非规范化的,因此无论使用哪种技术,您获得的计数都可能有些混乱。

在交叉过滤器的标准用法中,每一行将精确地计入一个bin中,并且一组中的所有bin总计为100%。但是,在您的情况下,每行将被计数两次(除非两个字段相同),例如,饼图将毫无意义。

也就是说,"tag dimension"功能非常适合您要尝试执行的操作。

尺寸声明可以很简单:

var tagDimension = cf.dimension(function(d) { return [d.field1,d.field2]; }, true);

现在每一行都将被计数两次-此维度及其关联的组将完全像重复的每一行一样工作,一个副本由field1索引,另一副本由field2索引。 / p>

例如,如果使用此方法制作了条形图,则总数将为2N减去field1 === field2的行数。如果单击栏“ b”,则在两个字段中都具有“ b”的所有行都将被选中。这只会影响以此维度为基础的组,因此任何其他图表将仅看到每一行的一个副本。