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

PowerBI实现按产品按日累计值且每年重置的度量值需求

按产品+年度重置的日累计值DAX度量值实现

核心解决方案(无单独日期表场景)

如果你的数据模型中没有单独的日期表,可直接基于业务表编写以下度量值:

Cumulative per Year = 
VAR CurrentDate = MAX(MyTable[Date])
VAR CurrentProduct = MAX(MyTable[productID])
VAR CurrentYear = YEAR(CurrentDate)
RETURN
CALCULATE(
    SUM(MyTable[value]),
    FILTER(
        ALLSELECTED(MyTable),
        MyTable[productID] = CurrentProduct &&
        YEAR(MyTable[Date]) = CurrentYear &&
        MyTable[Date] <= CurrentDate
    )
)

关键细节说明

  • 用MAX()获取当前上下文的日期和产品:替代SELECTEDVALUE(),避免多值筛选上下文时失效的问题
  • 用YEAR(MyTable[Date])提取年份:DAX不支持直接用MyTable[Date].Year的点语法访问日期属性,必须通过YEAR()函数提取
  • ALLSELECTED()配合FILTER():确保在当前筛选范围内,仅统计当前产品、当前年度内日期早于等于当前行日期的value总和,自动实现年度重置

更规范的方案(使用单独日期表)

DAX最佳实践建议使用单独的日期表关联业务表,此时可用更简洁的写法:

Cumulative per Year = 
CALCULATE(
    SUM(MyTable[value]),
    DATESBETWEEN(
        'Date'[Date],
        STARTOFYEAR('Date'[Date]),
        MAX('Date'[Date])
    ),
    ALLEXCEPT(MyTable, MyTable[productID])
)

优势

  • DATESBETWEEN() + STARTOFYEAR():直接限定当前年度的日期范围,自动完成年度重置逻辑
  • ALLEXCEPT():保留产品维度的筛选,同时清除其他无关筛选,确保累计逻辑准确

你之前遇到的问题解析

  1. MyTable[date].Year 无效:DAX中日期列的年份必须通过YEAR()函数提取,不支持点语法访问属性
  2. STARTOFYEAR() 使用失败:需要搭配日期范围函数(如DATESBETWEEN())或者筛选上下文控制,单独使用无法限定累计范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:15:35