PowerBI中关联三表计算汽车单位价格的技术咨询
PowerBI 汽车单位价格计算问题解决方案
问题说明
现有三张数据表,需计算表A每行记录对应的汽车单位价格(单辆汽车的零件总成本),最终生成包含Year、Car、Quantity、Unit price、Total price的结果表:
- 表A:按年份统计的汽车销售数据
- 表B:各车型对应的零件及用量
- 表C:零件的年度价格(价格随购车年份变化)
表结构详情
表A
| Year | Car | Quantity |
|---|---|---|
| 2021 | A | 2 |
| 2021 | B | 3 |
| 2022 | A | 1 |
| 2023 | B | 4 |
表B
| Car | Part | Quantity |
|---|---|---|
| A | 1 | 5 |
| A | 2 | 14 |
| B | 1 | 7 |
| B | 3 | 9 |
| C | 2 | 25 |
表C
| Part | Year | Price |
|---|---|---|
| 1 | 2021 | 1 |
| 2 | 2021 | 3 |
| 3 | 2021 | 2 |
| 1 | 2022 | 4 |
| 2 | 2022 | 5 |
| 3 | 2022 | 7 |
| 1 | 2023 | 4 |
| 2 | 2023 | 7 |
| 3 | 2023 | 9 |
核心计算逻辑
以2021年车型A为例:
- 从表B获取车型A的零件用量:零件1(5个)、零件2(14个)
- 从表C获取2021年对应零件价格:零件1为1,零件2为3
- 单位价格 = (1×5) + (3×14) = 47
用户尝试的错误DAX代码
Measure = VAR Aux0 = ADDCOLUMNS(Table_C;"key_car_year";[Car]&"-"&[Year]) VAR Aux1 = ADDCOLUMNS(ADDCOLUMNS(CALCULATETABLE(Table_B;Table_B[Car]=[Car]);"Date";[Year]);"key_car_year";[Car]&"-"&[Year]) VAR Aux2 = ADDCOLUMNS(Aux1;"Price";LOOKUPVALUE(Aux0[Price];Aux0[key_car_year];Aux1[key_car_year])) RETURN SUM(Aux2[Price])
解决步骤
1. 建立正确的模型关系
在PowerBI模型视图中创建以下一对多关系:
- 表A[Year] ↔ 表C[Year](表A为一端)
- 表A[Car] ↔ 表B[Car](表A为一端)
- 表B[Part] ↔ 表C[Part](表B为一端)
2. 创建「单位价格」度量值
该度量值通过遍历表B的零件数据,匹配对应年份的零件价格并计算总成本:
单位价格 = SUMX( Table_B, Table_B[Quantity] * RELATED(Table_C[Price]) )
3. 创建「总价格」度量值
总价格为单位价格乘以表A的销售数量:
总价格 = [单位价格] * SELECTEDVALUE(Table_A[Quantity])
4. 生成结果表
将表A的Year、Car、Quantity字段,加上「单位价格」「总价格」度量值放入表格视觉对象,即可得到预期结果:
| Year | Car | Quantity | 单位价格 | 总价格 |
|---|---|---|---|---|
| 2021 | A | 2 | 47 | 94 |
| 2021 | B | 3 | 25 | 75 |
| 2022 | A | 1 | 90 | 90 |
| 2023 | B | 4 | 109 | 436 |
原代码错误分析
Aux0中引用[Car]字段,但表C不存在该字段,导致上下文识别错误CALCULATETABLE(Table_B;Table_B[Car]=[Car])中的[Car]上下文模糊,无法精准筛选对应车型的零件- 用
key_car_year匹配价格的逻辑错误,零件价格需同时匹配Part和Year,而非Car和Year
内容的提问来源于stack exchange,提问作者Ralk
相关产品推荐
相关产品推荐

