如何用DAX计算指定筛选行占总计的百分比权重
解决方案:计算筛选后行值对总计的占比
原表数据
主表costs数据如下:
Acc Item Group Origin Money acc1 Item1 Adm Soc 14,3 acc2 Item1 Adm Soc 1,0 acc3 Item2 Pers Bnk 4,5 acc4 Item2 Pers Bnk -45,2 acc5 Item3 Amort Adj -745,7 acc6 Item4 Adm Adj 67,8 acc7 Item4 Amort Bnk 87,0 acc8 Item4 Adm Soc -200,0 acc9 Item5 Adm Bnk -34,0 acc10 Item6 Pers Bnk -23,0 acc11 Item4 Adm Adj -7,8 acc12 Item4 Adm Adj -745,0 acc13 Item4 Adm Adj -82,0 acc14 Item4 Adm Adj -14,0 acc15 Item4 Adm Adj -2,0
现有度量值
已创建度量值Var_neg_adm_adj,用于筛选Group="Adm"、Origin="Adj"且Money<0的记录并求和:
Var_neg_adm_adj= CALCULATE(SUM(Costs[Money]), FILTER(Costs, Costs[Group]="Adm"), FILTER(Costs, Costs[Origin]="Adj"), FILTER(Costs, Costs[Money] < 0) )
新增百分比度量值
创建如下度量值Percentage_Adm_Adj,计算每行数据对筛选后总计的占比:
Percentage_Adm_Adj = VAR TotalFiltered = [Var_neg_adm_adj] VAR CurrentRowValue = SUM(Costs[Money]) RETURN IF( AND(AND(Costs[Group] = "Adm", Costs[Origin] = "Adj"), Costs[Money] < 0), DIVIDE(ABS(CurrentRowValue), ABS(TotalFiltered), 0) * 100, BLANK() )
代码说明
TotalFiltered:调用现有度量值获取筛选后的总金额,取绝对值避免负号干扰占比计算CurrentRowValue:提取当前行的Money值DIVIDE:安全除法函数,第三个参数用于处理除数为0的情况- 外层
IF判断当前行是否符合筛选条件,符合则计算占比,否则返回空值 - 若要直接显示百分比格式,可在Power BI中设置该度量值的格式为「百分比」并调整小数位数
最终效果
将Percentage_Adm_Adj添加到可视化组件后,结果如下:
Acc Item group Origin Money Percentage acc11 Item4 Adm Adj -7,8 0,9% acc12 Item4 Adm Adj -745,0 87,5% acc13 Item4 Adm Adj -82,0 9,4% acc14 Item4 Adm Adj -14,0 1,64% acc15 Item4 Adm Adj -2,0 0,2% Total -850,8 100%
内容的提问来源于stack exchange,提问作者Chubiblan
相关产品推荐
相关产品推荐

