显示标签
问题描述:
我有些(简体)数据如下:显示标签
{ "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
聚集,我得到一排回各PO。
如何根据QtyPerLevel
范围获得一行?
答
我认为你需要预先计算。也就是说,使用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();
有道理。这可能是出于某种疯狂的mapReduce功能,但我一直在绞尽脑汁寻找一个。不能有完全平坦的数据,但做一些预先聚合可能是最实际的解决方案。 – Wesley
我只是创建一个Map(或d3.map),其中键为PO,值为qty,然后遍历所有数据并聚合Map上的PO数量。然后再次循环并使用从地图查找的总量更新所有记录。这就是如果你使用JavaScript。在后端可能有更好的选择,特别是如果你使用的是数据库,在这种情况下,我建议自我加入。 –