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

Power BI编写DAX度量值正确统计各国分类型奥运奖牌数

问题说明
  • 已导入奥运会赛事CSV数据集,字段包含国家、运动员姓名、举办年份、运动大项、赛事小项、奖牌类型、奥运举办城市
  • 核心统计规则:制作各国各类型奖牌数量柱状图时,排球、足球等团队项目奖牌仅计1枚,不按队内运动员人数重复累加
  • 最初尝试通过去重Event列、删除运动员列新建计算表的方案可行,但不想额外配置表间关系,因此选择DAX度量值实现方案
  • 最初编写的度量值可正确返回截至2012年奥运历史总奖牌数14753,但筛选上下文完全失效:任意国家、任意奖牌类型筛选下均返回总计数14753,无法匹配当前筛选维度统计对应结果
原度量值失效原因

原公式Medal count = COUNTX(CALCULATETABLE(ALLEXCEPT('summer (3)','summer (3)'[Athlete]),DISTINCT('summer (3)'[Event])),'summer (3)'[Medal])的核心错误是ALLEXCEPT函数使用逻辑颠倒:
ALLEXCEPT('表名','保留筛选的列')的作用是移除表中除指定列外所有列的筛选上下文,原公式仅保留了[Athlete]列的筛选,直接清空了国家、奖牌类型、年份等所有需要参与筛选的维度的筛选条件,因此无论外部筛选器选什么值,计算范围始终是全量数据集。

修正后的度量值

统计逻辑:在当前筛选上下文范围内,对唯一奖牌事件去重计数——同一团队项目的所有运动员记录,在「年份+举办城市+运动大项+赛事小项+国家+奖牌类型」维度上的值完全一致,去重后仅计数1次,同时完整保留所有外部筛选的生效能力。

Medal count = 
COUNTROWS(
    DISTINCT(
        SELECTCOLUMNS(
            -- 先过滤掉未获得奖牌的空记录,避免无效计数
            FILTER('summer (3)', NOT(ISBLANK('summer (3)'[Medal]))),
            "Event_Key",
            'summer (3)'[Year] & "|" &
            'summer (3)'[City] & "|" &
            'summer (3)'[Sport] & "|" &
            'summer (3)'[Event] & "|" &
            'summer (3)'[国家] & "|" & -- 此处替换为你数据集里实际的国家字段名
            'summer (3)'[Medal]
        )
    )
)
使用说明
  • 若数据集内已有每个奖牌事件对应的唯一ID字段,可直接简化为Medal count = DISTINCTCOUNT('summer (3)'[唯一事件ID]),无需拼接多列生成唯一键
  • 该度量值自动继承所有筛选上下文:按国家筛选、按奖牌类型筛选、按年份筛选均会正常生效,无需额外配置
  • 无需新建计算表,不存在额外表间关系配置成本,直接将度量值放入柱状图的值字段,X轴拖入国家字段、图例拖入奖牌类型字段即可生成正确图表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:33:21