You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

API返回数据整理求助:按Cell聚合最后一条记录的异常KPI信息

解决方案

核心思路

先按cell维度分组,在每个分组内为每个kpi_name保留最新时间的记录,再从这些最新记录中筛选出anomaly=1的KPI,最后聚合出每个Cell的所属站点、异常KPI列表和整体异常状态。

代码实现

假设原始API返回数据结构如下(可替换为实际格式):

const rawData = [
  { site: 'siteA', cell: 'cell1', kpi_name: 'RRC连接成功率', value: 99.5, anomaly: 0, time: '2024-05-20 10:00' },
  { site: 'siteA', cell: 'cell1', kpi_name: 'RRC连接成功率', value: 90.2, anomaly: 1, time: '2024-05-20 10:10' },
  { site: 'siteA', cell: 'cell1', kpi_name: '切换成功率', value: 98.1, anomaly: 0, time: '2024-05-20 10:00' },
  { site: 'siteB', cell: 'cell2', kpi_name: 'RRC连接成功率', value: 85.3, anomaly: 1, time: '2024-05-20 10:05' },
  { site: 'siteB', cell: 'cell2', kpi_name: '切换成功率', value: 92.0, anomaly: 1, time: '2024-05-20 10:05' },
];

处理逻辑代码:

// 1. 按Cell分组,保留每个KPI的最新记录
const cellGroupMap = new Map();
rawData.forEach(item => {
  const { cell, site, kpi_name, time, anomaly } = item;
  
  if (!cellGroupMap.has(cell)) {
    cellGroupMap.set(cell, {
      site,
      kpiLatestRecords: new Map() // 存储该Cell下每个KPI的最新数据
    });
  }

  const cellInfo = cellGroupMap.get(cell);
  const existingKpi = cellInfo.kpiLatestRecords.get(kpi_name);
  // 仅保留时间更新的KPI记录
  if (!existingKpi || new Date(time) > new Date(existingKpi.time)) {
    cellInfo.kpiLatestRecords.set(kpi_name, { anomaly, time });
  }
});

// 2. 转换为目标结构
const finalResult = Array.from(cellGroupMap.entries()).map(([cell, groupData]) => {
  // 筛选出最新记录中异常的KPI名称
  const abnormalKpis = Array.from(groupData.kpiLatestRecords.entries())
    .filter(([_, kpiData]) => kpiData.anomaly === 1)
    .map(([kpiName]) => kpiName);
  
  // 定义Cell异常状态:存在异常KPI则标记为1,否则为0
  const anomalyStatus = abnormalKpis.length > 0 ? 1 : 0;

  return {
    cell,
    site: groupData.site,
    abnormalKpiList: abnormalKpis,
    anomalyStatus
  };
});

console.log(finalResult);

输出结果

[
  {
    cell: 'cell1',
    site: 'siteA',
    abnormalKpiList: ['RRC连接成功率'],
    anomalyStatus: 1
  },
  {
    cell: 'cell2',
    site: 'siteB',
    abnormalKpiList: ['RRC连接成功率', '切换成功率'],
    anomalyStatus: 1
  }
]

注意事项

  • 时间比较:如果原始数据的time是时间戳格式,直接用数值比较即可,无需转Date对象。
  • 站点一致性:若同一Cell对应多个站点(极端情况),可改为取最新记录的站点,或者根据业务规则额外处理。
  • 异常状态规则:可根据需求调整,比如要求所有KPI异常才标记Cell异常,只需修改anomalyStatus的判断逻辑。

内容的提问来源于stack exchange,提问作者ScobbyBrady

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 17:25:52