Mapreduce 2个字段上的交叉过滤器维度

Mapreduce 2个字段上的交叉过滤器维度,mapreduce,dc.js,crossfilter,reductio,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 我没有一个很好的方法来重新排列数据,所以让我们假设数据必须保持这样 我想在字段1和字段2组合上创建一个维度:将字段1和字段2中的所有值进行并集的单个维度(在我的示例中,值应该是[a,b,c,d]) 例如,作为reduce函数,您可以假定reduceSum位于value2上(现在允许重复计数) (标记了dc.js和reducetio,因为它可能

我的数据是这样的

field1,field2,value1,value2
a,b,1,1
b,a,2,2
c,a,3,5
b,c,6,7
d,a,6,7
我没有一个很好的方法来重新排列数据,所以让我们假设数据必须保持这样

我想在
字段1
字段2
组合上创建一个维度:将
字段1
字段2
中的所有值进行并集的单个维度(在我的示例中,值应该是
[a,b,c,d]

例如,作为reduce函数,您可以假定
reduceSum
位于
value2
上(现在允许重复计数)


(标记了dc.js和reducetio,因为它可能对这些库的用户有用)

首先,我需要指出,您的数据是非规范化的,因此无论使用何种技术,您得到的计数可能会有点混乱

在crossfilter的标准用法中,每一行将被精确地计算在一个箱子中,并且一个组中的所有箱子的总和将达到100%。但是,在您的情况下,每行将被计数两次(除非两个字段相同),因此,例如饼图就没有任何意义

这就是说,该功能非常适合您正在尝试的操作

维度声明可以简单到:

var tagDimension = cf.dimension(function(d) { return [d.field1,d.field2]; }, true);
现在,每一行将被计数两次-此维度及其关联组的行为将与每一行的行为完全相同,一个副本由
field1
索引,另一个由
field2
索引


如果你用这个做了一个条形图,比如说,总计数将是2N减去
field1===field2
的行数。如果单击栏“b”,则在任一字段中具有“b”的所有行都将被选中。这只会影响在此维度上构建的组,因此任何其他图表只能看到每行的一个副本。

首先,我需要指出,您的数据是非规范化的,因此无论使用何种技术,您得到的计数可能会有点混乱

在crossfilter的标准用法中,每一行将被精确地计算在一个箱子中,并且一个组中的所有箱子的总和将达到100%。但是,在您的情况下,每行将被计数两次(除非两个字段相同),因此,例如饼图就没有任何意义

这就是说,该功能非常适合您正在尝试的操作

维度声明可以简单到:

var tagDimension = cf.dimension(function(d) { return [d.field1,d.field2]; }, true);
现在,每一行将被计数两次-此维度及其关联组的行为将与每一行的行为完全相同,一个副本由
field1
索引,另一个由
field2
索引


如果你用这个做了一个条形图,比如说,总计数将是2N减去
field1===field2
的行数。如果单击栏“b”,则在任一字段中具有“b”的所有行都将被选中。这只影响在此维度上构建的组,因此任何其他图表只能看到每行的一个副本。

。我会试试的。很漂亮。我会试试的。