如何用DAX计算忽略筛选的去重值总计百分比
修正DAX公式实现行占总计百分比
场景1:分母为整个数据集的固定总计(不受筛选影响)
如果需要不管怎么筛选,分母始终是所有数据的总和,修正公式如下:
% Grandtotal = VAR CurrentRowTotal = SUMX( DISTINCT('Combine Payroll + Payout'[EMP&KEY]), CALCULATE(SUM('Combine Payroll + Payout'[SBS])) ) VAR OverallTotal = CALCULATE( SUMX(DISTINCT('Combine Payroll + Payout'[EMP&KEY]), SUM('Combine Payroll + Payout'[SBS])), ALL('Combine Payroll + Payout') ) RETURN DIVIDE(CurrentRowTotal, OverallTotal, 0)
修正点说明:
- 用
SUMX迭代唯一的EMP&KEY,确保每个员工的SBS只被计算一次,避免重复行导致的数值错误 - 分母同样用
SUMX+DISTINCT计算全局唯一员工的SBS总和,保证和分子的统计逻辑一致 - 使用
DIVIDE函数避免除零错误,第三个参数为除零时的默认返回值(此处设为0)
场景2:分母为当前筛选上下文的总计(随筛选变化,比如筛选部门后分母为该部门的总计)
如果需要分母随外部筛选(如部门、时间等)动态变化,仅移除当前行EMP&KEY的筛选,修正公式如下:
% Grandtotal = VAR CurrentRowTotal = SUMX( DISTINCT('Combine Payroll + Payout'[EMP&KEY]), CALCULATE(SUM('Combine Payroll + Payout'[SBS])) ) VAR FilteredTotal = CALCULATE( SUMX(DISTINCT('Combine Payroll + Payout'[EMP&KEY]), SUM('Combine Payroll + Payout'[SBS])), ALLSELECTED('Combine Payroll + Payout'[EMP&KEY]) ) RETURN DIVIDE(CurrentRowTotal, FilteredTotal, 0)
修正点说明:
- 替换
ALL为ALLSELECTED('Combine Payroll + Payout'[EMP&KEY]),仅移除当前行员工的筛选,保留其他维度(如部门)的筛选条件 - 统一分子和分母的统计逻辑,避免因重复行导致的计算偏差
内容的提问来源于stack exchange,提问作者Toan Dang
相关产品推荐
相关产品推荐

