dc.js + crossfilter中的唯一值计数

时间:2015-03-12 19:07:26

标签: dc.js crossfilter

我遇到了一个涉及dc.js和crossfilter的独特问题。我有一些数据需要使用由dc.js提供支持的数字图表来显示。但是我找到了数字图表的最小文档,因此发布了我的查询。

Here is the JSFiddle for what i have conceptualized so far.

我基本上想要显示方框1中的唯一项目计数,在这种情况下为3,方框2中的唯一位数,在这种情况下为11,屏幕故障率为2/15 * 100即15.3%

目前我已经使用jquery使这个工作,但那只是一个黑客。我想基于交叉表聚合得到这些数字图表,以便我可以深入研究数据。

我遇到了减少计算计数的例子,但它们用于条形图,但在数字图表中我们需要有一个值访问器来显示数据。

有人可以帮帮我吗?

PS: 这是我写的jquery代码。不知道这是否有用。

$(document).ready(function() {
    var baseURL = window.location.origin;

    $.ajax({
        url : baseURL + '/api/PlaceTable',
        type : 'GET',
        data : {},
        async : true,
        dataType : "json",
        success : function(response) {


            //Project Count
            var projectIdCount = [];
            for (i = 0; i < response.length; i++) {
                if(response[i].Project != undefined){
                    if($.inArray(response[i].Project, projectIdCount) === -1){
                        projectIdCount.push(response[i].Project);
                    }                    
                }
            }
            $('#number-box1').text(ProjectIdCount.length);


            //Place Count
            var placeIdCount = [];
            for (i = 0; i < response.length; i++) {
                if(response[i].Place != undefined){
                    if($.inArray(response[i].Place, placeIdCount) === -1){
                        placeIdCount.push(response[i].Place);
                    }                    
                }
            }

为了显示包含二进制值的列的运行总和,我使用了这个代码,它在数字图表中起作用:

numberChart
        .valueAccessor(function(x){ return +flag.groupAll().reduceCount().reduceSum(function(d) { return d.Flag; }).value();})
        .group(ndx.groupAll());

1 个答案:

答案 0 :(得分:3)

故障百分比计算是一个单独的问题,我认为你已经在别处问过了。要获得唯一计数,可以很容易地创建一个“伪groupAll”,它返回其value方法中唯一键的数量。

我们还需要过滤掉空箱,因为crossfilter不会自动执行此操作。

function bin_counter(group) {
    return {
        value: function() {
            return group.all().filter(function(kv) {
               return kv.value > 0;
            }).length;
        }
    };
}

var projectGroup = project.group();

projectCount
    .valueAccessor(function(x){ return x;})
    .group(bin_counter(projectGroup));

在这里更新了小提琴,仍然忽略了失败%部分: http://jsfiddle.net/gordonwoodhull/vct0dzou/1/