DAX计算平均值异常:如何获取父级ID的正确平均值?
解决Power BI中仅计算父级ID的Time平均值问题
问题分析
你的原DAX逻辑完全偏离需求:先计算所有行的Time平均值,再除以所有ID(父级+子级)的去重数量,这和你要的「仅取父级ID对应的Time值求平均」逻辑不符。正确思路应该是先筛选出父级ID的行,再计算这些行的Time平均值。
父级ID判断逻辑
根据你的描述,父级ID为纯数字(如1、2、3),子级ID包含字母(如...a、...b),可以用ISNUMBER(VALUE(Table1[ID]))筛选父级——子级ID转换为数值时会返回错误,该条件会自动排除子级。
修改后的DAX代码
方案1:直接筛选父级行计算平均
适用于每个父级ID仅对应一行数据的场景:
父级平均Time = CALCULATE( AVERAGE(Table1[Time]), FILTER( Table1, ISNUMBER(VALUE(Table1[ID])) ) )
方案2:先去重父级再计算平均
适用于父级ID对应多行数据,但同一父级的Time值唯一的场景:
父级平均Time = VAR 父级唯一集合 = SUMMARIZE( FILTER(Table1, ISNUMBER(VALUE(Table1[ID]))), Table1[ID], "对应Time", MAX(Table1[Time]) ) RETURN AVERAGEX(父级唯一集合, [对应Time])
结果验证
代入你的示例数据(104、86、151),上述代码会直接计算(104+86+151)/3 = 113.6,得到正确结果。
内容的提问来源于stack exchange,提问作者Socramvm
相关产品推荐
相关产品推荐

