2015-09-06 2 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); 

переменная Датагруп затем массив из 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, по-видимому, требуют понимания управления данными, слишком для меня.

Я бы очень признателен за любую помощь по этому вопросу. Прошу прощения, если я сделал какие-либо ошибки при отправке вопроса, я попытался отформатировать его правильно, но это первый раз, когда я публикую что-либо здесь.

Большое вам спасибо, Ana.

ответ

2

Метод keys() (не используется в качестве части nest()) предназначен для стандартных ассоциативных массивов, а не вложенных данных. Вы должны принять values от dataGroup и перебрать каждый, чтобы извлечь category. Там могут быть дополнительные проблемы в вашем коде, но попробуйте

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

начать

+0

Нет, OP нуждается 'd3.values ​​(Датагруп) .map (функция (d) {возвращение d.category;})' , –

+0

Ларс прав. Я обновлю ответ. –

+0

И тогда фильтр «даты» не должен даже быть необходимым, так как это значение не отображается как категория :) –

Смежные вопросы