Palantir TypeScript 分组聚合结果按percentage降序取前5行
实现方法
你可以直接在现有divideTwoDimensional私有方法里追加排序、截取逻辑,不需要调整原有groupBy聚合查询的代码,改动量极小。
核心修改逻辑:
- 计算得到所有分组的百分比结果后,对结果数组按百分比值做降序排序
- 排序完成后截取前5条记录,再作为最终buckets返回
修改后的完整代码如下:
export class funzione1 { @Function() public async test1(object1: ObjectSet<object1>): Promise<TwoDimensionalAggregation<string>> { const numerators = await object1.groupBy(e => e.column1.topValues()) .sum(e => e.column2); const denominators = await object1.groupBy(e => e.column1.topValues()) .sum(e => e.column3); return this.divideTwoDimensional(numerators, denominators); } private divideTwoDimensional(numerators:TwoDimensionalAggregation<string>, denominators: TwoDimensionalAggregation<string>): TwoDimensionalAggregation<string> { const percentage = numerators.buckets.map((bucket, i) => { const numerator = bucket.value; const denominator = denominators.buckets[i].value; if (denominator === 0) { return { key: bucket.key, value: 0 }; } return { key: bucket.key, value: numerator / denominator } }); // 按百分比降序排序,取前5条 const sortedTop5 = percentage .sort((a, b) => b.value - a.value) .slice(0, 5); return { buckets: sortedTop5 }; }
补充:如果需要匹配示例里的两位小数格式,可以在计算value时追加小数处理,即
value: Number((numerator / denominator).toFixed(2))即可。
内容的提问来源于stack exchange,提问作者Jresearcher
相关产品推荐
相关产品推荐

