在 DC.JS 中使用聚合作为标签

Using aggregates as a label in DC.JS

我正在创建一个工具来对手术 material 成本进行一些数据分析。

我希望能够汇总每个 PO 的项目总数并将其除以每个 PO 的级别数。每个采购订单行的水平是平坦的且相同,而总数是按采购订单汇总数量的结果。

我知道如何进行一些聚合,但我不知道如何创建一个行图(作为示例)并将每个级别的植入物显示为标签,从 1-10 左右开始。

主要原因似乎是我想从 PO 中提取维度,但这意味着唯一 PO 的数量成为我的标签,在这个数据集中是 140。

我想我想从 PO 中标注尺寸,将 Qty 除以级别,创建一个唯一的 QtyPerLevel 对象,然后从中标注尺寸。

我可能想错了。

例子在这里:

https://jsfiddle.net/7wbcref9/3/

var cpiGroup = reductio()
    .sum('Qty')
    .exception(function (d) { return d.PO; })
    .exceptionCount(true)(levels.group());

您可能希望在同一组中包含总和和计数,以便可以将计数信息添加到您用于 table 的 'fake' 维度中:

var poGroup = reductio()
        .sum('total')
        .count(true)(poDimension.group());

var uniqueDim = {
    bottom: function (num) {
        var pos = poDimension.top(Infinity);
        // Uses top because the version of Crossfilter being used
        // doesn't support group.bottom.
        return poGroup.top(num)
          .filter(function (d) { return d.value.sum > 0; })
          .map(function (d) {
              var currPo = pos.filter(function (g) { return g.PO === d.key; })[0];
              return {
                  PO: d.key,
                  total: d.value.sum,
                  count: d.value.count,
                  Surgeon: currPo.Surgeon,
                  Levels: currPo.Levels,
                  date: currPo.date
              };
          });
    }
};

然后在您的 table 中,您也可以对总数做您已经在做的事情:

nasdaqTable /* dc.dataTable('.dc-data-table', 'chartGroup') */
    .dimension(uniqueDim)
    // Data table does not use crossfilter group but rather a closure
    // as a grouping function
    .group(function (d) {
        d.cpl = "$" + (d.total / d.Levels).toFixed(2);
        d.countperLevel = (d.count / d.Levels).toFixed(2);
        d.total = "$" + d.total.toFixed(2);
        return d.Surgeon;
    })
    // (_optional_) max number of records to be shown, `default = 25`
    .size(1000)
    // There are several ways to specify the columns; see the data-table documentation.
    // This code demonstrates generating the column header automatically based on the columns.
    .columns([
        'date', 'PO', 'Surgeon', 'Levels', 'total', 'count', { label: "Cost per Level", format: function (d) { return d.cpl }}, { label: "Count per Level", format: function(d) { return d.countperLevel; }}
    ])

我不确定您是否真的需要在 table 中使用 group 来预先计算您的值。直接在格式函数中进行计算可能更好,但任何一种方法都应该有效。

示例:https://jsfiddle.net/optgf9d3/

此外,使用 Reductio,您可以使用 value 语法在同一组中拥有任意数量的聚合(包括不同属性的异常计数)。当您发现自己需要基于同一组进行不同类型的费率计算时,您可能会发现这很方便:https://github.com/crossfilter/reductio#aggregations-standard-aggregations-reductio-b-value-b-i-propertyname-i-