# 会员资产全景活跃会员数分析 **分析日期**:2025年1月 **分析问题**:会员资产全景里面的活跃会员数,是否包含女神卡进来 --- ## 一、问题分析 ### 1.1 活跃会员数的计算逻辑 **位置**:`LqReportService.cs` 第1478行 **SQL查询**: ```sql SUM(CASE WHEN F_LastVisitTime IS NOT NULL AND DATEDIFF(NOW(), F_LastVisitTime) <= 30 THEN 1 ELSE 0 END) as ActiveMembers30d ``` **计算规则**: - 从 `lq_khxx` 表中统计 - 条件:`F_IsEffective = 1` 且 `khlx = '3'`(会员类型为会员) - 判断标准:`F_LastVisitTime` 不为空,且距离当前时间 <= 30天 --- ### 1.2 F_LastVisitTime 的更新逻辑 **位置**:`LqKhxxService.cs` 第2813-2822行 **SQL查询**: ```sql LEFT JOIN ( -- 到店天数、首次到店时间、最后到店时间 SELECT xh.hy as MemberId, COUNT(DISTINCT DATE(xh.hksj)) as VisitDays, MIN(xh.hksj) as FirstVisitTime, MAX(xh.hksj) as LastVisitTime FROM lq_xh_hyhk xh WHERE xh.F_IsEffective = 1 GROUP BY xh.hy ) visit ON kh.F_Id = visit.MemberId ``` **更新逻辑**(第2858行): ```sql kh.F_LastVisitTime = visit.LastVisitTime ``` --- ## 二、关键发现 ### 2.1 问题确认 **结论**:✅ **活跃会员数包含了女神卡会员** **原因分析**: 1. **F_LastVisitTime 的计算没有排除女神卡** - 查询 `lq_xh_hyhk`(耗卡记录表)时,**没有过滤女神卡** - 条件只有:`xh.F_IsEffective = 1`(有效记录) - **没有** `px != '61'` 或类似的排除条件 2. **活跃会员数的判断基于 F_LastVisitTime** - 活跃会员数 = `F_LastVisitTime IS NOT NULL AND DATEDIFF(NOW(), F_LastVisitTime) <= 30` - 由于 `F_LastVisitTime` 包含了女神卡的耗卡记录,所以活跃会员数也包含了女神卡会员 --- ### 2.2 对比其他统计逻辑 **其他统计中排除女神卡的例子**: 1. **生美/医美/科美会员判断**(第2781、2795、2809行): ```sql AND pxmx.px != '61' -- 排除女神卡 ``` 2. **会员类型判断**(第2985行): ```csharp && pxmx.Px != "61") // 排除女神卡 ``` 3. **开单升单逻辑**(`LqKdKdjlbService.cs` 多处): ```csharp && pxmx.Px != "61" // 排除女神卡 ``` **结论**:在其他业务逻辑中,女神卡(品项编号 `61`)通常被排除,但**活跃会员数的计算没有排除女神卡**。 --- ## 三、数据影响 ### 3.1 当前行为 - ✅ 如果会员只有女神卡的耗卡记录,且最后耗卡时间在30天内,会被统计为活跃会员 - ✅ 如果会员有其他品项的耗卡记录,也会被统计为活跃会员(无论是否有女神卡) ### 3.2 潜在问题 1. **数据准确性**: - 女神卡通常被认为是"体验卡"或"引流卡",可能不应该计入活跃会员 - 如果业务要求排除女神卡,当前逻辑会导致数据不准确 2. **业务一致性**: - 其他统计(如生美/医美/科美会员)都排除了女神卡 - 活跃会员数不排除女神卡,可能导致数据不一致 --- ## 四、修复建议 ### 4.1 如果需要排除女神卡 **方案一:在 F_LastVisitTime 计算时排除女神卡** 修改 `LqKhxxService.cs` 第2813-2822行的SQL: ```sql LEFT JOIN ( -- 到店天数、首次到店时间、最后到店时间(排除女神卡) SELECT xh.hy as MemberId, COUNT(DISTINCT DATE(xh.hksj)) as VisitDays, MIN(xh.hksj) as FirstVisitTime, MAX(xh.hksj) as LastVisitTime FROM lq_xh_hyhk xh WHERE xh.F_IsEffective = 1 -- 排除女神卡的耗卡记录 AND NOT EXISTS ( SELECT 1 FROM lq_xh_pxmx pxmx WHERE pxmx.glkdbh = xh.F_Id AND pxmx.F_IsEffective = 1 AND pxmx.px = '61' AND ( -- 如果耗卡记录的所有品项都是女神卡,则排除 (SELECT COUNT(*) FROM lq_xh_pxmx pxmx2 WHERE pxmx2.glkdbh = xh.F_Id AND pxmx2.F_IsEffective = 1) = (SELECT COUNT(*) FROM lq_xh_pxmx pxmx3 WHERE pxmx3.glkdbh = xh.F_Id AND pxmx3.F_IsEffective = 1 AND pxmx3.px = '61') ) ) GROUP BY xh.hy ) visit ON kh.F_Id = visit.MemberId ``` **方案二:在活跃会员数计算时排除女神卡** 修改 `LqReportService.cs` 第1478行的SQL: ```sql SUM(CASE WHEN F_LastVisitTime IS NOT NULL AND DATEDIFF(NOW(), F_LastVisitTime) <= 30 -- 排除只买了女神卡的会员 AND NOT EXISTS ( SELECT 1 FROM lq_kd_kdjlb kd INNER JOIN lq_kd_pxmx pxmx ON kd.F_Id = pxmx.glkdbh WHERE kd.kdhy = lq_khxx.F_Id AND kd.F_IsEffective = 1 AND pxmx.F_IsEffective = 1 AND pxmx.px != '61' HAVING COUNT(*) = 0 ) THEN 1 ELSE 0 END) as ActiveMembers30d ``` --- ### 4.2 如果不需要排除女神卡 **保持现状**: - 当前逻辑认为:只要有耗卡记录(包括女神卡),且在30天内,就算活跃会员 - 这可能是业务需求,需要与业务方确认 --- ## 五、验证方法 ### 5.1 验证SQL **查询只买了女神卡的活跃会员**: ```sql -- 查询只买了女神卡且在30天内活跃的会员 SELECT kh.F_Id, kh.Khmc, kh.F_LastVisitTime, DATEDIFF(NOW(), kh.F_LastVisitTime) as DaysSinceLastVisit FROM lq_khxx kh WHERE kh.F_IsEffective = 1 AND kh.khlx = '3' AND kh.F_LastVisitTime IS NOT NULL AND DATEDIFF(NOW(), kh.F_LastVisitTime) <= 30 -- 只买了女神卡的会员 AND EXISTS ( SELECT 1 FROM lq_kd_pxmx pxmx1 INNER JOIN lq_kd_kdjlb kd1 ON pxmx1.glkdbh = kd1.F_Id WHERE pxmx1.px = '61' AND pxmx1.F_IsEffective = 1 AND kd1.F_IsEffective = 1 AND kd1.Kdhy = kh.F_Id ) AND NOT EXISTS ( -- 排除那些有非女神卡品项的会员 SELECT 1 FROM lq_kd_pxmx pxmx2 INNER JOIN lq_kd_kdjlb kd2 ON pxmx2.glkdbh = kd2.F_Id WHERE kd2.Kdhy = kh.F_Id AND pxmx2.F_IsEffective = 1 AND kd2.F_IsEffective = 1 AND pxmx2.px != '61' ) LIMIT 10; ``` --- ## 六、结论 ### 6.1 当前状态 ✅ **活跃会员数包含了女神卡会员** **原因**: - `F_LastVisitTime` 的计算没有排除女神卡的耗卡记录 - 活跃会员数的判断基于 `F_LastVisitTime`,因此包含了女神卡会员 ### 6.2 建议 1. **与业务方确认**:是否需要排除女神卡会员 2. **如果需要排除**:按照方案一或方案二进行修复 3. **如果不需要排除**:保持现状,但需要在文档中明确说明 --- **分析完成时间**:2025年1月 **分析状态**:✅ **已完成**