javascript - 使用分组元素 dc.js 的百分比聚合数据表

标签 javascript dc.js crossfilter

如何在数据表中显示失效百分比?我有以下 csv,我正在计算每个“名称”字段的失败百分比,我想显示数据表中每个“名称”的总失败百分比

Customer | year| Week |Failure_Reason|     name        |    Type  |   Count 
___________________________________________________________________________
A         2018  29      D              Express Air        PR         27
___________________________________________________________________________
A         2018  26      M              Express Air        PR         58
___________________________________________________________________________
A         2018  26      D              Domestic                      5
___________________________________________________________________________
A         2018  27      N              Domestic          SPEED       29
___________________________________________________________________________
A         2018  30    Missed           International     PR          11
___________________________________________________________________________
A         2018  32      N              Domestic          PR          53

维度和组的代码:

        var ndx= crossfilter(data);
        var all= ndx.groupAll();  
        var CTypedim=ndx.dimension(function(d) {return d["name"]+ ',' + d["Customer"];})
        var CTypeGroup=CTypedim.group();

        var percentFailures = CTypedim.group().reduce(
        function(p, v) {
             p.counter+= Number(v.count);
             p.failures += Number(v.Failure_Reason != 'N' ? v.count : 0);
             p.failPercent = p.counter ? p.failures/p.counter : 0;
             return p;
         },
         function(p, v) {

             p.counter-= Number(v.count);
             p.failures -= Number(v.Failure_Reason != 'N' ? v.count : 0);
             p.failPercent = p.counter ? p.failures/p.counter : 0;
             return p;
         },
         function() {
             return {
                 counter: 0,
                 failures: 0,
                 failPercent: 0
             };
         });

        dataTable.width(800).height(800)
        .dimension(percentFailures)
        .group(function(d) { return "" })
        .size(100)
        .columns([
            function(d) { return d.Customer; },
            function(d) { return d.year; },
            function(d) { return d.value.failpercent*100; },
            function(d) { return d.name; },

        ])
        .sortBy(function(d){ return d.year; })
        .order(d3.descending);

需要显示聚合的datavtable如下:

Customer | Year| Failure%|     name        |    
_____________________________________________
A         2018      100%     Express Air       
_____________________________________________
A         2018      5.7%       Domestic     
_____________________________________________
A         2018      100%      International       
_____________________________________________

Result

最佳答案

你在正确的轨道上,继续前进!

您需要在表格中使用聚合字段:

    .columns([
        function(d) { return d.key.split(',')[1]; }, // customer part of multikey
        function(d) { return d.year; },
        function(d) { return d.value.failPercent*100; }, // capitalize consistently
        function(d) { return d.key.split(',')[0]; }, // name part of multikey

    ])

使用年份是有问题的!因为一旦聚合,您就不知道每个聚合值代表哪一年 - 它可能代表多年。如果您可以删除该专栏,我推荐它。

关于javascript - 使用分组元素 dc.js 的百分比聚合数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52871245/

相关文章:

grails - DC Crossfilter隐藏特定选择

javascript - Dc.js 和 D3.js 图表更新

javascript - 根据依赖于一个字段的值对样本进行分组

javascript - 带有页眉和页脚的双动画模态

javascript - vue-router 访问组件数据

javascript - 使用 DC.JS/Crossfilter 进行部分求和

javascript - dc js - 无法重绘图表

javascript - dc.js:具有多个 CSV 的 ReduceSum

javascript - JSP/JavaScript/CSS : auto resize div based on window size

javascript - 如何将自定义 map 控件放置在 Google map 中的 "Google"标签上方?