使用RANKX计算注册满3个月用户的综合评分需求
用户评分计算DAX实现方案(排除注册不足3个月用户)
需求说明
- 评分公式:
用户评分 = 销售额排名 * 0.75 + 奖金排名 * 0.25 - 排名依据:6月至7月的销售额/奖金增长率(上月相对前上月的百分比增长,当前统计时间为8月)
- 用户范围:仅包含**注册满3个月(不含当月)**的用户,即注册日期需早于统计当月(8月)往前推3个月的首日(5月1日)
数据模型
Users表结构
user_id name registration_date
Sales表结构
month_code – 格式为YYYYMM的年月 user_id sale bonus
期望输出格式
| 用户名称 | 销售额 | 奖金 | 平均评分 |
|---|---|---|---|
| 示例用户 | 1000000 | 2000000 | 1.3 |
解决方案(DAX度量值)
1. 定义符合条件的用户集合
先筛选出注册满3个月的用户,用于后续排名计算:
符合条件的用户 = FILTER( ALL(Users), // 动态获取当前月份,计算注册日期距当前超过3个月 DATEDIFF(Users[registration_date], TODAY(), MONTH) > 3 // 若需固定统计8月,可替换为: // DATEDIFF(Users[registration_date], DATE(2024, 8, 1), MONTH) > 3 )
2. 计算销售额/奖金增长率
销售额增长率
销售额增长率 = VAR 7月销售额 = CALCULATE(SUM(Sales[sale]), Sales[month_code] = 202407) VAR 6月销售额 = CALCULATE(SUM(Sales[sale]), Sales[month_code] = 202406) RETURN DIVIDE(7月销售额 - 6月销售额, 6月销售额, 0) // 用DIVIDE避免除零错误
奖金增长率
奖金增长率 = VAR 7月奖金 = CALCULATE(SUM(Sales[bonus]), Sales[month_code] = 202407) VAR 6月奖金 = CALCULATE(SUM(Sales[bonus]), Sales[month_code] = 202406) RETURN DIVIDE(7月奖金 - 6月奖金, 6月奖金, 0)
3. 计算排除无效用户后的排名
销售额排名
销售额排名 = RANKX( [符合条件的用户], CALCULATE([销售额增长率]), , DESC, DENSE // DESC表示增长率越高排名越靠前,DENSE为密集排名,可按需改为SKIP )
奖金排名
奖金排名 = RANKX( [符合条件的用户], CALCULATE([奖金增长率]), , DESC, DENSE )
4. 计算最终用户评分
用户评分 = VAR 有效销售额排名 = [销售额排名] VAR 有效奖金排名 = [奖金排名] RETURN IF( NOT ISBLANK(有效销售额排名) && NOT ISBLANK(有效奖金排名), 有效销售额排名 * 0.75 + 有效奖金排名 * 0.25, BLANK() // 排除无有效数据的用户 )
内容的提问来源于stack exchange,提问作者Brooly
相关产品推荐
相关产品推荐

