2015-09-06 78 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

然後「日期」過濾器甚至不必要,因爲這個值不會顯示爲一個類別:) –