在 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-
我正在创建一个工具来对手术 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-