2014-03-24 16 views
0

我使用從下面的代碼來獲得獨特的計數.. Crossfilter reduce :: find number of uniques如何排序從「crossfilter,減少查找的用戶號碼的,不重複」

我用在這裏找到排序方法「dc.js/crossfilter -> How to sort data in dc.js chart (like row) - Ascending x Descending獲得前10名」。

當我在行圖中顯示所有水平條時,按照升序/降序排序。但是當我試圖只顯示前10名時,那麼訂單不是按價值而是按照組的字母順序。

var donor=cf.dimension (function(d){ return d.donor;}); 

var donorCount=donor.group().reduce(
    function (p, d) { 
     if (d.projectTitle in p.projectTitle) 
      p.projectTitle[d.projectTitle]++; 
     else { 
      p.projectTitle[d.projectTitle] = 1; 
      p.projectCount++; 
     } 
     return p; 
    }, 

    function (p, d) { 
     p.projectTitle[d.projectTitle]--; 
     if (p.projectTitle[d.projectTitle] === 0) { 
     delete p.projectTitle[d.projectTitle]; 
     p.projectCount--; 
     } 
     return p; 
    }, 

    function() { 
     return { 
     projectCount: 0, 
     projectTitle: {} 
    }; 
});//this code is borrowed from http://jsfiddle.net/djmartin_umich/3LyhL/ 

..... 
donorChart.width(320).height(600) 
    .dimension(donor) 
    .group(donorCount) 
    .valueAccessor(function (d) { 
     return d.value.projectCount; 
    })//borrowed code 
    .label(function(d){return "("+d.value.projectCount+")"+d.key;}) 
    .colorAccessor(function (d){return 1;})     
    .elasticX(true) 
    .ordering(function(d){ return -d.value.projectCount; }) 
    .data(function(d) { 
     return d.top(10); 
    });//this top ten code does not work as expected  

沒有最後三行代碼,圖表顯示按值排序的所有捐助者。我對JavaScript很陌生,無法修改最後三行來完成我的工作。

回答

1

好吧,我剛剛得到它。

donorChart.width(320).height(600) 
.data(function (d) { 
    return d.order(function (d) { 
     return d.projectCount; 
    }).top(10); 
}) 
.ordering(function (d) { 
    return -d.value.projectCount; 
}); 
+0

受到crossfilter API參考的打擊 –

1

您可以使用group.order在組上設置排序功能。從這個訪問器返回的每行的值將決定當前N被採用時的行的順序。 group.top將按此值以降序返回頂部行。

在你的情況,你可以試試這個,看看它的工作原理:

donorCount.order(function(d) { return d.projectCount; }); 

不幸的是,我不知道怎麼dc.js檢索組。如果它使用group.top那麼這應該工作。如果它使用group.all它不會因爲文檔說group.all總是使用自然排序。

+0

謝謝。我有完全相同的代碼,你建議但在這篇文章中刪除,因爲它不能按預期工作。它仍然保持自然秩序。
只有按照值排序的donorChart.ordering(function(d){return -d.value.projectCount;}),但當我添加group.top(10)代碼時它似乎被覆蓋。排序重新回到自然順序(字母)。 –