跳至主要内容

Power BI 客户分析:RFM 细分和终身价值

使用 DAX 公式在 Power BI 中实施 RFM 细分、群组分析、流失预测可视化、CLV 计算和客户旅程映射。

E
ECOSIRE Research and Development Team
|2026年3月23日7 分钟阅读1.2k 字数|

客户分析回答了每个企业都需要回答但很少有人能够准确回答的问题:哪些客户最有价值,哪些客户正在离开,以及我们应该采取什么措施?如果没有细分,营销就会一视同仁地对待每一位客户——同样的电子邮件、同样的优惠、同样的关注。去年消费 50,000 美元的客户将获得与单次购买 29 美元且从未退货的客户相同的假日折扣代码。

属于我们的数据分析与 BI系列

阅读完整指南

客户分析回答了每个企业都需要回答但很少有人能够准确回答的问题:哪些客户最有价值,哪些客户正在离开,以及我们应该采取什么措施?如果没有细分,营销就会一视同仁地对待每一位客户——同样的电子邮件、同样的优惠、同样的关注。去年消费 50,000 美元的客户将获得与单次购买 29 美元且从未退货的客户相同的假日折扣代码。

RFM(新近度、频率、货币)细分、群组分析、流失预测和客户终身价值 (CLV) 计算将原始交易数据转化为可操作的客户情报。 Power BI 提供了可视化和分析平台来大规模实施这些技术,将数百万条交易记录转化为分段、可评分且可操作的客户档案。

本指南涵盖了 Power BI 中客户分析的完整实施,从 RFM 评分的数据模型和 DAX 度量,到群组分析、客户流失可视化、CLV 计算和客户旅程映射。

要点

  • RFM 细分使用 DAX 五分位计算对每个客户进行三个维度(新近度、频率、货币价值)评分,生成可操作的细分,例如冠军、风险和迷失
  • 同类群组分析跟踪同一时期获得的客户群,以衡量其生命周期内的保留率、收入和行为
  • 用 Python 或 R 构建的流失预测模型可生成风险评分,Power BI 将其可视化为热图和排序列表,以便主动干预
  • 客户终身价值 (CLV) 可以使用历史(迄今为止的实际价值)、预测(预计的未来价值)或 DAX 中的组合方法来计算
  • Power BI 中的客户旅程映射可视化客户使用您的产品或服务的路径,揭示流失点和转化瓶颈
  • 客户分析的真正价值不在于指标本身,而在于它们所支持的细分行动——不同的细分市场需要根本不同的策略

客户分析数据模型

核心表

客户分析依赖于与客户身份相关的完整交易历史记录。

客户维度 (DimCustomer)。 客户主数据,包括 CustomerID、CustomerName、电子邮件、AcquisitionDate、AcquisitionSource(自然、付费、推荐、合作伙伴)、行业(针对 B2B)、地区、国家/地区、城市、AccountManager、CustomerTier(如果之前已细分)和 IsActive。

交易事实表(FactTransaction)。 每个购买事件。列包括 TransactionID、CustomerID、TransactionDate、OrderAmount、ItemCount、ProductCategory、PaymentMethod、Channel(在线、店内、电话)、DiscountAmount 和 IsReturn。

交互事实表 (FactInteraction)。 购买之外的客户接触点,包括支持票证、网站访问、电子邮件打开和应用程序登录。列包括 InteractionID、CustomerID、InteractionDate、InteractionType(购买、支持、email_open、email_click、website_visit、app_login)、渠道和持续时间。

日期维度 (DimDate)。 标准日期表。


RFM 分割

计算 RFM 分数

RFM 评分根据三个行为维度为每个客户分配一个分数。

新近度: 客户最近多久进行了购买?最近的购买次数越多表明参与度越高。

频率: 客户多久购买一次?频率越高表明忠诚度越高。

货币: 客户花了多少钱?支出越高表明价值越大。

每个维度均使用五分位数排名在 1--5 范围内进行评分。 RFM 分数为 5-5-5 的客户是您的最佳客户。 1-1-1 的分数表示您参与度最低。

Recency (Days) =
VAR LastPurchase =
    CALCULATE(
        MAX(FactTransaction[TransactionDate]),
        ALLEXCEPT(DimCustomer, DimCustomer[CustomerID])
    )
RETURN
    DATEDIFF(LastPurchase, TODAY(), DAY)

Frequency =
CALCULATE(
    COUNTROWS(FactTransaction),
    FactTransaction[IsReturn] = FALSE(),
    ALLEXCEPT(DimCustomer, DimCustomer[CustomerID])
)

Monetary =
CALCULATE(
    SUM(FactTransaction[OrderAmount]),
    FactTransaction[IsReturn] = FALSE(),
    ALLEXCEPT(DimCustomer, DimCustomer[CustomerID])
)

DAX 中的五分位数评分

五分位计算将每个客户分配到每个 RFM 维度的五个相等组之一。对于新近度,天数越短意味着得分越高(越新越好)。对于频率和货币,值越高意味着得分越高。

R Score =
VAR RecencyValue = [Recency (Days)]
VAR AllRecency =
    CALCULATETABLE(
        ADDCOLUMNS(
            SUMMARIZE(DimCustomer, DimCustomer[CustomerID]),
            "@Recency", [Recency (Days)]
        ),
        ALL(DimCustomer)
    )
VAR Pct20 = PERCENTILE.INC(SELECTCOLUMNS(AllRecency, "@Recency", [@Recency]), 0.20)
VAR Pct40 = PERCENTILE.INC(SELECTCOLUMNS(AllRecency, "@Recency", [@Recency]), 0.40)
VAR Pct60 = PERCENTILE.INC(SELECTCOLUMNS(AllRecency, "@Recency", [@Recency]), 0.60)
VAR Pct80 = PERCENTILE.INC(SELECTCOLUMNS(AllRecency, "@Recency", [@Recency]), 0.80)
RETURN
    SWITCH(
        TRUE(),
        RecencyValue <= Pct20, 5,
        RecencyValue <= Pct40, 4,
        RecencyValue <= Pct60, 3,
        RecencyValue <= Pct80, 2,
        1
    )

F Score =
VAR FreqValue = [Frequency]
VAR AllFreq =
    CALCULATETABLE(
        ADDCOLUMNS(
            SUMMARIZE(DimCustomer, DimCustomer[CustomerID]),
            "@Freq", [Frequency]
        ),
        ALL(DimCustomer)
    )
VAR Pct20 = PERCENTILE.INC(SELECTCOLUMNS(AllFreq, "@Freq", [@Freq]), 0.20)
VAR Pct40 = PERCENTILE.INC(SELECTCOLUMNS(AllFreq, "@Freq", [@Freq]), 0.40)
VAR Pct60 = PERCENTILE.INC(SELECTCOLUMNS(AllFreq, "@Freq", [@Freq]), 0.60)
VAR Pct80 = PERCENTILE.INC(SELECTCOLUMNS(AllFreq, "@Freq", [@Freq]), 0.80)
RETURN
    SWITCH(
        TRUE(),
        FreqValue >= Pct80, 5,
        FreqValue >= Pct60, 4,
        FreqValue >= Pct40, 3,
        FreqValue >= Pct20, 2,
        1
    )

M Score =
VAR MonValue = [Monetary]
VAR AllMon =
    CALCULATETABLE(
        ADDCOLUMNS(
            SUMMARIZE(DimCustomer, DimCustomer[CustomerID]),
            "@Mon", [Monetary]
        ),
        ALL(DimCustomer)
    )
VAR Pct20 = PERCENTILE.INC(SELECTCOLUMNS(AllMon, "@Mon", [@Mon]), 0.20)
VAR Pct40 = PERCENTILE.INC(SELECTCOLUMNS(AllMon, "@Mon", [@Mon]), 0.40)
VAR Pct60 = PERCENTILE.INC(SELECTCOLUMNS(AllMon, "@Mon", [@Mon]), 0.60)
VAR Pct80 = PERCENTILE.INC(SELECTCOLUMNS(AllMon, "@Mon", [@Mon]), 0.80)
RETURN
    SWITCH(
        TRUE(),
        MonValue >= Pct80, 5,
        MonValue >= Pct60, 4,
        MonValue >= Pct40, 3,
        MonValue >= Pct20, 2,
        1
    )

RFM Segment =
VAR R = [R Score]
VAR F = [F Score]
VAR M = [M Score]
RETURN
    SWITCH(
        TRUE(),
        R >= 4 && F >= 4 && M >= 4, "Champions",
        R >= 4 && F >= 3 && M >= 3, "Loyal Customers",
        R >= 3 && F >= 1 && M >= 3, "Potential Loyalists",
        R >= 4 && F <= 2 && M <= 2, "New Customers",
        R >= 3 && F >= 3 && M >= 3, "Promising",
        R >= 3 && F <= 2 && M <= 2, "Need Attention",
        R >= 2 && F >= 2 && M >= 2, "About to Sleep",
        R <= 2 && F >= 3 && M >= 3, "At Risk",
        R <= 2 && F >= 4 && M >= 4, "Cannot Lose Them",
        R <= 2 && F >= 2 && M >= 2, "Hibernating",
        "Lost"
    )

RFM 可视化

细分市场分布。 显示每个 RFM 细分市场中客户数量和总价值的树状图或水平条形图。这立即揭示了您的客户群的健康状况——大量的“冠军”部分是积极的;较大的“有风险”或“丢失”部分表明有麻烦。

RFM 散点图。 X 轴为频率、Y 轴为货币的散点图,按新近度得分着色。这个三维视图揭示了仅靠分段标签可能会错过的聚类和异常值。

细分行动矩阵。 将每个细分映射到建议行动的表格。

细分计数总价值建议行动
冠军847240 万美元奖励计划、抢先体验、推荐请求
忠实客户1,203180 万美元追加销售、忠诚度计划注册、评论
面临风险956120 万美元赢回活动、个人推广、特别优惠
不能失去他们31289 万美元直接个人联系,最高优先级保留
新客户1,67834 万美元入职顺序、二次购买激励
迷失2,34118 万美元低成本重新激活活动,尝试 2 次后日落

群组分析

建立群组指标

同类群组分析按客户获取周期(月或季度)对客户进行分组,并跟踪他们在后续周期的行为。这揭示了客户质量随着时间的推移是提高还是下降。

Acquisition Cohort =
FORMAT(
    CALCULATE(
        MIN(FactTransaction[TransactionDate]),
        ALLEXCEPT(DimCustomer, DimCustomer[CustomerID])
    ),
    "YYYY-MM"
)

Cohort Size =
CALCULATE(
    DISTINCTCOUNT(DimCustomer[CustomerID]),
    FILTER(
        ALL(DimCustomer),
        FORMAT(
            CALCULATE(MIN(FactTransaction[TransactionDate]),
                ALLEXCEPT(DimCustomer, DimCustomer[CustomerID])),
            "YYYY-MM"
        ) = SELECTEDVALUE(DimCohort[CohortMonth])
    )
)

Cohort Retention Rate =
VAR CohortMonth = SELECTEDVALUE(DimCohort[CohortMonth])
VAR PeriodNumber = SELECTEDVALUE(DimCohortPeriod[PeriodNumber])
VAR ActiveInPeriod =
    CALCULATE(
        DISTINCTCOUNT(FactTransaction[CustomerID]),
        -- Filter to customers from this cohort
        -- who transacted in the nth period after acquisition
    )
VAR OriginalSize = [Cohort Size]
RETURN
    DIVIDE(ActiveInPeriod, OriginalSize, 0)

群组保留矩阵

经典的队列保留矩阵是一个热图,其中行为队列月份,列为周期数(自获取以来的月份)。单元格值显示保留率,条件格式创建从深绿色(高保留率)到深红色(低保留率)的渐变。

阅读矩阵揭示了模式。跨行查看,了解每个群组随着时间的推移如何保留。向下查看各列,看看各个队列中特定任期点的保留率是否有所改善或恶化。所有最近群组中“第 3 个月”列的突然下降可能表明存在入职问题。连续群组中“第一个月”列的逐渐改善表明您的首次购买体验正在变得更好。

收入群组分析

除了保留率之外,还可以跟踪每个群组的收入以了解终生价值趋势。

Cohort Revenue =
CALCULATE(
    SUM(FactTransaction[OrderAmount]),
    -- Filtered to specific cohort and period
)

Cohort Revenue per Customer =
DIVIDE([Cohort Revenue], [Cohort Size], 0)

Cumulative Cohort Revenue =
-- Running total of cohort revenue across periods
CALCULATE(
    [Cohort Revenue],
    FILTER(
        ALL(DimCohortPeriod),
        DimCohortPeriod[PeriodNumber] <= MAX(DimCohortPeriod[PeriodNumber])
    )
)

将每个群组的累积收入可视化为重叠折线图,每条线代表一个群组。如果最近的群体比旧的群体有更陡峭的收入曲线,那么你的客户价值就会增加。如果它们变得平坦,平均客户价值就会下降。


流失预测可视化

定义流失

流失的定义取决于您的业务模式。对于订阅业务来说,流失就是取消。对于基于交易的业务,流失通常被定义为在规定的时间内(例如,平均购买间隔的两倍)内没有购买。

Average Purchase Interval =
AVERAGEX(
    DimCustomer,
    CALCULATE(
        VAR Transactions =
            CALCULATETABLE(
                VALUES(FactTransaction[TransactionDate]),
                ALLEXCEPT(DimCustomer, DimCustomer[CustomerID])
            )
        RETURN
            DIVIDE(
                DATEDIFF(MIN(FactTransaction[TransactionDate]), MAX(FactTransaction[TransactionDate]), DAY),
                COUNTROWS(Transactions) - 1,
                0
            )
    )
)

Is Churned =
VAR DaysSinceLastPurchase = [Recency (Days)]
VAR ChurnThreshold = [Average Purchase Interval] * 2
RETURN
    IF(DaysSinceLastPurchase > ChurnThreshold, TRUE(), FALSE())

Churn Rate =
DIVIDE(
    CALCULATE(COUNTROWS(DimCustomer), [Is Churned] = TRUE()),
    COUNTROWS(DimCustomer),
    0
)

流失风险可视化

如果您有一个预测模型(例如,使用 scikit-learn 用 Python 构建)可以输出每个客户的流失概率,请将这些分数导入 Power BI 并进行可视化。

流失风险分布。 显示客户群中流失概率分数分布的直方图。理想情况下,大多数客户聚集在低风险端,而高风险端的尾部较小。

高风险客户列表。 排序表显示流失概率最高的客户,以及他们的 RFM 细分、任期、上次购买日期和总生命周期价值。这是可操作的输出——保留团队每天都会处理这个列表。

按细分市场划分的流失风险。 按客户细分(行业、采购来源、产品类别)显示平均流失概率的条形图。这揭示了广泛的策略可以解决的系统性风险因素。

流失时间线。 显示 24 个月内每月流失率的折线图。添加目标流失率和行业基准的参考线。叠加营销活动日期以可视化保留计划的影响。


客户终身价值 (CLV)

历史 CLV

最简单的 CLV 计算将来自客户的所有历史收入相加。

Historical CLV =
CALCULATE(
    SUM(FactTransaction[OrderAmount]),
    FactTransaction[IsReturn] = FALSE(),
    ALLEXCEPT(DimCustomer, DimCustomer[CustomerID])
)

Average CLV =
AVERAGEX(
    DimCustomer,
    [Historical CLV]
)

CLV by Acquisition Source =
CALCULATE(
    AVERAGEX(DimCustomer, [Historical CLV])
)
-- Slice by DimCustomer[AcquisitionSource] in visualization

预测 CLV

预测 CLV 估计客户未来将产生的总收入。简化方法使用每个期间的平均收入乘以预期剩余寿命。

Avg Monthly Revenue =
VAR TotalRev = [Historical CLV]
VAR TenureMonths =
    DATEDIFF(
        CALCULATE(MIN(FactTransaction[TransactionDate]),
            ALLEXCEPT(DimCustomer, DimCustomer[CustomerID])),
        TODAY(),
        MONTH
    ) + 1
RETURN
    DIVIDE(TotalRev, TenureMonths, 0)

Expected Lifetime Months =
-- Based on segment retention rates
-- Champions: 48 months, Loyal: 36, At Risk: 6, etc.
SWITCH(
    [RFM Segment],
    "Champions", 48,
    "Loyal Customers", 36,
    "Potential Loyalists", 24,
    "Promising", 18,
    "At Risk", 6,
    "Cannot Lose Them", 12,
    3
)

Predictive CLV =
[Avg Monthly Revenue] * [Expected Lifetime Months]

Total CLV = [Historical CLV] + [Predictive CLV]

CLV 可视化

CLV 分布。 显示 CLV 在整个客户群中的分布的直方图。该形状揭示了价值是集中在少数鲸鱼客户(右偏)还是更均匀地分布。

按采集来源划分的 CLV。 比较跨采集渠道的平均 CLV 的条形图。这是最重要的营销指标,因为它揭示了昂贵的获取渠道(付费广告)是否确实比便宜的渠道(自然、推荐)产生更高价值的客户。

CLV 与 CAC。 X 轴为客户获取成本、Y 轴为 CLV 的散点图,每个点代表一个获取渠道或营销活动。盈亏平衡对角线上方的点是有利可图的;以下几点是无利可图的。与线的距离表示利润或损失的大小。

CLV 趋势。 跟踪一段时间内新人群的平均 CLV。如果新群体的平均 CLV 较低,您的客户质量可能会下降——可能是因为您正在向不合格的受众群体扩展。


客户旅程图

旅程阶段

Power BI 中的客户旅程映射可视化客户在您的产品或服务体验中所采取的路径。根据您的业务模型定义阶段。

对于电子商务企业,阶段可能包括首次访问、帐户创建、首次购买、第二次购买、忠诚度计划注册和宣传(推荐)。

对于 SaaS 业务,阶段可能包括试用注册、入职完成、首次功能采用、扩展(升级或附加)、续订和宣传。

旅程漏斗

Stage 1 (Visited) = DISTINCTCOUNT(FactInteraction[CustomerID])

Stage 2 (Account Created) =
CALCULATE(
    DISTINCTCOUNT(DimCustomer[CustomerID]),
    NOT(ISBLANK(DimCustomer[AcquisitionDate]))
)

Stage 3 (First Purchase) =
CALCULATE(
    DISTINCTCOUNT(FactTransaction[CustomerID]),
    FILTER(
        FactTransaction,
        RANKX(
            FILTER(FactTransaction, FactTransaction[CustomerID] = EARLIER(FactTransaction[CustomerID])),
            FactTransaction[TransactionDate],
            ,ASC
        ) = 1
    )
)

Stage Conversion =
DIVIDE([Stage 3 (First Purchase)], [Stage 2 (Account Created)], 0)

旅程可视化

桑基图。 Power BI 的自定义桑基视觉效果(来自 AppSource)显示阶段之间的客户流,分支宽度与客户量成正比。这不仅揭示了有多少客户在每个阶段取得进展,还揭示了他们的分歧所在——他们是跳过阶段、采取替代路径还是完全退出旅程?

客户时间线。 对于个人客户分析,按时间顺序显示每次交互的时间线视觉效果提供了完整的客户故事。这对于支持、销售和成功团队来说非常有价值,他们在与特定客户互动之前需要了解背景信息。

流失分析。 瀑布图显示每个旅程阶段的客户数量,并突出显示阶段之间的减少量。最大的减量确定了最关键的改进机会。如果 60% 的创建帐户的客户从未进行过购买,那么首次购买体验就是您的首要任务。


仪表板设计与实现

执行摘要页面

客户分析执行摘要应一目了然地回答五个问题。我们有多少活跃客户?数量是否在增长?我们在 RFM 细分市场中的客户分布情况如何?我们的整体流失率和趋势是怎样的?我们的平均 CLV 是多少?它是否有所改善?哪些获取渠道产生最有价值的客户?

使用 4--6 个 KPI 卡、细分分布图、客户流失趋势线以及按渠道进行的 CLV 比较。

细分深入页面

每个主要 RFM 细分市场都应该有一个钻取页面,显示包含关键指标的客户列表、该细分市场的行为模式(购买频率、平均订单价值、产品偏好)、该细分市场的收入贡献和趋势,以及跟踪行动结果的建议行动。

自助过滤

包括时间段、收购日期范围、客户区域、产品类别和收购来源的切片。这些使营销、销售和客户成功团队能够执行自己的分段分析,而无需请求自定义报告。


常见问题

我应该创建多少个 RFM 段?

经典方法每个维度使用 5 个五分位数,产生 125 种可能的 RFM 分数组合 (5 x 5 x 5)。然后将它们映射到 8--12 个命名段以供实际使用。可操作部分的确切数量取决于您区分治疗的能力。如果您的营销团队只能管理 4 个不同的营销活动,那么使用 12 个细分会造成复杂性而没有价值。从 5--6 个细分市场开始,并随着运营能力的增长而扩展。

如何计算订阅业务与交易业务的 CLV?

对于订阅业务,CLV = 每用户平均每月收入 (ARPU) 乘以以月为单位的平均客户生命周期,减去服务成本。客户生命周期的计算方式为 1 除以每月流失率。对于 3% 的每月流失率,平均生命周期为 33.3 个月。对于没有订阅的交易业务,CLV = 平均订单价值乘以每年的购买频率乘以平均客户生命周期(以年为单位)。交易方法需要定义什么构成“活跃”客户。

哪些数据质量问题通常会影响客户分析?

最常见的问题是重复的客户记录(同一个人具有多个 ID)、丢失交易数据(未捕获线下购买)、不完整的客户属性(缺少获取来源或人口统计数据)以及跨系统的日期格式不一致。通过主数据管理流程或模糊匹配解决重复问题。在捕获时实施数据验证。对于缺失的历史数据,请使用插补技术或将受影响的指标明确标记为近似值。

Power BI 可以自行构建流失预测模型吗?

Power BI 的内置 AI 视觉效果(关键影响因素、异常检测)可以识别与客户流失相关的因素,但对于生产级预测模型,请使用集成到 Power BI 中的 Python (scikit-learn) 或 R、具有已发布评分端点的 Azure 机器学习,或专用客户分析平台(如 Amplitude 或 Mixpanel)。 Power BI 的优势在于可视化模型输出并对其进行操作,而不是构建模型本身。

RFM 分数应该多久重新计算一次?

大多数企业每月重新计算 RFM 分数。高频交易业务(电子商务、食品配送)可能会受益于每周重新计算。刷新频率应与您的营销活动节奏相匹配——如果您只运行每月的活动,则每天重新计算是没有价值的。确保您的 Power BI 刷新计划与重新计算保持一致。

RFM段和CLV有什么关系?

RFM 细分与 CLV 密切相关,但衡量的内容不同。 RFM 是向后看的——它描述了当前的行为。 CLV 具有前瞻性——它估计未来价值。冠军通常拥有最高的 CLV。新客户的 CLV 不确定。处于风险中的客户具有较高的历史 CLV,但预测的未来价值正在下降。结合使用两者:RFM 用于战术细分(发送什么营销活动),CLV 用于战略决策(为获取和留住每个客户群而投资多少)。

如果“客户”是一家公司,我如何处理 B2B 客户分析?

在 B2B 分析中,客户实体通常是帐户(公司)而不是个人买家。 RFM 评分适用于使用账户级别交易数据的账户级别。但是,还可以跟踪帐户内的各个联系人以进行多线程分析。主要的 B2B 新增内容包括帐户健康评分(结合使用情况、支持票证、扩展和合同续订数据)、购买委员会映射和扩展收入跟踪(净美元保留)。数据模型需要具有多对多桥接表的客户和联系人维度。


专业的客户分析

客户分析将营销从直觉驱动的支出转变为数据驱动的投资。本指南中的技术(RFM 细分、群组分析、CLV 计算和流失预测)构成了客户智能功能的基础,随着数据的增长,其价值也会不断增加。

ECOSIRE 的 Power BI 服务 包括用于客户分析和细分的 仪表板开发、用于预测建模和客户流失预防的 AI 分析 以及用于构建自助分析功能的团队的培训。


最有价值的客户分析见解通常是最简单的:您最好的客户并不是您认为的那样。 RFM 评分揭示了那些持续购买但从不抱怨的安静忠诚者、那些因离开而带来不好经历的高风险鲸鱼,以及表现出成为冠军的早期信号的新客户。细分并不是对人进行分类,而是充分了解他们,以便为他们提供不同的服务。

E

作者

ECOSIRE Research and Development Team

技术写作

ECOSIRE 技术写作团队的内容涵盖 Odoo ERP、Shopify 电子商务、AI 智能体、Power BI 分析、GoHighLevel 自动化以及企业软件最佳实践。我们的指南帮助企业做出明智的技术决策。

ECOSIRE

解锁数据驱动决策

自定义 Power BI 仪表板、数据建模和嵌入式分析解决方案。