Power BI DAX问题:新客户计算度量值异常修复求助
修复Power BI新客户计算的DAX度量值
核心问题分析
原度量值存在两个关键问题:
Opp_sum错误使用ALL('Calendar for New Logo')移除了所有日历筛选,导致无法正确计算当前客户+当前日期的业务机会金额Running Total未按客户维度筛选,计算的是全局历史金额而非单个客户的历史数据,同时NewLogo未基于客户维度做判断,无法正确汇总
前提准备
确保模型关系正确:Calendar for New Logo的[Date]与Opportunity for new logo的业务机会日期字段(如[Opportunity Date])建立单向一对多关系,机会表为多端。
修复后的DAX度量值
1. 修复Opp_sum(当前客户当前日期的业务金额)
Opp_sum = CALCULATE( SUM('Opportunity for new logo'[Amount_USD for Closed and Commit]), -- 匹配当前日历表日期与机会表的业务日期 'Opportunity for new logo'[Opportunity Date] = MAX('Calendar for New Logo'[Date]) )
说明:保留客户上下文,仅计算当前客户在日历表所选日期的有效业务金额,避免全局汇总错误。
2. 修复Running Total(客户过去3年的历史业务金额)
Running Total - Previous 3 Years = VAR CurrentDate = MAX('Calendar for New Logo'[Date]) -- 计算当前日期往前推3年的起始日期 VAR Previous3YearStart = EDATE(CurrentDate, -36) -- 截止到当前日期的前一天(排除当前日期的业务) VAR PreviousDay = CurrentDate - 1 RETURN CALCULATE( SUM('Opportunity for new logo'[Amount_USD for Closed and Commit]), 'Opportunity for new logo'[Opportunity Date] >= Previous3YearStart, 'Opportunity for new logo'[Opportunity Date] <= PreviousDay, -- 移除日历表的日期筛选,保留客户维度的筛选 REMOVEFILTERS('Calendar for New Logo') )
说明:通过REMOVEFILTERS确保计算的是单个客户在过去3年到前一天的所有历史金额,而非全局数据。
3. 修复NewLogo(判断单个客户是否为新客户)
NewLogo = VAR CurrentAmount = [Opp_sum] VAR HistoricalAmount = [Running Total - Previous 3 Years] RETURN IF( -- 当前有有效业务,且过去3年无有效业务 CurrentAmount > 0 && HistoricalAmount = 0, 1, 0 )
4. 新增Total New Logos(汇总新客户总数)
Total New Logos = COUNTX( -- 按客户维度迭代,避免重复统计同一客户 VALUES('Opportunity for new logo'[Customer ID]), IF([NewLogo] = 1, 1) )
说明:通过COUNTX按客户ID迭代统计,确保每个符合条件的客户仅被计数一次,解决直接汇总NewLogo的上下文问题。
内容的提问来源于stack exchange,提问作者DianaS
相关产品推荐
相关产品推荐

