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

基于Power Pivot的保单续保/失效状态识别及净损失比率需求

在Power Pivot中区分已续保与已失效保单的方法

刚好之前处理过类似的多年份保险单数据场景,给你分享几个贴合你需求的实用方法,帮你快速区分已续保和已失效的保单:

核心判断逻辑先理清

根据你描述的情况,保单的状态本质看最后一次投保的状态:

  • 如果某保单最新的记录状态是「活跃」,说明一直在续保,属于「已续保」保单
  • 如果最新记录状态是「过期」,说明后续没有再续保,属于「已失效」保单
  • 之前的多次过期记录都是历史续保痕迹,不用作为最终状态判断依据

方法一:用计算列标记每条记录的归属

步骤1:计算每个保单的最新投保年份

先新建一个计算列,获取每个保单最后一次投保的年份:

最新投保年份 = CALCULATE(MAX('保险单列表'[投保年份]), ALLEXCEPT('保险单列表', '保险单列表'[保单号]))

这个公式的作用是:固定当前行的保单号,计算该保单所有记录里的最大投保年份,也就是最后一次续保的时间。

步骤2:标记保单最终状态

再新建一个计算列,根据最新年份和当前状态判断:

保单最终状态 = 
IF(
    '保险单列表'[投保年份] = '保险单列表'[最新投保年份] && '保险单列表'[状态] = "活跃",
    "已续保",
    IF(
        '保险单列表'[投保年份] = '保险单列表'[最新投保年份] && '保险单列表'[状态] = "过期",
        "已失效",
        "历史续保记录"
    )
)

这样每条记录都会被标记:

  • 最新年份的活跃记录 → 已续保
  • 最新年份的过期记录 → 已失效
  • 其余历史记录 → 历史续保记录(方便你过滤或区分)

方法二:直接生成保单状态汇总表(更高效)

如果只需要统计每个保单的最终状态,不用每条记录都标记,可以直接新建一个计算表:

保单状态汇总 = 
SUMMARIZE(
    '保险单列表',
    '保险单列表'[保单号],
    "最终状态",
    VAR 最新状态 = CALCULATE(MAX('保险单列表'[状态]), ALLEXCEPT('保险单列表', '保险单列表'[保单号]))
    RETURN IF(最新状态 = "活跃", "已续保", "已失效")
)

这个表会直接输出每个保单号对应的最终状态,省去后续过滤的步骤,非常适合做整体的净损失比率统计。


额外提示

如果你的数据里「活跃」状态只出现在最新的记录里(就像你举的例子那样),其实可以简化逻辑:只要某保单存在「活跃」状态的记录,就判定为已续保;反之所有记录都是过期的,就是已失效。对应的DAX列可以写成:

保单状态 = 
VAR 存在活跃记录 = CALCULATE(COUNTROWS('保险单列表'), ALLEXCEPT('保险单列表', '保险单列表'[保单号]), '保险单列表'[状态] = "活跃") > 0
RETURN IF(存在活跃记录, "已续保", "已失效")

这个更简洁,适合数据规则比较统一的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:12:08