在聚合上显示标签(Crossfilter + Reductio)

时间:2016-05-13 19:14:30

标签: d3.js dc.js crossfilter

我有一些(简化的)数据如下:

 { "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范围内获得一行?

1 个答案:

答案 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();