DAX计算异常:导演-演员合作电影年均值结果偏差求助
DAX代码排查修正:导演与演员合作电影年均数量计算错误
需求
计算每位导演职业生涯年限内,与各演员合作电影的年均数量(不修改原始数据或使用计算列)。
现有DAX代码
AvgMoviesLong = VAR T1 = SUMMARIZE ( FILTER ( 'netflix', [director] <> BLANK () && [cast] <> BLANK () && [show_id] <> BLANK () && [director] <> [cast] && RELATED('Content'[category]) = "Movie" ), 'netflix'[director], 'netflix'[cast], "Longevity", CALCULATE ( MAX ( 'Content'[release_year] ) - MIN ( 'Content'[release_year] ) + 1, ALLEXCEPT ( 'netflix', 'Netflix'[cast] ) ), "# of movies", COUNT ( 'netflix'[cast] ) ) RETURN DIVIDE ( SUMX ( T1, [# of movies] ), SUMX ( T1, [Longevity] ) )
问题
当前计算结果为0.04,正确值应为0.67,结果比正确值小15-20倍,需排查修正逻辑错误。
已知条件
- 已过滤导演、演员、show_id为空的数据;
- 仅统计Movie类别内容。
错误排查与修正思路
职业生涯年限计算逻辑错误
原代码中Longevity使用ALLEXCEPT ( 'netflix', 'Netflix'[cast] ),计算的是该演员所有作品的年限跨度,而非需求要求的导演自身的职业生涯年限,直接导致分母基准错误。分母重复累加问题
原RETURN部分将所有导演-演员对的年限直接求和,导致同一导演的职业生涯年限被重复计算(每合作一个演员就累加一次),分母被大幅放大,最终结果被严重拉低。
修正后的DAX代码
根据需求,提供两种常见场景的修正方案:
版本1:计算所有导演-演员对的年均合作数的平均值
AvgMoviesLong = VAR T1 = SUMMARIZE ( FILTER ( 'netflix', [director] <> BLANK () && [cast] <> BLANK () && [show_id] <> BLANK () && [director] <> [cast] && RELATED('Content'[category]) = "Movie" ), 'netflix'[director], 'netflix'[cast], "DirectorLongevity", // 计算当前导演的职业生涯年限 CALCULATE ( MAX ( 'Content'[release_year] ) - MIN ( 'Content'[release_year] ) + 1, ALLEXCEPT ( 'netflix', 'Netflix'[director] ) ), "CollabMovies", COUNT ( 'netflix'[show_id] ) // 用show_id计数更准确,避免cast重复统计 ) RETURN AVERAGEX ( T1, DIVIDE ( [CollabMovies], [DirectorLongevity] ) )
版本2:计算总合作电影数除以所有导演的职业生涯年限总和(每个导演只算一次年限)
AvgMoviesLong = VAR T1 = SUMMARIZE ( FILTER ( 'netflix', [director] <> BLANK () && [cast] <> BLANK () && [show_id] <> BLANK () && [director] <> [cast] && RELATED('Content'[category]) = "Movie" ), 'netflix'[director], 'netflix'[cast], "CollabMovies", COUNT ( 'netflix'[show_id] ) ) VAR DirectorLongevities = SUMMARIZE ( FILTER('netflix', [director] <> BLANK () && RELATED('Content'[category]) = "Movie"), 'netflix'[director], "TotalLongevity", MAX('Content'[release_year]) - MIN('Content'[release_year]) + 1 ) RETURN DIVIDE ( SUMX ( T1, [CollabMovies] ), SUMX ( DirectorLongevities, [TotalLongevity] ) )
内容的提问来源于stack exchange,提问作者ADesign
相关产品推荐
相关产品推荐

