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 | 已售单量 |
|---|---|---|---|
| 123 | P*1 | A*1 | 4 |
| 456 | P*2 | B*1 | 6 |
| 789 | P*3 | G*1 | 7 |
产品维度表
| 产品ID | 每箱单量 |
|---|---|
| P*1 | 8 |
| P*2 | 4 |
| P*3 | 4 |
公司维度表
| 公司ID | 公司名称 |
|---|---|
| A*1 | Alpha |
| B*1 | Beta |
| G*1 | Gamma |
当前输出
| 公司名称 | _Adj Singles Sold | 已售单量 |
|---|---|---|
| Alpha | 151 | 1,951 |
| Beta | 68 | 1,268 |
| Gamma | 180 | 1,080 |
| 总计 | 220 | 4,299 |
期望输出
| 公司名称 | _Adj Singles Sold | 已售单量 |
|---|---|---|
| Alpha | 1,900 | 1,951 |
| Beta | 1,200 | 1,268 |
| Gamma | 1,000 | 1,080 |
| 总计 | 4,100 | 4,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 ) ) )
逻辑说明
SUMX迭代发票表每一行,确保每个发票行都基于对应产品的每箱单量计算余数RELATED('Product'[Singles per Box])通过表间关联(Product ID)获取当前发票行对应产品的每箱单量- 逐行计算调整后的单量,最后求和得到公司层级或总计的正确结果
该度量同时支持产品维度的正确聚合,因为它基于最细粒度的行计算后汇总。
内容的提问来源于stack exchange,提问作者Jake1204
相关产品推荐
相关产品推荐

