You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过父/子项目ID在事实表中计算最大营收的DAX问题

问题描述

现有两张表:

  • 维度表:存储父项目ID(Parent ID)与子项目ID(Sub ID)的关联关系
  • 事实表:存储子项目对应的营收数据(Revenue)

需求:针对每个父项目ID,计算其下属所有子项目的营收最大值,并将该最大值填充到该父项目的每一行中,最终效果如下:

Parent IDSub IDRevenueMax Revenue
1101100100
120125100
130150100
21027575
22025075
23024575

尝试过基于维度表父项目ID创建变量、使用MAXX函数按ID计算等方法,均未成功,寻求解决办法。

解决方案

一、DAX实现(Power BI/Excel Power Pivot)

确保维度表和事实表已通过Sub ID建立关联,创建计算列即可实现需求:

Max Revenue = 
CALCULATE(
    MAX('事实表'[Revenue]),
    ALLEXCEPT('维度表', '维度表'[Parent ID])
)

说明:

  • ALLEXCEPT('维度表', '维度表'[Parent ID]):保留当前行的Parent ID筛选条件,移除其他所有筛选,确保只计算当前父项目下所有子项目的营收
  • MAX('事实表'[Revenue]):在筛选范围内取营收最大值

如果是父项目到子项目的一对多关联,也可以用MAXX结合RELATEDTABLE实现:

Max Revenue = 
MAXX(
    RELATEDTABLE('事实表'),
    '事实表'[Revenue]
)

这个写法会自动匹配当前父项目对应的所有子项目营收,直接取最大值。

二、SQL实现

如果在数据库中处理,可通过分组聚合后关联原表的方式完成:

SELECT 
    d.Parent_ID,
    d.Sub_ID,
    f.Revenue,
    agg.Max_Revenue
FROM 维度表 d
JOIN 事实表 f ON d.Sub_ID = f.Sub_ID
JOIN (
    SELECT 
        d.Parent_ID,
        MAX(f.Revenue) AS Max_Revenue
    FROM 维度表 d
    JOIN 事实表 f ON d.Sub_ID = f.Sub_ID
    GROUP BY d.Parent_ID
) agg ON d.Parent_ID = agg.Parent_ID
ORDER BY d.Parent_ID, d.Sub_ID;

说明:

  1. 子查询agg先按Parent_ID分组,算出每个父项目下的营收最大值
  2. 将原维度表、事实表与子查询结果通过Parent_ID关联,把最大值填充到每一行

内容的提问来源于stack exchange,提问作者Befold

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 05:29:53