2015-09-06 79 views
1

我想将D3可视化添加到OBIEE中,我需要完成的第一个图是多系列线图。数据被直接从OBIEE叙述视图以这种格式获得:如何在D3中检索嵌套数据集的键值

var data = [ ]; 

data.push({category:"Cat1",date:"20130101",suma:9.11}); 
data.push({category:"Cat2",date:"20130101",suma:2.66}); 
data.push({category:"Cat3",date:"20130101",suma:18.00}); 
data.push({category:"Cat4",date:"20130101",suma:32.49}); 
data.push({category:"Cat5",date:"20130101",suma:37.74}); 

有155线,如那些,对于不同的日期范围从2013至2015年为了按类别将它们分开,所以然后我可以分配一条线和颜色每种类别,我窝在这样的数据:

var dataGroup = d3.nest() 
.key(function(d) {return d.category;}) 
.entries(data); 

变量dataGroup时是那么5个对象的数组,看起来像这样:

0: Object 
key: "Cat1" 
values: Array[31] 
    0: Object 
     category: "Cat1" 
     date: "20130101" 
     suma: 9.11 
     __proto__: Object 
    ... 
    1: Object 
    key: "Cat2" 
    values: Array[31] 
     0: Object 
     category: "Cat2" 
     date: "20130101" 
     suma: 2.66 
     __proto__: Object 
    ... ... 

我试图接下来要做的是分配类别的颜色。

var color = d3.scale.category10(); 
color.domain(d3.keys(dataGroup).filter(function(key) { return key !== "date"; })); 

这里是我遇到麻烦的地方。该过滤器功能的结果是:

Array[5] 
0: "0" 
1: "1" 
2: "2" 
3: "3" 
4: "4" 
length: 5 
__proto__: Array[0] 

相反的是什么,我想我需要的是:

Array[5] 
0: "Cat1" 
1: "Cat2" 
2: "Cat3" 
3: "Cat4" 
4: "Cat5" 
length: 5 
__proto__: Array[0] 

我尝试了好几种办法和他们都没有工作。在这一点上,我即将放弃将D3添加到OBIEE,尽管我真的想实现它,但我正在努力理解这一点,而且我似乎完全无法实现。也许我应该首先学习Javascript,或许D3对于理解数据管理对于我来说太需要了解所需要的所有思维弯曲。

我真的很感谢这方面的帮助。如果我在提交问题时犯了错误,我很抱歉,我试图正确格式化,但这是我第一次在这里发布任何内容。

非常感谢你和最好的问候, 安娜。

回答

2

keys()方法(不作为nest()的一部分使用时)适用于标准关联数组,而不是嵌套数据。您应该采取的dataGroup并遍历每个提取category属性。可能会有更多的问题在你的代码,但尝试

color.domain(d3.values(dataGroup).map(function(d) { 
    return d.category; 
}).filter(function(key) { return key !== "date"; })); 

开始

+0

没有,OP需要'd3.values(dataGroup时).MAP(函数(d){回报d.category;})' 。 –

+0

拉斯是对的。我会更新答案。 –

+0

然后“日期”过滤器甚至不必要,因为这个值不会显示为一个类别:) –