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

Power BI自定义列引用自身前值:Value C计算实现问询

解决方案:在Power BI中实现按月重置的累积乘积列(Value C)

这个需求完全可行,不需要直接引用正在创建的列,利用DAX的迭代函数和分组筛选就能实现。以下是具体的实现方式和逻辑:

核心思路

因为Value B是每月从1开始递增的工作日计数,我们可以基于这个序号,对每个月内的工作日进行分组,计算从当月第一个工作日到当前行的Value A累积乘积——这正好匹配你的需求:

  • 当月首个工作日(Value B=1):累积乘积就是自身的Value A
  • 后续工作日:累积乘积 = 当前Value A × 上一行的Value C(本质是之前所有Value A的乘积 × 当前Value A)

具体DAX公式

创建计算列Value C,使用以下公式:

Value C = 
VAR CurrentMonth = EOMONTH('Table'[Date], 0)
VAR CurrentWorkdaySeq = 'Table'[Value B]
-- 筛选当月所有序号小于等于当前行的工作日记录
VAR MonthWorkdaysToCurrent = 
    FILTER(
        ALL('Table'),
        EOMONTH('Table'[Date], 0) = CurrentMonth 
        && 'Table'[Value B] <= CurrentWorkdaySeq
        && 'Table'[Value B] <> BLANK() // 排除非工作日行
    )
RETURN
-- 计算筛选范围内Value A的累积乘积
PRODUCTX(MonthWorkdaysToCurrent, 'Table'[Value A])

公式逻辑说明

  1. CurrentMonth:用EOMONTH获取当前行日期所属月份的最后一天,用于分组筛选当月数据。
  2. MonthWorkdaysToCurrent:筛选出当前月份内,所有Value B序号小于等于当前行的工作日记录(排除非工作日的空值行)。
  3. PRODUCTX:迭代筛选后的记录,计算所有Value A的乘积——这就是你需要的Value C:
    • 当Value B=1时,筛选结果只有当前行,乘积就是自身的Value A
    • 当Value B>1时,筛选结果包含从当月第一个工作日到当前行的所有记录,乘积等价于“上一行Value C × 当前Value A”

优化说明

如果你的表格数据量较大,可以考虑添加日期表并建立关系,用日期表的月份字段替代EOMONTH计算,提升公式性能。另外,如果需要处理非工作日的Value C(比如继承前一个工作日的值),可以在RETURN部分添加条件判断,例如:

RETURN
IF(
    'Table'[Value B] = BLANK(),
    -- 非工作日:取上一个工作日的Value C
    CALCULATE(
        LASTNONBLANK('Table'[Value C], 1),
        FILTER(ALL('Table'), 'Table'[Date] < 'Table'[Date] && 'Table'[Value B] <> BLANK())
    ),
    PRODUCTX(MonthWorkdaysToCurrent, 'Table'[Value A])
)

内容的提问来源于stack exchange,提问作者Matheus Assumpção Solinho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:43:15