我有一些(简化的)数据如下:
{ "PO": 1353901, "Qty": 1, "Levels": 3 },
{ "PO": 1353901, "Qty": 2, "Levels": 3 },
{ "PO": 50048309,"Qty": 1, "Levels": 1 },
{ "PO": 50048309,"Qty": 4, "Levels": 1 },
{ "PO": 50048309,"Qty": 1, "Levels": 1 }
您可以在此处查看两个采购订单的数据,每行代表一个独特的产品以及使用了多少产品。您还可以看到这些产品分布在多少级别。
帮助了解成本的维度是材料密度。也就是说,每个级别使用了多少项。在1353901
的情况下,在三个级别上使用了三个项目(数量被聚合,级别没有),每个级别产生一个项目。
对于50048309
,在一个级别上使用了六个项目,显示了更高的种植体密度。这告诉我,很多工作集中在一个地方。
过滤平面数据很容易,并且不难分组到范围内。以Levels
为例:
var levels = ndx.dimension(function (d) {
var level = d.Levels;
if (level == 1) {
return 'One';
} else if (level == 2) {
return 'Two';
} else if (level == 3) {
return 'Three';
} else {
return 'Four +';
}
});
我可以轻松地在维度内创建组和范围。
我似乎无法做到的是聚合完全相同的事情。我想按每个级别使用的材料数量来查看(过滤器)PO
。获得每个采购订单并不是一个难以理解的数字,但似乎很难在群体中查看。示例如下:
https://jsfiddle.net/efefdtcj/2/
自从我开始使用基于PO
聚合的Dimension时,我会为每个PO获得一行。
如何在QtyPerLevel
范围内获得一行?
答案 0 :(得分:2)
我认为你需要预先计算。也就是说,使用PO中总数量的值为每个PO行添加新属性。当你在这里时,你也可以计算QtyPerLevel
:
{ "PO": 1353901, "Qty": 1, "Levels": 3, "TotalQty": 3, "QtyPerLevel": 1 },
{ "PO": 1353901, "Qty": 2, "Levels": 3, "TotalQty": 3, "QtyPerLevel": 1 },
{ "PO": 50048309,"Qty": 1, "Levels": 1, "TotalQty": 6, "QtyPerLevel": 6 },
{ "PO": 50048309,"Qty": 4, "Levels": 1, "TotalQty": 6, "QtyPerLevel": 6 },
{ "PO": 50048309,"Qty": 1, "Levels": 1, "TotalQty": 6, "QtyPerLevel": 6 }
然后在QtyPerLevel
上创建一个Crossfilter维度,并对其进行过滤或分组:
var ndx = crossfilter([
{ "PO": 1353901, "Qty": 1, "Levels": 3, "TotalQty": 3, "QtyPerLevel": 1 },
{ "PO": 1353901, "Qty": 2, "Levels": 3, "TotalQty": 3, "QtyPerLevel": 1 },
{ "PO": 50048309,"Qty": 1, "Levels": 1, "TotalQty": 6, "QtyPerLevel": 6 },
{ "PO": 50048309,"Qty": 4, "Levels": 1, "TotalQty": 6, "QtyPerLevel": 6 },
{ "PO": 50048309,"Qty": 1, "Levels": 1, "TotalQty": 6, "QtyPerLevel": 6 }]);
var qtyPerLevelDim = ndx.dimension(function(d) { return d.QtyPerLevel; });
var qtyPerLevelGrp = qtyPerLevelDim.group();