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

如何在分类内计算度量值的平均值?DAX公式场景示例

按分类计算度量值平均值的DAX解决方案

嘿,我来帮你捋清楚这个DAX计算的问题~首先,你当前用的公式Margem Média País = AVERAGEX(Clientes;[Margem Líquida *])逻辑是对的——它会先筛选出当前国家下的所有客户,计算每个客户的「Margem Líquida *」度量值,再对这些客户级别的结果取算术平均,所以在国家层级能正常运行。不过你提到后续有未完整描述的问题,我猜大概率是层级钻取时结果不符合预期,或者是计算逻辑和实际需求不匹配,下面分场景给你解决方案:

一、如果你的需求是「按国家计算有交易客户的边际值平均值」

当前公式会把所有关联到该国家的客户都算进去,哪怕有些客户没有任何交易记录(这时候他们的「Margem Líquida *」可能是空白或0)。如果要排除这些无交易的客户,修改公式如下:

Margem Média País = 
AVERAGEX(
    -- 只保留有交易记录的客户
    FILTER(Clientes, CALCULATE(COUNT(Vendas[ID Venda])) > 0),
    [Margem Líquida *]
)

二、如果你的需求是「按国家计算所有交易的边际值平均值」

如果实际想要的是国家下每一笔交易的边际值的平均(而不是客户级别的平均),那应该遍历事实表Vendas而不是Clientes:

Margem Média País (交易级) = 
AVERAGEX(
    Vendas,
    [Margem Líquida *]
)

*注:如果「Margem Líquida 」是直接基于交易行计算的列(不是度量值),也可以简化为AVERAGE(Vendas[Margem Líquida]),但用AVERAGEX适配度量值的场景更通用。

三、解决层级钻取的结果异常问题

如果钻取到客户层级时,这个度量值显示的是该客户的边际值(这其实是正常的,因为AVERAGEX遍历单个客户时平均就是自身),但你希望非国家层级返回空白或其他逻辑,可以用ISINSCOPE来控制:

Margem Média País = 
IF(
    -- 仅在国家层级计算客户平均
    ISINSCOPE(Geo[País]),
    AVERAGEX(
        FILTER(Clientes, RELATED(Geo[País]) = SELECTEDVALUE(Geo[País])),
        [Margem Líquida *]
    ),
    IF(
        -- 客户层级直接显示自身边际值
        ISINSCOPE(Clientes[Cliente]),
        [Margem Líquida *],
        -- 其他层级返回空白
        BLANK()
    )
)

额外检查点

别忘了确认你的数据模型关系是否正确:

  • Geo表和Clientes表之间要有基于País字段的关联(通常是1对多)
  • Clientes表和Vendas事实表之间要有基于Cliente字段的关联(1对多)
    只有关系正确,筛选上下文才能正确传递,保证计算结果准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:59:40