2017-09-08 9 views
1

저는 특정 데이터 세트의 차트와 테이블을 작성하는 데 dc.js와 crossfilter를 사용하려고했습니다.DC.js 데이터 테이블을 사용하여 연도별로 집계 데이터가있는 테이블을 만듭니다.

지금까지 구축 차트는 잘 작동하지만 나는 다음과 같이 데이터를 요약하는 작은 HTML 테이블을 구축하기 위해 데이터 테이블 기능을 사용하려면 : 여기에 샘플입니다,

|Year|TotalEmployees| 
|2015|555| 
|2016|666| 
|2017|777| 

내 데이터 세트가 20 000 행이 데이터 :

var data = [ 
{"Year":"2015","Category":"1","NbEmployee":"51"}, 
{"Year":"2015","Category":"2","NbEmployee":"31"}, 
{"Year":"2015","Category":"3","NbEmployee":"14"} 
{"Year":"2016","Category":"1","NbEmployee":"51"}, 
{"Year":"2016","Category":"2","NbEmployee":"55"}, 
{"Year":"2016","Category":"3","NbEmployee":"65"}, 
{"Year":"2017","Category":"1","NbEmployee":"76"}, 
{"Year":"2017","Category":"2","NbEmployee":"98"}, 
]; 
지금까지 코드의이 작품은 데이터의 행마다 결과의 한 행을 반환하고, 간단한 조작해야처럼 느낌이 있지만, 내가 올바른 구문을 알아낼 수 없습니다

구축하다 나는 .group에 건네 다음 변수로 치수에

.group().reduceSum() 

기능을 적용하기 위해 수많은 시간을 시도했습니다

var ndx = crossfilter(data); 
var tableDim = ndx.dimension(function(d) { 
    return d.Year; 
}); 

var datatable = dc.dataTable("#dc-data-table"); 

datatable 
    .dimension(tableDim) 
    .group(function(d) { 
     d.NbEmployee += d.NbEmployee; 
     return d.Year; 
     }) 
    .columns([ 
     function(d) {return d.Year;}, 
     function(d) {return d.NbEmployee;}, 
    ]); 

() 매개 변수 : 다 년 당 하나 개의 행을 가진 테이블을 요약 ,하지만 난 항상 컴파일 오류로 끝나고, 나는 지금 꽤 우둔 해요.

내가 무엇을 찾고의 SQL 번역은 이것이다 :

SELECT 
    Year, 
    NbEmp = SUM(NbEmploye) 

FROM DB 

GROUP BY 
    Year 

ORDER BY 
    Year 

감사합니다 사전에 도움을!

답변

2

dataTable 님의 그룹 is not a group - 예, 상당히 다른 방법으로이 방법을 사용하여 mean something completely different에 다른 모든 차트에서 의미가 무엇입니까. 여기서는 함수이고 다른 곳에서는 크로스 필터 객체입니다.

dataTable.dimension() 개체에서 데이터를 읽는 점에서 dc.js 차트에서 고유합니다. 이는 기본적으로 집계 된 데이터가 아닌 원시 행의 데이터를 표시하기 때문입니다.

그러나, can be used to display a group instead. in descending order을 표시하도록 선택하면 차원에서 실제로 호출하는 유일한 메서드가 .top()이기 때문에이 방법이 효과적입니다.

오름차순으로 표시하려면 use a fake group to produce an object which supports the .bottom() method 수 있습니다.

+0

정보를 제공해 주셔서 감사합니다. 그러나 C# Razor로 데이터 테이블을 구축하기로 결정했습니다. 빌드 할 테이블이 많고 DC.js가 슬프게도 사용자에게 친숙하지 않기 때문입니다. –

+1

확실히 이해할 수 있습니다. - dc.js dataTable은 거의 개념 증명이 아닙니다. 사람들이 더 좋은 것을 원할 때 종종 DataTables.js 또는 유사한 것으로 이동하여 DC 이벤트 및 크로스 필터 데이터에 연결합니다. 나중에이 문제를 접할 수있는 사람은 https://stackoverflow.com/questions/21596616/dc-js-data-table-using-jquery-data-table-plugin에 대한 답변으로 개선 될 수 있지만 기본적으로 올바른 아이디어입니다. – Gordon