Power BI中DAX计算支付成功率结果一致的修复方案咨询
Power BI DAX表达式修复方案
你的DAX表达式结果全部相同,核心问题是没有利用当前行的上下文筛选维度,且GROUPBY的用法错误——当前代码计算的是全局范围内所有成功实例数除以总实例数,而非每行对应timestamp/weekDay/Hour维度下的成功率。
以下是两种针对性修复方案:
方案1:利用现有列直接计算(最简便)
你的表已包含SuccessEvents(成功事件数)和FailedEvents(失败事件数),直接基于这两个列计算即可:
PymntSuccessRate = DIVIDE( [SuccessEvents], [SuccessEvents] + [FailedEvents], 0 )
- 第三个参数
0用于处理除数为0的场景,避免报错。
方案2:基于eventType和addPymntCardInstance计算(适配业务需求)
如果必须用addPymntCardInstance的总和来计算成功率,需通过变量锁定当前行的维度值,再筛选对应范围的数据:
PymntSuccessRate = VAR CurrentTimestamp = [timestamp] VAR CurrentWeekDay = [weekDay] VAR CurrentHour = [Hour] VAR SuccessTotal = CALCULATE( SUM( Payment_Methods[addPymntCardInstance] ), Payment_Methods[eventType] = "Success", Payment_Methods[timestamp] = CurrentTimestamp, Payment_Methods[weekDay] = CurrentWeekDay, Payment_Methods[Hour] = CurrentHour ) VAR Total = CALCULATE( SUM( Payment_Methods[addPymntCardInstance] ), Payment_Methods[timestamp] = CurrentTimestamp, Payment_Methods[weekDay] = CurrentWeekDay, Payment_Methods[Hour] = CurrentHour ) RETURN DIVIDE( SuccessTotal, Total, 0 )
- 通过变量锁定当前行的维度参数,确保
CALCULATE只统计对应维度下的实例数,每行结果独立。
原表达式错误细节
原代码中的GROUPBY是对全表按维度分组,SUMX内的SUM无上下文限制,最终计算的是所有分组的总和比值(全局成功率),因此所有行结果一致。
内容的提问来源于stack exchange,提问作者user_dhrn
相关产品推荐
相关产品推荐

