Power BI中使用DAX从多表创建新表报错,求解决方案
解决DAX创建新表的报错问题
错误原因分析
你的公式存在两个核心问题:
SUMMARIZE以Assets表为上下文,但直接在分组列中引用Costs[Type Name],若两张表未建立正确的激活关系,或关系方向不匹配,DAX无法自动关联两张表的数据,导致上下文冲突报错。- 筛选条件中使用的
Assets[AssetsKEY]与分组列的Assets[AssetsSKEY]列名不一致,可能是笔误,若这并非同一列,筛选逻辑会出现偏差。
修正方案
方案1:使用 SUMMARIZECOLUMNS(推荐)
SUMMARIZECOLUMNS 是更现代、稳定的多表分组聚合函数,能自动处理表间关系:
NewTable = SUMMARIZECOLUMNS ( Assets[AssetsSKEY], 'Costs'[Type Name], // 筛选非空的AssetsSKEY(注意列名与分组列统一) FILTER(Assets, Assets[AssetsSKEY] <> BLANK()), "Forecast", SUM('Costs'[Forecast Costs]) )
方案2:修正 SUMMARIZE + ADDCOLUMNS 组合
若坚持使用 SUMMARIZE,需通过 RELATED 或 CALCULATE 明确关联另一表的数据:
NewTable = CALCULATETABLE ( ADDCOLUMNS ( // 先按Assets表的主键分组 SUMMARIZE(Assets, Assets[AssetsSKEY]), // 通过表间关系获取Costs表的Type Name(要求关系为一对多,Assets是一方) "Type Name", RELATED('Costs'[Type Name]), // 计算对应资产的成本总和 "Forecast", CALCULATE(SUM('Costs'[Forecast Costs])) ), // 筛选非空的资产主键 Assets[AssetsSKEY] <> BLANK() )
额外注意事项
- 检查表间关系:确保
Assets和Costs表已通过关联列(如AssetsSKEY)建立激活的关系,关系方向需符合业务逻辑(通常是Assets为一方,Costs为多方)。 - 列名一致性:确认
Assets[AssetsSKEY]和Assets[AssetsKEY]是否为同一列,若为笔误请统一修正列名。 - 多值处理:若一个
AssetsSKEY对应多个Type Name,需根据业务需求选择聚合方式(如用CONCATENATEX合并多值,或调整分组逻辑)。
内容的提问来源于stack exchange,提问作者JonWay
相关产品推荐
相关产品推荐

