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

如何修复DAX代码以在Power BI中生成目标客户流失矩阵?

Power BI同期群活跃客户矩阵DAX问题解决

需求说明

需要创建矩阵展示各同期群活跃客户数量随时间的变化:

  • 矩阵行:Calendar_table[Month & Year](日历表与订阅表为一对多关系)
  • 矩阵列:通过GENERATESERIES(0,11,1)生成的Months After列

尝试的DAX代码

Attempt1

Attempt1 =
VAR CohortStartMonth =
    SELECTEDVALUE ( Subscriptions_export[Join Month] )

VAR CurrentMonth =
    EOMONTH ( CohortStartMonth, SELECTEDVALUE ('Months After'[Value]))

RETURN

    CALCULATE (
        COUNTROWS ( VALUES(Subscriptions_export[Customer ID])),
        Subscriptions_export[CreatedatAtDate EOM] = CurrentMonth)

Attempt2

Attempt2=

CALCULATE(

    VAR minDate = MIN(Subscriptions_export[Join Month])
    VAR maxDate = CALCULATE(MAX(Subscriptions_export[Exit Month]), NOT(ISBLANK(Subscriptions_export[Exit Month])))

    RETURN
    COUNTROWS(
        FILTER(
            Subscriptions_export,
            Subscriptions_export[Join Month] >= minDate
            && Subscriptions_export[Exit Month] <= maxDate
        )
    )
)

问题现象

  • Attempt1仅在Months After=0的列显示数据,其余列无值
  • Attempt2所有Months After列均显示与0列相同的数值

问题分析与解决方案

核心问题

  1. Attempt1逻辑缺陷:仅匹配CreatedatAtDate EOM等于计算出的目标月份的记录,本质是统计当月新增客户而非活跃客户;且SELECTEDVALUE(Subscriptions_export[Join Month])无法在矩阵行上下文正确关联同期群起始月份。
  2. Attempt2逻辑缺陷:未结合Months After的列上下文计算日期范围,导致所有列使用相同筛选条件,结果完全一致。

正确DAX表达式

Cohort Active Customers =
VAR CohortMonth = SELECTEDVALUE(Calendar_table[Month & Year])
VAR MonthsOffset = SELECTEDVALUE('Months After'[Value])
VAR TargetMonth = EOMONTH(CohortMonth, MonthsOffset)
RETURN
CALCULATE(
    COUNTROWS(VALUES(Subscriptions_export[Customer ID])),
    -- 筛选属于当前同期群的客户(加入月份等于行上下文的同期群月份)
    Subscriptions_export[Join Month] = CohortMonth,
    -- 筛选目标月份仍活跃的客户:未退出 或 退出日期晚于目标月份
    OR(
        ISBLANK(Subscriptions_export[Exit Month]),
        Subscriptions_export[Exit Month] > TargetMonth
    ),
    -- 清除日历表的上下文筛选,确保目标月份的判断不受行上下文限制
    ALL(Calendar_table)
)

代码说明

  • CohortMonth:获取矩阵行对应的同期群起始月份(即客户加入的月份)
  • MonthsOffset:获取矩阵列对应的偏移月份(0-11)
  • TargetMonth:计算同期群起始月份加上偏移后的目标月份
  • 双重筛选确保统计的是对应同期群中在目标月份仍活跃的客户,ALL(Calendar_table)避免行上下文的日历月份干扰目标月份的判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:58:31