我的数据看起来像这样
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]
)
作为归约函数,您可以在reduceSum
上假设value2
(现在允许重复计算)。
(已标记dc.js和Reductio,因为它可能对那些库的用户有用)
答案 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”的所有行都将被选中。这只会影响以此维度为基础的组,因此任何其他图表将仅看到每一行的一个副本。