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

unique values count in dc.js + crossfilter

我遇到了一个涉及 dc.js 和交叉过滤器的独特问题。我有一些数据需要使用 dc.js 支持的数字图表来显示。但是我发现数字图表的文档很少,因此发布了我的查询。

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

我基本上想在方框 1 中显示唯一项目数,在本例中为 3,在方框 2 中显示唯一项目数,在本例中为 11,屏幕故障率为 2/15* 100 即 15.3%

目前我已经使用 jquery 完成了这项工作,但这只是一个 hack。我想要这些基于交叉 table 聚合的数字图表,以便我可以深入研究数据。

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

有人可以帮我吗?

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());

失败百分比计算是一个单独的问题,我认为您已经在别处问过。要获得唯一计数,很容易在其值方法中创建一个 "fake groupAll" 其中 returns 唯一键的数量。

我们还需要过滤掉空垃圾箱,因为交叉过滤器不会自动执行此操作。

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));

更新 fiddle 此处,仍然忽略 failure% 部分: http://jsfiddle.net/gordonwoodhull/vct0dzou/1/