2014-11-06 68 views
0

我正试图在下面的数组上使用dc.numberDisplay来显示合计总数的一个百分比。如何计算并显示crossfilter和dc.numbedisplay的百分比?

var data = [ 
    {Bool: "True", val: 20}, 
    {Bool: "True", val: 20}, 
    {Bool: "True", val: 20}, 
    {Bool: "False", val: 20}, 
    {Bool: "False", val: 20} 
]; 

结果我要为60%,由于总的真正的是60和所有的数据的总数超过100

目前,我能得到的价值的总和使用以下:

HTML:

<h1 id = "numberDisplay">here</h1> 

的Javascript:

var ndx = crossfilter(data); 
dc.numberDisplay('#numberDisplay') 
     .valueAccessor(function(d){return d}) 
     .group(ndx.groupAll().reduceSum(function(d){return d["val"];})) 
     .formatNumber(d3.format(".3s")); 
dc.redrawAll(); 

我也可以得到真正的价值的总和与此

var ndx = crossfilter(data); 

ndxFilter = ndx.dimension(function(d) { return d.Bool; }); 
ndxFilter.filter('True'); 


dc.numberDisplay('#numberDisplay') 
     .valueAccessor(function(d){return d}) 
     .group(ndx.groupAll().reduceSum(function(d){return d["val"];})) 
     .formatNumber(d3.format(".3s")); 
dc.redrawAll(); 

我有很难把这些结合在一起得到的百分比。

回答

0

随着本地JavaScript我会做这样的事情:

var len = data.length, 
    trues = data.filter(function(d){return d.Bool === "True"}).length, 
    percentage = trues/len * 100; 

document.getElementById('numberDisplay').value = percentage+"%";