如何计算HTML表格中Pipeline Value列的总计值
解决Pipeline Value列总计为空的问题
看起来你已经搞定了表格大部分的求和逻辑,就差Pipeline Value的总计了,我来帮你把这个坑填上~主要需要调整两个关键部分:每个地区的Pipeline Value累加逻辑和总计行的Pipeline Value计算。
第一步:修正单地区的Pipeline Value计算
你现在的代码里,初始化地区对象时直接把当前行的row.pipelinevalue赋值给了Pipeline Value,但每个地区对应多个销售阶段的记录,应该把这些值累加起来,而不是只取第一条记录的值。修改这部分代码:
const obj = summary_data.reduce((res, row) => { if (!res[row.Geo]) { res[row.Geo] = Object.fromEntries([ ['Geo', row.Geo], ['Pipeline Value', 0], // 初始化为0,而不是直接赋值单条记录的pipelinevalue ...stages.map(s => [s, 0]) ]); } res[row.Geo][row.SalesStage] += row.count; // 累加当前行的pipelinevalue到对应地区的总值里 res[row.Geo]['Pipeline Value'] += row.pipelinevalue; // 小提示:如果Total列需要统计所有销售阶段的count总和,去掉下面的if判断即可 if(row.SalesStage=='Proposal Submitted'||row.SalesStage=='Qualified' ||row.SalesStage=='Negotiation & Contracting') res[row.Geo].Total += row.count; return res; }, {});
第二步:计算总计行的Pipeline Value
在添加总计行时,你之前把PipelineValue设成了空字符串,现在需要计算所有地区的Pipeline Value总和,还要注意键名要和前面保持一致(是带空格的Pipeline Value,不是PipelineValue):
// 先算出所有地区的Pipeline Value总和 const totalPipelineValue = geodata.reduce((sum, row) => sum + row['Pipeline Value'], 0); // 添加Total行 geodata.push({ Geo: 'Total', 'Pipeline Value': totalPipelineValue, // 填入计算好的总和 ...Object.fromEntries( stages.map(s => [s, geodata.reduce((sum, row) => row[s] + sum, 0)]) ) });
把这些修改替换掉原来的对应代码,你的Pipeline Value列总计就会正常显示数值啦~
内容的提问来源于stack exchange,提问作者user3386779
相关产品推荐
相关产品推荐

