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”的所有行都将被选中。这只影响在此维度上构建的组,因此任何其他图表只能看到每行的一个副本。。我会试试的。很漂亮。我会试试的。