【发布时间】:2017-03-30 02:52:41
【问题描述】:
我有来自虚拟机集群的信息,我试图在 dc.js 复合折线图上按天绘制这些信息。
这是 JSON 格式:
[{
Date: "Feb 15 14:25:53 2017",
Institution: "institution x",
Memory: 57777556,
Nodes: 1,
Processors: 4,
Queue: "workq",
TotalCpus: 81600,
TotalMemory: 64172851200,
TotalNodes: 300
},
{
Date: "Feb 15 14:26:09 2017",
Institution: "institution y",
Memory: 57542224,
Nodes: 1,
Processors: 4,
Queue: "workq",
TotalCpus: 81600,
TotalMemory: 64172851200,
TotalNodes: 300
}]
通过使用 reduceSum() 减少,我可以绘制每个机构随时间消耗的总内存。这是我的小提琴:https://jsfiddle.net/catkinso/cxr1L6fq/
但是,我无法弄清楚如何计算每个机构每天消耗的平均内存。
我知道我需要实现一个自定义缩减,它使用这样的子箱:
var usedMemoryGroup = dateDimension.group().reduce(
function (p, v)
{
// add
if (v.Queue === queue)
{
p[v.Institution] = (p[v.Institution] || 0) + (v.Memory / v.TotalMemory);
}
return p;
},
function (p, v)
{
// remove
if (v.Queue === queue)
{
p[v.Institution] -= (v.Memory / v.TotalMemory);
}
return p;
},
function ()
{
// init
return {};
});
但我不确定如何创建自定义减少,以创建子箱,同时还计算每天的平均值。最终,我希望将这种减少绘制在一张综合时间表上,其中包含每个机构的线条。
任何帮助将不胜感激!
【问题讨论】:
-
我建议不要分组计算平均值。计算分子和分母。然后在要显示数据时计算平均值。我认为您的问题更多在于您一遍又一遍地在同一组中调用
reduceSum。您只是每次都更换组的减速器。您需要为每个机构创建一个组,然后使用此技术将它们组合起来:github.com/dc-js/dc.js/wiki/FAQ#combine-groups(您还可以跟踪一个组的单独属性的每个平均值。无论哪种方式都有效。) -
谢谢伊桑!您的评论帮助指导我朝着更好的方向前进!这是一个更新的小提琴:jsfiddle.net/catkinso/475nysw8/5
标签: javascript d3.js dc.js