Power BI DAX:含权重的有效数据占比计算参数错误求助
带权重的DAX比例计算修正
原始数据表格
field | category | count | weight --------------------------------- fname | valid | 23 | 2 fname | invalid | 16 | 2 mname | valid | 18 | 1 lname | valid | 5 | 2 addre | valid | 15 | 1
最初的无权重计算逻辑及DAX
最初需求是计算valid分类的count总和占所有count总和的比例,DAX公式如下:
VAR numerator = CALCULATE( SUM(table[count]), table[category] = "valid" ) VAR denominator= CALCULATE ( SUM ( table[count] ) ) VAR ratio = numerator/denominator
需求更新:加入权重计算
需要调整为按count*weight的乘积求和来计算比例:
- 分子:所有
valid分类的count*weight乘积之和 - 分母:所有记录的
count*weight乘积之和
错误公式分析
你编写的DAX出现参数错误,问题出在SUMX的使用逻辑上——SUMX第一个参数必须是表对象,第二个参数是针对表中每行的计算表达式,你把筛选条件和计算逻辑的位置搞反了。
// 错误示例 VAR numerator= SUMX ( CALCULATE(table[count] * table[Weight] ), table[category] = "valid" ) VAR denominator= CALCULATE ( SUM ( table[count] * table[Weight] ) ) VAR ratio = numerator/denominator
修正后的DAX公式
方案一:CALCULATE结合SUMX实现分子筛选
VAR numerator = CALCULATE( SUMX(table, table[count] * table[weight]), table[category] = "valid" ) VAR denominator = SUMX(table, table[count] * table[weight]) VAR ratio = DIVIDE(numerator, denominator, 0) // 用DIVIDE规避除零异常 RETURN ratio
方案二:直接用FILTER筛选后计算(逻辑更直观)
VAR numerator = SUMX( FILTER(table, table[category] = "valid"), table[count] * table[weight] ) VAR denominator = SUMX(table, table[count] * table[weight]) VAR ratio = DIVIDE(numerator, denominator, 0) RETURN ratio
补充说明
- 两种方案均能正确计算带权重的比例,方案二通过
FILTER直接筛选出valid行再计算,逻辑更清晰 - 使用
DIVIDE替代直接除法,可处理分母为0的异常场景,返回指定默认值(示例中设为0)
内容的提问来源于stack exchange,提问作者budding pro
相关产品推荐
相关产品推荐

