基于其他列聚合值创建Power BI条件列
在Power BI中基于年度累计积分添加Tier分层列
根据你的需求,这里提供两种在Power BI中实现的方案,可根据实际场景选择:
方案一:使用DAX计算列
先计算每个applicantID对应Promo Year的累计积分,再基于积分区间划分Tier:
- 添加计算列计算年度累计积分:
年度累计积分 = CALCULATE( SUM('你的数据表名'[Points Earned]), ALLEXCEPT('你的数据表名', '你的数据表名'[applicantID], '你的数据表名'[Promo Year]) )
- 替换
你的数据表名为实际表名称 ALLEXCEPT函数会保留当前行的applicantID和Promo Year筛选上下文,计算该用户对应年份的总积分
- 添加Tier计算列:
Tier = SWITCH( TRUE(), [年度累计积分] >= 2000, "Tier 1", [年度累计积分] >= 1000, "Tier 2", [年度累计积分] >= 500, "Tier 3", "Tier 4" )
- 可根据实际业务需求调整积分阈值和对应的Tier等级
方案二:使用Power Query预处理数据
如果希望在数据加载阶段完成计算,减少DAX运行压力,可通过Power Query实现:
- 打开Power Query编辑器,选中你的数据集
- 执行分组操作:
- 分组依据选择
applicantID和Promo Year - 操作选「求和」,目标列选
Points Earned,命名为「年度累计积分」
- 分组依据选择
- 将原表与分组后的表通过
applicantID和Promo Year进行左连接 - 添加条件列,根据「年度累计积分」设置Tier规则,对应的M代码示例:
let 源 = Sql.Database("你的SQL服务器地址", "目标数据库名"), 原始数据表 = 源{[Schema="dbo",Item="你的表名"]}[Data], // 分组计算年度累计积分 分组计算 = Table.Group(原始数据表, {"applicantID", "Promo Year"}, {{"年度累计积分", each List.Sum([Points Earned]), type number}}), // 合并原表与分组结果 合并数据表 = Table.NestedJoin(原始数据表, {"applicantID", "Promo Year"}, 分组计算, {"applicantID", "Promo Year"}, "分组数据", JoinKind.LeftOuter), 展开累计积分列 = Table.ExpandTableColumn(合并数据表, "分组数据", {"年度累计积分"}, {"年度累计积分"}), // 添加Tier列 添加Tier列 = Table.AddColumn(展开累计积分列, "Tier", each if [年度累计积分] >= 2000 then "Tier 1" else if [年度累计积分] >= 1000 then "Tier 2" else if [年度累计积分] >= 500 then "Tier 3" else "Tier 4" ) in 添加Tier列
- 替换代码中的服务器地址、数据库名和表名称为实际信息
- 同样可根据需求调整Tier的积分阈值
内容的提问来源于stack exchange,提问作者Lucas Correa
相关产品推荐
相关产品推荐

