PowerBI需求:计算客户首12个月营收及对应首尾月份
Power BI DAX 解决方案:客户首12个月营收统计
核心逻辑
基于事实表Sales和维度表Dates,实现客户首12个月营收的计算,并配合Year/Customer切片器完成动态显示控制:
- 仅在所选年份与客户首12个月周期重叠时,显示该客户数据
- 严格限定统计范围为客户首次销售起的连续12个月
步骤1:添加基础计算列(Sales表)
在Sales表中创建以下计算列,用于确定每个客户的首销周期:
首次销售月份
首次销售月份 = CALCULATE(MIN(Sales[Date]), ALLEXCEPT(Sales, Sales[Customer]))
首12个月结束月份
首12个月结束月份 = EDATE(Sales[首次销售月份], 11)
注:
EDATE函数自动处理跨年月计算,例如2024年7月加11个月将返回2025年6月
步骤2:创建核心度量值
1. 首12个月营收
首12个月营收 = VAR CurrentCustomer = SELECTEDVALUE(Sales[Customer]) VAR FirstSaleMonth = CALCULATE(MIN(Sales[Date]), ALLEXCEPT(Sales, Sales[Customer])) VAR LastMonthOfFirst12 = EDATE(FirstSaleMonth, 11) VAR SelectedYear = SELECTEDVALUE(Dates[Year]) VAR YearStart = DATE(SelectedYear, 1, 1) VAR YearEnd = DATE(SelectedYear, 12, 31) VAR IsOverlap = NOT(YearEnd < FirstSaleMonth || YearStart > LastMonthOfFirst12) RETURN IF( IsOverlap, CALCULATE( SUM(Sales[sales Value]), DATESBETWEEN(Dates[Date], FirstSaleMonth, LastMonthOfFirst12) ), BLANK() )
- 逻辑:判断所选年份与客户首12个月周期是否重叠,仅重叠时返回营收总额,否则返回空值(客户将自动隐藏)
2. 首12个月最后月份(格式化)
首12个月最后月份 = VAR FirstSaleMonth = CALCULATE(MIN(Sales[Date]), ALLEXCEPT(Sales, Sales[Customer])) VAR LastMonthOfFirst12 = EDATE(FirstSaleMonth, 11) RETURN FORMAT(LastMonthOfFirst12, "YYYY年MM月")
3. 首次销售月份(可选补充列)
首次销售月份_展示 = VAR FirstSaleMonth = CALCULATE(MIN(Sales[Date]), ALLEXCEPT(Sales, Sales[Customer])) RETURN FORMAT(FirstSaleMonth, "YYYY年MM月")
验证规则匹配
- 客户A(首销2024年1月):首12个月周期为2024.1-2024.12,当Year切片器选2025年时,无周期重叠,度量值返回空,客户A自动隐藏
- 客户B(首销2024年7月):首12个月周期为2024.7-2025.6,当Year切片器选2025年7月及以后时,日期超出周期范围,度量值返回空,客户B自动隐藏
报表设置
将表格视觉对象的筛选条件设置为:首12个月营收 ≠ 空白,确保仅显示符合条件的客户数据。
内容的提问来源于stack exchange,提问作者Samuel Begmetov
相关产品推荐
相关产品推荐

