DAX解决PowerPivot多对多关系下付费方泵分摊数量计算问题
Excel PowerPivot:按付费方分摊泵数量的DAX解决方案
需求回顾
需要计算各付费方按房间分摊比例承担的泵数量:
- P1:Room1的2台泵 × 70% = 1.4
- P2:Room1的2台泵×30% + Room3的1台泵×100% = 1.6
问题分析
你之前插入唯一房间表后,度量值仅计算了「房间数量×分摊比例」,未关联房间内的泵数量,导致结果不符合预期。以下提供两种可行方案:
方案一:生成Room匹配的关联计算表
通过DAX创建计算表,将Table1的泵记录与Table2的付费记录按Room关联,直观展示每条泵对应的分摊比例,便于后续分析:
Pump_Payer_Allocation = FILTER( CROSSJOIN(Table1, Table2), Table1[Room] = Table2[Room] && Table1[Kategory] = "Pump" )
说明:
CROSSJOIN生成两表的笛卡尔积FILTER筛选出Room匹配且设备类型为Pump的记录- 基于此表,按
Payer汇总Percent列即可得到各付费方的分摊泵数量(每条泵记录对应一次比例,SUM后自动累加为泵数×比例)
方案二:直接用度量值实现(无需新建表)
适合保留原有数据模型结构的场景,直接通过度量值计算分摊数量:
Pump_Share_Per_Payer = SUMX( Table2, CALCULATE( COUNTROWS(Table1), Table1[Room] = Table2[Room], Table1[Kategory] = "Pump" ) * Table2[Percent] )
说明:
SUMX遍历Table2中每个「付费方-房间」组合CALCULATE计算当前房间内的泵数量- 将泵数量乘以该组合的分摊比例,最后累加所有组合的结果,得到付费方总分摊数
原度量值问题说明
你之前的Share:=CALCULATE(SUM(Table2[Percent]);Table1)仅传递了Table1的上下文,计算的是付费方对应房间的比例之和,未关联房间内的泵数量,因此得到的是「房间数×比例」而非「泵数×比例」。
内容的提问来源于stack exchange,提问作者T C
相关产品推荐
相关产品推荐

