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():保留产品维度的筛选,同时清除其他无关筛选,确保累计逻辑准确
你之前遇到的问题解析
MyTable[date].Year无效:DAX中日期列的年份必须通过YEAR()函数提取,不支持点语法访问属性STARTOFYEAR()使用失败:需要搭配日期范围函数(如DATESBETWEEN())或者筛选上下文控制,单独使用无法限定累计范围
内容的提问来源于stack exchange,提问作者Schwenk
相关产品推荐
相关产品推荐

