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

DAX:如何为特定员工返回分组平均值?

我来帮你搞定这个DAX的问题~

问题场景梳理

你想要实现的核心需求是:为每个员工返回其所在Cycle+Group分组的平均Val值(仅统计Val>0的有效记录),哪怕单独筛选某一个员工,也要显示该员工所属分组的整体平均值,对吧?

你的现有度量值问题分析

先帮你指出原写法里的两处关键问题:

  1. Emp_AVG语法错误:CALCULATE的参数顺序和格式不对,AVERAGE只能接收列作为参数,筛选条件要放在CALCULATE的第二个参数位置,而且你少了闭合括号。
  2. Group_AVG逻辑错误:AVERAGEX的第一个参数必须是表对象,你直接传入度量值EmployeeFeedback[Emp_AVG]是不合法的;同时你没有移除EmployeeID的筛选上下文,导致筛选单个员工时,只会计算该员工自己的平均值,而非整个分组的。
正确的DAX实现方案

这里给你两种可行的实现方式,按需选择:

方案1:直接计算分组平均值(推荐,更简洁高效)

不需要拆分员工级度量值,一个度量值就能搞定需求:

Group_AVG = 
CALCULATE(
    AVERAGE(EmployeeFeedback[Val]),
    -- 保留Group和Cycle的分组上下文,移除EmployeeID的筛选限制
    ALLEXCEPT(EmployeeFeedback, EmployeeFeedback[Group], EmployeeFeedback[Cycle]),
    -- 仅统计Val大于0的有效记录
    EmployeeFeedback[Val] > 0
)

方案2:基于员工级度量值迭代计算

如果你一定要保留员工级的平均值度量,可以按以下步骤调整:
首先修正Emp_AVG:

Emp_AVG = 
CALCULATE(
    AVERAGE(EmployeeFeedback[Val]),
    EmployeeFeedback[Val] > 0
)

再编写Group_AVG,通过生成员工级平均值表来计算分组整体平均:

Group_AVG = 
VAR EmployeeLevelAVGTable = 
    SUMMARIZE(
        -- 锁定当前Group+Cycle的上下文,获取该分组下所有员工
        ALLEXCEPT(EmployeeFeedback, EmployeeFeedback[Group], EmployeeFeedback[Cycle]),
        EmployeeFeedback[EmployeeID],
        "@EmpAVG", [Emp_AVG]
    )
RETURN
    -- 迭代员工级平均值表,计算分组整体平均
    AVERAGEX(EmployeeLevelAVGTable, [@EmpAVG])
效果验证

把这个度量值放到你的可视化表格中,按EmployeeID、Cycle展示时,每个员工对应的Group_AVG都会显示其所属Cycle+Group的整体平均(比如你示例里A组Cycle1的平均是5.5,两个员工都会显示这个值);哪怕单独筛选某一个员工,也会返回该员工所在分组的平均值,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:42:08