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

在DAX中复刻Excel数组公式:按销售额加权计算层级Value值

DAX 层级加权Value计算解决方案

核心逻辑

加权汇总的本质是Σ(子项销售额 × 子项Value) ÷ 父层级总销售额,通过这个公式可实现不同层级按销售额占比加权计算Value的需求。

基础度量值(先确保基础数据计算正确)

  • 销售额度量:
    Sales = SUM(Table2[Sales])
    
  • 区域级Value度量:
    Area Value = SUM(Table1[Value])
    

分层级加权度量值

1. 子品类(Sub Category)层级加权Value

Weighted Value (Sub Category) = 
DIVIDE(
    // 分子:遍历每个区域,计算销售额×对应Value的总和
    SUMX(VALUES(Table1[Area]), [Sales] * [Area Value]),
    // 分母:当前子品类下的总销售额(清除区域筛选,保留子品类筛选)
    CALCULATE([Sales], ALL(Table1[Area]))
)

2. 品类(Category)层级加权Value

直接基于区域数据计算更高效:

Weighted Value (Category) = 
DIVIDE(
    // 分子:当前品类下所有区域的销售额×Value总和
    SUMX(VALUES(Table1[Area]), [Sales] * [Area Value]),
    // 分母:当前品类下的总销售额(清除区域、子品类筛选,保留品类筛选)
    CALCULATE([Sales], ALL(Table1[Area], Table1[Sub Category]))
)

自适应多层级的统一度量值

如果需要一个度量自动适配Area/Sub Category/Category层级,可使用ISINSCOPE判断上下文:

Weighted Value = 
VAR CurrentContext =
    SWITCH(
        TRUE(),
        // 区域层级直接返回区域Value
        ISINSCOPE(Table1[Area]), [Area Value],
        // 子品类层级计算加权值
        ISINSCOPE(Table1[Sub Category]),
            DIVIDE(
                SUMX(VALUES(Table1[Area]), [Sales] * [Area Value]),
                CALCULATE([Sales], ALL(Table1[Area]))
            ),
        // 品类层级计算加权值
        ISINSCOPE(Table1[Category]),
            DIVIDE(
                SUMX(VALUES(Table1[Area]), [Sales] * [Area Value]),
                CALCULATE([Sales], ALL(Table1[Area], Table1[Sub Category]))
            ),
        BLANK()
    )
RETURN CurrentContext

关键说明

  • 原公式SUMX(Table1, Value)仅做了Value的直接求和,未引入销售额权重,因此无法得到加权结果;AVERAGEX是简单算术平均,不考虑销售额占比,不符合需求。
  • 使用DIVIDE而非直接除法,可避免总销售额为0时的错误,返回BLANK()更友好。
  • 确保Table1与Table2通过Area、Sub Category、Category字段建立正确的关联关系,上下文筛选才能生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:31:11