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

请求创建DAX度量值计算各组合与参考组合的权重差异

解决Power BI中投资组合与参考组合权重差异的DAX度量问题

问题背景

需要实现DAX度量,计算所有投资组合相对于切片器选定的参考组合的单证券权重差值。矩阵布局要求:

  • 行:投资组合(Portfolio)
  • 列:证券(Security)
  • 值:当前组合权重 - 参考组合权重

现有事实表Holdings包含字段:DATE、PORTFOLIO、SECURITY、WEIGHT,关联Calendar Table维度表。当前实现的度量无法正确计算差值,选择参考组合后,矩阵仅显示该参考组合的自身权重,而非与其他组合的差异。

现有数据示例

Holdings表

DATE    PORTFOLIO   SECURITY  WEIGHT
1/31/24 Portfolio A IBM       0.25
1/31/24 Portfolio A APPL      0.25
1/31/24 Portfolio A MSFT      0.25
1/31/24 Portfolio A C         0.25
1/31/24 Portfolio B IBM       0.15
1/31/24 Portfolio B APPL      0.35
1/31/24 Portfolio B MSFT      0.25
1/31/24 Portfolio B C         0.25
1/31/24 Portfolio C IBM       0.25
1/31/24 Portfolio C APPL      0.15
1/31/24 Portfolio C MSFT      0.35
1/31/24 Portfolio C C         0.25
1/31/24 Portfolio D IBM       -
1/31/24 Portfolio D APPL      0.25
1/31/24 Portfolio D MSFT      0.50
1/31/24 Portfolio D C         0.25
1/31/24 Portfolio E IBM       0.25
1/31/24 Portfolio E APPL      0.35
1/31/24 Portfolio E MSFT      0.15
1/31/24 Portfolio E C         0.25

期望输出(以Portfolio A为参考)

PORTFOLIO   IBM    APPL     MSFT    C
Portfolio A   -     -         -     -
Portfolio B (0.10) 0.10       -     -
Portfolio C   -   (0.10)    0.10    -
Portfolio D (0.25)   -      0.25    -
Portfolio E   -    0.10    (0.10)   -

当前实现的问题

现有度量无法正确计算差值,核心原因有两点:

  1. 切片器使用Holdings[PORTFOLIO],导致整个数据集被筛选为仅包含选定的参考组合,矩阵无法显示其他组合。
  2. Reference Portfolio (SELECTED)度量未清除行上下文的PORTFOLIO筛选,导致每个行的参考权重等于当前行组合的权重,差值始终为0(或错误显示自身权重)。

现有度量代码:

Security Weight = SUM(Holdings[Weight])

Selected Portfolio = SELECTEDVALUE(Holdings[PORTFOLIO])

Reference Portfolio (SELECTED) = 
CALCULATE(
[Security Weight],
FILTER(Holdings, Holdings[PORTFOLIO] = [Selected Portfolio]))

Weight Difference = [Security Weight] - [Reference Portfolio(SELECTED)]

修正方案

步骤1:创建独立的投资组合维度表

创建与Holdings表无直接筛选关系的独立Portfolio维度表,避免切片器直接过滤Holdings的行:

Portfolio Table = DISTINCT(Holdings[PORTFOLIO])

将该表用于切片器选择参考组合,原Holdings[PORTFOLIO]用于矩阵行。

步骤2:修正DAX度量

替换现有度量为以下代码:

// 基础权重求和度量
Security Weight = SUM(Holdings[Weight])

// 获取切片器选定的参考组合
Selected Reference Portfolio = SELECTEDVALUE('Portfolio Table'[PORTFOLIO])

// 计算参考组合的对应证券权重(清除行上下文的Portfolio筛选)
Reference Weight = 
CALCULATE(
    [Security Weight],
    ALL(Holdings[PORTFOLIO]), // 移除当前行的Portfolio筛选限制
    Holdings[PORTFOLIO] = [Selected Reference Portfolio]
)

// 计算权重差值,处理空值显示
Weight Difference = 
VAR CurrentWeight = [Security Weight]
VAR RefWeight = [Reference Weight]
RETURN
    IF(
        ISBLANK(CurrentWeight) && ISBLANK(RefWeight),
        BLANK(),
        CurrentWeight - RefWeight
    )

步骤3:矩阵设置

  • 行:Holdings[PORTFOLIO]
  • 列:Holdings[SECURITY]
  • 值:[Weight Difference]
  • 切片器:使用Portfolio Table[PORTFOLIO]选择参考组合

验证说明

  • 选择参考组合后,矩阵将显示所有组合与参考组合的权重差值,参考组合自身的差值为0(可通过条件格式设置为显示“-”)。
  • 对于无权重的证券(如Portfolio D的IBM),差值为0 - 0.25 = -0.25,对应输出(0.25),符合示例要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 15:37:02