求仅在前3个月/最近3个月产生收入的客户营收总和(DAX)
计算两类客户的营收总和
基于你提供的现有DAX度量,我们可以通过提取日期范围、筛选客户维度来实现需求。以下是分步解决方案:
1. 提取周期起止日期(复用逻辑,避免重复代码)
先创建四个度量,分别定义两个周期的起止日期,方便后续复用:
-- Preceding 3 Month 周期起始日期 Preceding Period Start = VAR var1 = LASTDATE('Sales'[ShortDate]) VAR var2 = EDATE(var1, -2) VAR var3 = CALCULATE(MIN(Dates[FinancialPeriodNo]), Dates[ShortDate] = var2) VAR var4 = CALCULATE(MIN(Dates[CANUSAFinancialYearNo]), Dates[ShortDate] = var2) VAR var5 = EDATE(CALCULATE(MIN(Dates[ShortDate]), Dates[FinancialPeriodNo] = var3 && Dates[FinancialYearNo] = var4), -1) VAR var6 = EDATE(var5, -2) RETURN var6
-- Preceding 3 Month 周期结束日期 Preceding Period End = VAR var1 = LASTDATE('Sales'[ShortDate]) VAR var2 = EDATE(var1, -2) VAR var3 = CALCULATE(MIN(Dates[FinancialPeriodNo]), Dates[ShortDate] = var2) VAR var4 = CALCULATE(MIN(Dates[CANUSAFinancialYearNo]), Dates[ShortDate] = var2) VAR var5 = EDATE(CALCULATE(MIN(Dates[ShortDate]), Dates[FinancialPeriodNo] = var3 && Dates[FinancialYearNo] = var4), -1) VAR var7 = CALCULATE(MIN(Dates[FinancialPeriodNo]), Dates[ShortDate] = var5) VAR var8 = CALCULATE(MAX(Dates[ShortDate]), Dates[FinancialPeriodNo] = var7 && Dates[FinancialYearNo] = var4) RETURN var8
-- Last 3 Month 周期起始日期 Last Period Start = VAR var1 = LASTDATE('Sales'[ShortDate]) VAR var2 = EDATE(var1, -2) VAR var3 = CALCULATE(MIN(Dates[FinancialPeriodNo]), Dates[ShortDate] = var2) VAR var4 = CALCULATE(MIN(Dates[CANUSAFinancialYearNo]), Dates[ShortDate] = var2) VAR var5 = CALCULATE(MIN(Dates[ShortDate]), Dates[FinancialPeriodNo] = var3 && Dates[FinancialYearNo] = var4) RETURN var5
-- Last 3 Month 周期结束日期 Last Period End = LASTDATE('Sales'[ShortDate])
2. 简化原有营收度量(可选,优化代码结构)
基于上面的日期度量,你可以简化原有的两个营收度量,让逻辑更清晰:
Preceding 3 Month Revenue = CALCULATE( SUM(Sales[RevenueGBP]), FILTER(ALL('Sales'), Sales[ShortDate] <= [Preceding Period End] && Sales[ShortDate] >= [Preceding Period Start] ) )
Last 3 Month Revenue = CALCULATE( SUM(Sales[RevenueGBP]), FILTER(ALL('Sales'), Sales[ShortDate] <= [Last Period End] && Sales[ShortDate] >= [Last Period Start] ) )
3. 计算目标客户营收总和
仅Preceding 3 Month有营收的客户总营收
Only Preceding 3 Month Revenue = CALCULATE( SUM(Sales[RevenueGBP]), -- 筛选出仅Preceding周期有营收的客户 FILTER( VALUES(Customers[CustomerID]), -- 替换为你的客户唯一标识列(如客户编号) [Preceding 3 Month Revenue] > 0 && [Last 3 Month Revenue] = 0 ), -- 限定Preceding周期的日期范围 Sales[ShortDate] <= [Preceding Period End] && Sales[ShortDate] >= [Preceding Period Start] )
仅Last 3 Month有营收的客户总营收
Only Last 3 Month Revenue = CALCULATE( SUM(Sales[RevenueGBP]), -- 筛选出仅Last周期有营收的客户 FILTER( VALUES(Customers[CustomerID]), -- 替换为你的客户唯一标识列 [Preceding 3 Month Revenue] = 0 && [Last 3 Month Revenue] > 0 ), -- 限定Last周期的日期范围 Sales[ShortDate] <= [Last Period End] && Sales[ShortDate] >= [Last Period Start] )
关键说明
- 务必将
Customers[CustomerID]替换为你数据模型中实际的客户唯一标识字段(比如Customer[CustomerKey]或Customer[CustomerName])。 - 如果不需要保留原有度量的复杂嵌套逻辑,使用提取后的日期度量可以大幅提升代码的可维护性。
内容的提问来源于stack exchange,提问作者Olayemi
相关产品推荐
相关产品推荐

