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

Power BI DAX度量问题:_Adj Singles Sold无法在销售公司层级正确聚合

Power BI度量计算问题:已售单量余数的层级聚合错误

我正在计算已售单量(Singles Sold)与每箱单量(Singles per Box)的余数。当前的[Singles Sold]度量是对发票表中SINGLES_SOLD列的求和,但该计算在总量超过每箱单量时会“重复统计”单量。

现有度量代码:

[Singles Sold] = sum('[ INVOICE'[SINGLES_SOLD])

我写了用于计算余数的公式,这个公式在发票层级有效,但在销售公司层级的可视化组件中,无法正确聚合_Adj Singles Sold的求和值。试过添加RELATED函数但没用,求解决思路。

度量代码:

_Adj Singles Sold = 

VAR Singles_Per_Box = MAX('Product'[Singles per Box]) 
VAR Singles_Sold =  [Singles Sold] 
RETURN
    IF(Singles_Sold < Singles_Per_Box,
        Singles_Sold,
        if(Singles_Per_Box <> 0, 
        MOD(Singles_Sold, Singles_Per_Box),
         0)
    )

数据集表结构

发票事实表

发票编号产品ID公司ID已售单量
123P*1A*14
456P*2B*16
789P*3G*17

产品维度表

产品ID每箱单量
P*18
P*24
P*34

公司维度表

公司ID公司名称
A*1Alpha
B*1Beta
G*1Gamma

当前输出

公司名称_Adj Singles Sold已售单量
Alpha1511,951
Beta681,268
Gamma1801,080
总计2204,299

期望输出

公司名称_Adj Singles Sold已售单量
Alpha1,9001,951
Beta1,2001,268
Gamma1,0001,080
总计4,1004,299

解决思路

问题核心是当前度量在公司层级直接计算余数,但实际上应该先对每个发票行(最细粒度)计算余数,再向上聚合求和。原代码中MAX('Product'[Singles per Box])在公司层级会取该公司所有产品中最大的每箱单量,导致逻辑错误。

修改后的度量使用SUMX迭代发票表行,逐行计算调整值后汇总:

_Adj Singles Sold = 
SUMX(
    '[ INVOICE',
    VAR Singles_Per_Box = RELATED('Product'[Singles per Box])
    VAR Singles_Sold_Row = '[ INVOICE'[SINGLES_SOLD]
    RETURN
        IF(Singles_Sold_Row < Singles_Per_Box,
            Singles_Sold_Row,
            IF(Singles_Per_Box <> 0,
                MOD(Singles_Sold_Row, Singles_Per_Box),
                0
            )
        )
)

逻辑说明

  1. SUMX迭代发票表每一行,确保每个发票行都基于对应产品的每箱单量计算余数
  2. RELATED('Product'[Singles per Box])通过表间关联(Product ID)获取当前发票行对应产品的每箱单量
  3. 逐行计算调整后的单量,最后求和得到公司层级或总计的正确结果

该度量同时支持产品维度的正确聚合,因为它基于最细粒度的行计算后汇总。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 00:47:44