使用DIVIDE+LOOKUPVALUE度量值计算单位面积成本的问题
问题需求
现有两张表:
表1(项目面积表)
Project Area A1 5 A2 7 A3 4 B1 9 B2 6 B3 8
表2(项目成本表)
Project Cost category total cost A1 Z1 100 A1 Z2 200 A2 Z1 400 A3 Z1 300 A3 Z2 250 A3 Z3 300 B1 Z1 350 B1 Z2 200 B2 Z1 180 B2 Z2 320 B3 Z1 400 B3 Z3 200
需要计算每个项目及**每个区域(Project字段前缀A/B)**的单位面积成本,期望输出如下:
按项目汇总输出
Output, grand total per project Project Grand total cost cost per sqm A1 300 60 A2 400 57 A3 850 213 B1 550 61 B2 500 83 B3 600 75
按区域汇总输出
Output, grand total per zone Project Grand total cost cost per sqm A 1550 97 B 1650 72
尝试的度量值及问题
我尝试编写的度量值如下:
cost per sqm = DIVIDE( SUM('Table 2'[total cost]), LOOKUPVALUE('Table 1'[Area],'Table 1'[Project],'Table 2'[Project]) )
逻辑是项目维度下用总成本/对应面积,区域维度下用总成本总和/总面积,但给LOOKUPVALUE套SUM后无法生效,求解决方法。
解决方案
步骤1:建立表间关系
在Power BI中,将表1的Project字段与表2的Project字段建立一对多关系(表1为一端,表2为多端),这是实现维度自动匹配的基础。
步骤2:编写正确的单位面积成本度量值
利用表间关系,直接用SUM汇总面积,替代LOOKUPVALUE:
cost per sqm = DIVIDE( SUM('Table 2'[total cost]), SUM('Table 1'[Area]) )
- 当筛选维度为单个项目时,
SUM('Table 1'[Area])自动取该项目对应的面积,计算结果为项目总成本/项目面积; - 当筛选维度为区域(如A/B)时,
SUM('Table 1'[Area])会汇总该区域下所有项目的面积总和,计算结果为区域总成本/区域总面积,完全匹配需求。
替代方案(无法建立关系时)
若因数据问题无法建立表间关系,可使用SUMX迭代计算总面积:
cost per sqm = DIVIDE( SUM('Table 2'[total cost]), SUMX( VALUES('Table 2'[Project]), LOOKUPVALUE('Table 1'[Area], 'Table 1'[Project], 'Table 2'[Project]) ) )
SUMX会迭代当前筛选上下文下的所有Project值,逐个查找对应面积并求和,得到当前维度的总面积。
区域维度的补充实现
如果数据中没有单独的区域字段,可在表1中新建计算列提取区域前缀:
Zone = LEFT('Table 1'[Project], 1)
将该列作为筛选维度,即可得到按区域汇总的结果。
内容的提问来源于stack exchange,提问作者tam
相关产品推荐
相关产品推荐

