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

Aggregate datatable with percentage for grouped elements dc.js

如何在数据中显示失败百分比table?我有以下 csv,我正在计算每个 "name" 字段的失败百分比,我想显示数据 table

中每个 "name" 的总失败百分比
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);

需要显示聚合数据vtable如下:

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

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

您需要在 table:

中使用聚合字段
    .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

    ])

使用年份有问题!因为一旦聚合,您就不知道每个聚合值代表哪一年 - 它可能代表多年。如果你能放弃那个专栏,我推荐它。