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

如何在DAX中计算每年纯新增客户数量(排除流失复购客户)

嘿,我来帮你解决这个DAX计算的难题——要统计每年真正的首次新增客户,排除那些流失后又复购的老客户,对吧?这确实不能直接拿两年的客户数相减,那样会把复购的误算成新增。下面是具体的解决思路和代码,保证精准满足你的需求:

核心解决思路

本质逻辑很简单:每个客户只在他首次产生交易的年份被统计为新增客户,后续无论是否复购都不再计入任何年份的新增。所以我们需要先定位每个客户的首次交易年份,再按年份统计对应首次年份的客户数量。

方法一:先建计算列,再做度量值(直观易理解)

这种方式适合新手快速上手,逻辑清晰:

1. 添加「首次购买年份」计算列

在你的销售数据表(比如命名为销售表)里新建一个计算列:

首次购买年份 = CALCULATE(
    MIN('销售表'[订单年份]),
    ALLEXCEPT('销售表', '销售表'[客户ID])
)
  • ALLEXCEPT('销售表', '销售表'[客户ID]):保留当前行的客户ID筛选规则,清除其他所有筛选,这样就能聚焦到该客户的所有订单记录。
  • MIN('销售表'[订单年份]):提取该客户所有订单里最早的年份,也就是他的首次购买年份。

2. 创建「纯新增客户数量」度量值

接着创建度量值来按年份统计符合条件的客户:

纯新增客户数量 = CALCULATE(
    DISTINCTCOUNT('销售表'[客户ID]),
    FILTER(
        ALL('销售表'),
        '销售表'[首次购买年份] = SELECTEDVALUE('日期表'[年份])
    )
)
  • SELECTEDVALUE('日期表'[年份]):获取当前图表或筛选器选中的目标年份。
  • 筛选出所有首次购买年份等于当前选中年份的客户,再用DISTINCTCOUNT统计去重后的客户数量。
方法二:单度量值直接计算(无需额外计算列)

如果不想增加数据表的计算列,也可以用一个度量值直接完成计算:

纯新增客户数量 = 
VAR 当前选中年份 = SELECTEDVALUE('日期表'[年份])
RETURN
CALCULATE(
    DISTINCTCOUNT('销售表'[客户ID]),
    FILTER(
        VALUES('销售表'[客户ID]),
        -- 计算当前客户的首次购买年份
        CALCULATE(MIN('销售表'[订单年份])) = 当前选中年份
    )
)
  • 用VAR定义当前选中年份,让代码结构更清晰易读。
  • VALUES('销售表'[客户ID]):获取所有不重复的客户ID列表。
  • 对每个客户单独计算他的首次购买年份,判断是否等于当前选中年份,只有符合条件的客户才会被统计。
逻辑验证示例

举个实际场景例子:

  • 客户A在2020年首次购买,2021年无交易(流失),2022年再次复购。
  • 用我们的方法,2020年的新增客户会包含A,2021和2022年都不会统计他,完全符合“纯首次新增”的要求。
  • 如果用两年客户数差值(比如2022年客户数 - 2021年客户数),会错误地把A算成2022年的新增客户,这正是我们要避免的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:20:45