dc.js - 如何按唯一ID分组

时间:2014-07-16 21:56:38

标签: javascript d3.js dc.js crossfilter

我正在使用dc.js和crossfilter从csv创建3个行图。前两个是直接的,但第三个需要将一个维度设置为我的输入csv的多个列,所以我重新构建了数据,以便对于该行的每个必需列(具有值),一个新的重复行使用在新列下输入的列值创建。见下文;

旧结构:
ID --- rowchart1 --- rowchart2 ---- rowchart3 ----- rowchart3 ----- rowchart3 -----
1
2
3

新结构:
ID --- rowchart1 --- rowchart2 ---- newRowchart3
1
2
2
2
3
3

一切正常,因为我能够将行图设置为这个新构造的列,但是我无法将原始计数显示在其他两个列中。实际上,我在其他行图中得到重复计数 有没有办法按唯一ID进行分组,因此它只计算那些唯一ID而不是每行数? 非常感谢

1 个答案:

答案 0 :(得分:1)

请参阅:Is there a way to tell crossfilter to treat elements of array as separate records instead of treating whole array as single key?

你的例子是一个稍微简单的例子,因为你没有#34; rowchart3"值,但解决方案仍然可以为您服务。

答案包括一个jsfiddle,演示如何手动管理图表中的类别。您需要更改

function reduceAdd(p, v) {
   if (v.topics[0] === "") return p;    // skip empty values
   v.topics.forEach (function(val, idx) {
      p[val] = (p[val] || 0) + 1; //increment counts
   });
   return p;
}

类似

function reduceAdd(p, v) {
   if(v.rowhart3a != "")
      p[v.rowchart3a] = (p[v.rowchart3a] || 0) + 1; //increment counts

   if(v.rowhart3b != "")
      p[v.rowchart3b] = (p[v.rowchart3b] || 0) + 1; //increment counts

   if(v.rowhart3c != "")
      p[v.rowchart3c] = (p[v.rowchart3c] || 0) + 1; //increment counts

   return p;
}

我希望这会有所帮助。 -DJ