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

Show Label on Aggregate (Crossfilter + Reductio)

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

 { "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 }

您在此处看到两个采购订单的数据,每行代表一种独特的产品及其使用量。您还可以看到这些产品分布在多少层。

有助于理解成本的一个维度是material密度。也就是说,每个级别使用了多少项目。在 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 +';
    }
});

我可以轻松地在一个维度内创建组和范围。

我似乎无法做的是聚合的完全相同的事情。我想按每个级别使用的 material 数量查看(过滤器)PO。每个采购订单的数字并不难获取,但成组查看似乎很难。下面的示例:

https://jsfiddle.net/efefdtcj/2/

自从我开始使用基于 PO 聚合的维度后,我为每个 PO 返回了一行。

如何让每个 QtyPerLevel 范围返回一行?

我觉得你需要预先计算一下。即,向每个采购订单行添加一个新的 属性,其中包含采购订单中的总数量值。当你这样做的时候,你也可以计算 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();