2015-12-13 2 views
0

У меня есть структура данных, как это (CSV-файл):d3.next.rollup возвращает неопределенное

Datum,Name,Kategorie,Betrag 
01/10/15,,Lohn,1586.7 
02/10/15,,lunch,-4.55 
02/10/15,kaisla,Ausgehen,-16.2 

То, что я пытаюсь сделать, это подвести итог по дате, как это.

var summedData = d3.nest() 
    .key(function(d) { return d.Datum;}) 
    .rollup(function(v) { return { 
    date: v.Datum, 
    total: d3.sum(v, function(d) { return d.Betrag; }), 
    category: v.Kategorie}; 
    }) 
    .entries(data); 

однако это возвращает объект, как это:

object{ 
    key: "01/10/2015" 
    values: object{ 
    date: undefined 
    category: undefined 
    sum: 1586.7 
    } 
} 

Я не понять, почему date и category не определено и как это исправить. Может ли кто-нибудь помочь?

ответ

1

В вашем .rollup, v массив так, v.Datum и v.Kategorie являются неопределенной. Делая что-то вроде этого:

return { 
    date: v[0].Datum, 
    ... 

будет работать Datum, так как это будет повторяться и быть уникальным, но Kategorie не будет, так как насчет:

category: v.map(function(d){ 
    return d.Kategorie; 
}) 

Конечно, это зависит от вашей конечной цели ,


Полный код:

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <script data-require="[email protected]" data-semver="3.5.3" src="//cdnjs.cloudflare.com/ajax/libs/d3/3.5.3/d3.js"></script> 
 
</head> 
 

 
<body> 
 
    <script> 
 
    var data = [{"Datum":"01/10/15","Name":"","Kategorie":"Lohn","Betrag":"1586.7"},{"Datum":"02/10/15","Name":"","Kategorie":"lunch","Betrag":"-4.55"},{"Datum":"02/10/15","Name":"kaisla","Kategorie":"Ausgehen","Betrag":"-16.2"}]; 
 
    
 
    var summedData = d3.nest() 
 
     .key(function(d) { 
 
     return d.Datum; 
 
     }) 
 
     .rollup(function(v) { 
 
     return { 
 
      date: v[0].Datum, 
 
      total: d3.sum(v, function(d) { 
 
      return d.Betrag; 
 
      }), 
 
      category: v.map(function(d){ 
 
      return d.Kategorie; 
 
      }) 
 
     }; 
 
     }) 
 
     .entries(data); 
 
     
 
    console.log(summedData); 
 

 
    </script> 
 
</body> 
 

 
</html>