javascript - 使用分组元素 dc.js 的百分比聚合数据表
问题描述
如何在数据表中显示失败百分比?我有以下 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
_____________________________________________
解决方案
你在正确的轨道上,继续前进!
您需要使用表中的聚合字段:
.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
])
使用年份有问题!因为一旦你聚合,你就真的不知道每个聚合值代表哪一年——它可能代表多年。如果您可以删除该列,我推荐它。
推荐阅读
- smooch - 将 Smooch 与代理平台连接
- unity3d - 如何在 Unity 中手动设置 Toggle UI 可交互大小?
- r - 如何找到数据框中的内容而不是R中的其他内容
- javascript - TypeError:重复声明,Typescript 项目中的模块构建失败错误
- css - 在图像悬停时显示产品标题
- python - 如何在一段时间后将 Active True 的布尔值更改为 false
- visual-studio-code - VS Code 编辑器,取消链接资源管理器窗格和编辑器选项卡
- cassandra - 使用 datastax 驱动程序创建 BoundStatement 时出现 NullPointerException
- javascript - 有没有办法检查 JavaScript/Node 应用程序中是否定义了所有函数引用?
- python - 如何将字符串从txt文件转换为整数,当boud到另一个字符串时?PYTHON