如何解决dc.js 按行值过滤
我有一个类似于下面的数据集:
我想在“火车运输”上找到“海运”的总金额并用 dc.numberDisplay("#");
海运总出货量/火车总出货量
不确定是否需要使用自定义缩减。
到目前为止我使用了下面的代码,但它返回 1
ndx = crossfilter(data);
var all = ndx.groupAll();
var allGroup = all.reduce(
function (p,v) {
p.total += v.total;
p.sea = (v.shipment_type === "sea") ? 0 : p.total ;
p.train = (v.shipment_type === "train") ? 0 : p.total ;
p.air = (v.shipment_type === "air") ?0 : p.total ;
p.sea_over_train = p.sea / p.train;
return p;
},function (p,v) {
p.total -= v.total;
p.sea = (v.shipment_type === "sea") ? 0 : p.total ;
p.train = (v.shipment_type === "train") ? 0 : p.total ;
p.air = (v.shipment_type === "air") ?0 : p.total ;
p.sea_over_train = p.sea / p.train;
return p;
},function () {
return {
total: 0,sea: 0,train :0,air:0,sea_over_train:0,};
}
);
seaOverTrain
.group(allGroup)
.valueAccessor(function (x) { return x.sea_over_train; })
.formatNumber(d3.format(".3s"));
解决方法
我认为你在正确的轨道上,但是
- 您的
?:
可能被颠倒了 - 您可能需要计算每个类别的总数,并且
- 不使用总数
我们以这一行为例:
p.sea = (v.shipment_type === "sea") ? 0 : p.total ;
如果 p.sea
是 shipment_type
,这会将 "sea"
设置为 0,否则会将其设置为 p.total
。你可能想要反过来。
此外,我认为您的目的是保持海上、火车和空中的运行总量,因此您可以使用 +=
和 -=
以及 v.total
来做到这一点.
目前这些变量将取 p.total
的总和(这可能就是为什么你得到 1...不确定...)
将这些想法放在一起,我们得到:
function (p,v) {
p.total += v.total;
p.sea += (v.shipment_type === "sea") ? v.total : 0 ;
p.train += (v.shipment_type === "train") ? v.total : 0 ;
p.air += (v.shipment_type === "air") ? v.total : 0 ;
p.sea_over_train = p.sea / p.train;
return p;
},function (p,v) {
p.total -= v.total;
p.sea -= (v.shipment_type === "sea") ? v.total : 0 ;
p.train -= (v.shipment_type === "train") ? v.total : 0 ;
p.air -= (v.shipment_type === "air") ? v.total : 0 ;
p.sea_over_train = p.sea / p.train;
return p;
},
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。