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

将PowerBI查询改为追加数据并去重而非覆盖全表的技术问询

解决PowerBI从Sentinel拉取数据时保留超90天历史数据的方案

因为Sentinel API只能返回90天的滚动数据,而你需要保留更久的历史记录,核心思路就是把现有历史数据和新拉的90天数据合并,再去重——既留住旧数据,又更新已有事件的最新状态。

具体操作步骤

1. 先存好现有历史数据

别让刷新把旧数据清了,先把当前PowerBI里的完整数据存成一个本地查询:

  • 在「数据」面板右键点你现在的表 → 「复制」
  • 右键「查询」面板 → 「粘贴」,把新查询改名叫历史数据
  • 编辑这个历史数据查询,删掉原来的API拉取代码,只留最终的表结构(这样它就存的是本地缓存的历史记录,不会随刷新清空)

2. 保留原API查询拉新数据

原来的API查询逻辑不变,把它改名叫新拉取数据,专门用来每次刷新获取最新90天的快照。

3. 合并两个表并去重

新建一个查询,命名为合并后数据,代码如下:

let
    // 加载本地保存的历史数据
    历史数据 = 历史数据,
    // 加载新拉的90天数据
    新拉取数据 = 新拉取数据,
    // 合并两个表
    合并表 = Table.Combine({历史数据, 新拉取数据}),
    // 按Incident字段去重(Incident是事件唯一标识)
    去重表 = Table.Distinct(合并表, {"Incident"}),
    // 可选:按创建时间倒序排序,方便查看最新数据
    排序表 = Table.Sort(去重表, {{"CreatedTime", Order.Descending}})
in
    排序表

4. 绑定仪表板到新表

把原来仪表板里所有依赖旧表的视觉对象,都改成用这个合并后数据表即可。

额外优化:处理事件状态更新

如果有些事件的状态(比如Status、ClosedTime)会更新,去重时最好保留最新的那条记录,用下面的代码替换上述步骤中的去重部分:

// 按Incident分组,每组取CreatedTime最新的记录
去重表 = Table.Group(合并表, {"Incident"}, {
    {"最新记录", each Table.Sort(_, {{"CreatedTime", Order.Descending}}){0}, type record}
}),
// 把分组后的记录展开成列
展开表 = Table.ExpandRecordColumn(去重表, "最新记录", Table.ColumnNames(合并表))

注意点

  • 确认Incident是每个事件的唯一标识,如果不是,就换成多个字段组合(比如Incident+CreatedTime)作为去重依据
  • 每次刷新时,新拉取数据会自动获取最新90天数据,和历史数据合并后就是完整的全量数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:57:38