2 个字段上的交叉过滤器维度
crossfilter dimension on 2 fields
我的数据是这样的
field1,field2,value1,value2
a,b,1,1
b,a,2,2
c,a,3,5
b,c,6,7
d,a,6,7
我没有重新排列数据的好方法,所以让我们假设数据必须保持这样。
我想在 field1
和 field2
组合上创建一个维度:一个单一维度,它将采用 field1
和 field2
中所有值的并集(在我的例子中,值应该是 [a,b,c,d]
)
作为 reduce 函数,您可以在 value2
上假设 reduceSum
例如(现在允许重复计算)。
(已标记 dc.js 和 reductio,因为它可能对这些库的用户有用)
首先我需要指出您的数据是非规范化的,因此无论您使用何种技术,您得到的计数可能会有些混乱。
在 crossfilter 的标准用法中,每一行都将计入一个 bin 中,并且一组中的所有 bin 加起来为 100%。但是,在您的情况下,每行将被计算两次(除非两个字段相同),因此例如饼图没有任何意义。
也就是说,"tag dimension" 功能非常适合您的尝试。
维度声明可以像这样简单:
var tagDimension = cf.dimension(function(d) { return [d.field1,d.field2]; }, true);
现在每一行都将被计算两次 - 这个维度及其关联的组将完全像每一行都被复制一样,一个副本由 field1
索引,另一个由 field2
索引.
如果你用这个制作了一个条形图,比如说,总计数将是 2N 减去 field1 === field2
处的行数。如果您单击 'b' 栏,所有在任一字段中具有 'b' 的行都将被选中。这只会影响在此维度上构建的组,因此任何其他图表只会看到每行的一个副本。
我的数据是这样的
field1,field2,value1,value2
a,b,1,1
b,a,2,2
c,a,3,5
b,c,6,7
d,a,6,7
我没有重新排列数据的好方法,所以让我们假设数据必须保持这样。
我想在 field1
和 field2
组合上创建一个维度:一个单一维度,它将采用 field1
和 field2
中所有值的并集(在我的例子中,值应该是 [a,b,c,d]
)
作为 reduce 函数,您可以在 value2
上假设 reduceSum
例如(现在允许重复计算)。
(已标记 dc.js 和 reductio,因为它可能对这些库的用户有用)
首先我需要指出您的数据是非规范化的,因此无论您使用何种技术,您得到的计数可能会有些混乱。
在 crossfilter 的标准用法中,每一行都将计入一个 bin 中,并且一组中的所有 bin 加起来为 100%。但是,在您的情况下,每行将被计算两次(除非两个字段相同),因此例如饼图没有任何意义。
也就是说,"tag dimension" 功能非常适合您的尝试。
维度声明可以像这样简单:
var tagDimension = cf.dimension(function(d) { return [d.field1,d.field2]; }, true);
现在每一行都将被计算两次 - 这个维度及其关联的组将完全像每一行都被复制一样,一个副本由 field1
索引,另一个由 field2
索引.
如果你用这个制作了一个条形图,比如说,总计数将是 2N 减去 field1 === field2
处的行数。如果您单击 'b' 栏,所有在任一字段中具有 'b' 的行都将被选中。这只会影响在此维度上构建的组,因此任何其他图表只会看到每行的一个副本。