【问题标题】:unique values count in dc.js + crossfilterdc.js + crossfilter 中的唯一值计数
【发布时间】:2015-05-15 02:38:49
【问题描述】:

我遇到了一个涉及 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 完成了这项工作,但这只是一个 hack。我想要这些基于跨表聚合的数字图表,以便我可以深入研究数据。

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

有人可以帮帮我吗?

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

【问题讨论】:

标签: dc.js crossfilter


【解决方案1】:

失败百分比计算是一个单独的问题,我想你已经在其他地方问过了。要获得唯一计数,很容易制作一个“假 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));

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

【讨论】:

  • 戈登,感谢您在这里提供帮助。图表有效。但它们不是动态的。我在这里更新了小提琴。 jsfiddle.net/anmolkoul/0eue2Lak/1 如您所见,我创建的标志数字图表是动态的,并在选择行图时更新其值。想知道为什么地点和项目计数图表不是这样。还有基于百分比的数字图表,我无法使用reducio实现它,可能是我不太熟悉它。有什么指示吗?另一个小提琴链接,以防万一jsfiddle.net/anmolkoul/0sdvmLxo/1
  • 请一次回答一个问题;这样对以后的读者会更有帮助。他们不更新的原因是交叉过滤器不会自动删除空组。我正在编辑我的答案来处理这个问题。
  • 我觉得不错。我发现使用 Crossfilter 有必要在 console.log 和 console.table 上花费大量时间来弄清楚它不会过滤掉空组的事实。关于 Reductio,如果你想使用它,你可以定义一个具有单个值的维度,然后为此使用 exceptionCount,但我认为@Gordon 解释的方式更好,因为你真正想要的是计算组数组的长度。
  • 不知何故,我无法围绕一些关键概念来思考,因为它完全依赖于基于工具的 BI。但这是有道理的。同样对于复杂的组和数学函数,reduction 会更好,所以我最好开始着手。随着我的进展,我可能会开始为 reductio 构建教程。谢谢 Gordon 和 Ethan。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
相关资源
最近更新 更多