我有一个JSON数据,我需要分组并对数据求和。让我们说我有一个json对象,看起来像这样:
Company:
1. ABC --Focus -- 1.Operate -- Completed :70 ,Remaining:75
2.Improve -- Completed:100 ,Remaining:75
3.Optimize -- Completed:50 ,Remaining:25
2. DEF--Focus-- 1.Operate -- Completed:50 ,Remaining:25
2.Optimize -- Completed:100 ,Remaining:75
3. XYZ--Focus-- 1.Innovate -- Completed:100 ,Remaining:75
2.Operate -- Completed:100 ,Remaining:50
3.Optimize -- Completed:20 ,Remaining:50
output ::数组内的数组,第一个数组应包含公司,并在另一个数组中包含我的焦点区域已完成和剩余数据的总和。
var resultxyz = Enumerable.From(dataString).GroupBy("$.Company", null,
function (key, g) {
var resultxyz = {
z: key,
totalCompleted: g.Sum("$.Completed"),
totalRemaining: g.Sum("$.Remaining")
}
return resultxyz ;
}).ToArray();
我已尝试过以下查询来实现此目的:
{{1}}
但这仅限于我必须关注的公司。 任何想法或建议都会有很大的帮助。
答案 0 :(得分:1)
基本上你正在寻找一个双层分组。首先是所有公司的整体分组,以及每个组内的一组焦点。有许多不同的方式可以建模,但最直接的方式是:
var query = Enumerable.From(data)
.GroupBy("$.Company", null,
function (key, g) {
return {
Company: key,
Result: Enumerable.From(g)
.GroupBy("$.Focus", null,
"{ Focus: $, Completed: $$.Sum('Number($.Completed)'), Remaining: $$.Sum('Number($.Remaining)') }"
)
.ToArray()
};
}
)
.ToArray();
请注意使用Number()
功能。由于Completed
和Remaining
属性是字符串,因此获取总和将无法按预期工作。我们需要事先将它们转换为数字。