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

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类别内容。

错误排查与修正思路

  1. 职业生涯年限计算逻辑错误
    原代码中Longevity使用ALLEXCEPT ( 'netflix', 'Netflix'[cast] ),计算的是该演员所有作品的年限跨度,而非需求要求的导演自身的职业生涯年限,直接导致分母基准错误。

  2. 分母重复累加问题
    原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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:27:43