Power BI按分组计算客户连续消费年数
计算客户连续会员年数(年份中断时重置)
原始数据
| ID | Year |
|---|---|
| A | 2019 |
| A | 2020 |
| A | 2021 |
| A | 2022 |
| B | 2019 |
| B | 2021 |
| B | 2022 |
期望结果
| ID | Year | Yrs_Cust |
|---|---|---|
| A | 2019 | 0 |
| A | 2020 | 1 |
| A | 2021 | 2 |
| A | 2022 | 3 |
| B | 2019 | 0 |
| B | 2021 | 0 |
| B | 2022 | 1 |
实现方案(SQL)
通过窗口函数标记连续年份分组,再在分组内计算连续年数:
WITH ranked_data AS ( SELECT ID, Year, -- 为每个连续年份段生成唯一分组ID SUM(CASE WHEN Year = LAG(Year) OVER (PARTITION BY ID ORDER BY Year) + 1 THEN 0 ELSE 1 END) OVER (PARTITION BY ID ORDER BY Year) AS group_id FROM your_table ) SELECT ID, Year, -- 在分组内生成从0开始的连续计数 ROW_NUMBER() OVER (PARTITION BY ID, group_id ORDER BY Year) - 1 AS Yrs_Cust FROM ranked_data ORDER BY ID, Year;
逻辑说明
- 标记连续分组:用
LAG(Year) OVER (PARTITION BY ID ORDER BY Year)获取当前客户上一条记录的年份,判断当前年份是否是上一年的连续年份(差值为1)。如果不连续,则生成新的分组,通过SUM()累计得到每个连续段的group_id。 - 计算连续年数:在每个客户的每个连续分组内,用
ROW_NUMBER()生成递增序号,减1后得到从0开始的连续会员年数。
内容的提问来源于stack exchange,提问作者waealu
相关产品推荐
相关产品推荐

