Power BI中使用Switch函数计算利润表小计的问题
问题描述
我有一个固定格式的表格,通过SWITCH公式对不同行执行差异化计算。为表格行分配了3种计算类型:
- 1:汇总基础数据
- 2:汇总管理费用总额(作为上方两行的小计,独立于类型3的计算)
- 3:累计总额
当前使用的度量值如下:
Financial Value = var SelectedCalcType = SELECTEDVALUE('管理账目结构表'[计算类型]) RETURN SWITCH(SelectedCalcType, 1,[总金额], 2,[管理费用总额], 3,[累计总金额], BLANK() )
各依赖度量值定义:
总金额 = SUM('总账分录查询表'[借贷金额])
管理费用总额 = [人员相关成本]+[其他管理成本]
人员相关成本 = CALCULATE([总金额],'科目映射查询表'[管理费用大类]="人员相关成本")
其他管理成本的定义类似,仅筛选条件改为"其他管理成本"。
目前计算类型1和3均正常工作,但类型2无法正确显示小计,需要解决如何在Power BI中正确呈现该类小计。
问题原因
当计算类型2的行时,矩阵的当前上下文会携带管理账目结构表中该行的筛选条件,导致人员相关成本和其他管理成本里的CALCULATE无法突破当前行筛选,无法正确汇总对应管理费用大类的总额。
解决方案
通过清除管理账目结构表的筛选上下文,让CALCULATE能正确获取全局范围内的对应类别数据,有两种修改方式:
方式1:修改基础成本度量值
调整人员相关成本和其他管理成本的DAX,添加ALL('管理账目结构表')清除筛选:
人员相关成本 = CALCULATE( [总金额], '科目映射查询表'[管理费用大类]="人员相关成本", ALL('管理账目结构表') )
其他管理成本 = CALCULATE( [总金额], '科目映射查询表'[管理费用大类]="其他管理成本", ALL('管理账目结构表') )
方式2:在SWITCH分支中处理
直接在Financial Value的类型2分支里用CALCULATE清除筛选:
Financial Value = var SelectedCalcType = SELECTEDVALUE('管理账目结构表'[计算类型]) RETURN SWITCH(SelectedCalcType, 1,[总金额], 2,CALCULATE([管理费用总额], ALL('管理账目结构表')), 3,[累计总金额], BLANK() )
原理说明
ALL('管理账目结构表')会移除当前上下文对该表的所有筛选,让内部的度量值计算回到不受当前行限制的全局上下文,从而正确汇总出人员相关成本和其他管理成本的总额,最终得到管理费用小计。
内容的提问来源于stack exchange,提问作者Jason M
相关产品推荐
相关产品推荐

