如何修正DAX公式以获取对应年份1月的首个非空值?
修正DAX公式以获取对应年份1月的首个非空值
原始数据
| 日期 | 数值 |
|---|---|
| 1/1/2023 | 53 |
| 1/1/2023 | 54 |
| 1/1/2023 | 52 |
| 1/2/2023 | 55 |
| 1/2/2023 | 51 |
| 1/2/2023 | 52 |
| 1/2/2023 | 60 |
| 1/3/2023 | 41 |
| 1/3/2023 | 44 |
原公式问题分析
原公式仅筛选了1月的数据,但未限定当前上下文对应的年份,导致无论切换到哪一年,都会返回所有年份中1月的首个非空值(此处为2023年数据)。
修正方案
需要在筛选条件中加入年份限制,关联当前筛选上下文的年份,以下是两种常用实现方式:
方式一:基于当前筛选的年份
直接通过YEAR函数获取当前上下文的年份,与日期列的年份匹配:
CALCULATE( FIRSTNONBLANK('Turn Over'[Effectif avant], 'Turn Over'[Effectif avant]), MONTH('Turn Over'[Date]) = 1, YEAR('Turn Over'[Date]) = YEAR(MAX('Turn Over'[Date])) )
MAX('Turn Over'[Date])会获取当前筛选上下文中的最大日期,提取其年份后,筛选出该年份1月的数据,再取首个非空值。
方式二:使用日期维度表(推荐)
如果模型中有规范的日期维度表(如DateTable),可直接关联日期表的年份和月份筛选,更高效且不易出错:
CALCULATE( FIRSTNONBLANK('Turn Over'[Effectif avant], 'Turn Over'[Effectif avant]), DateTable[MonthNumber] = 1, DateTable[Year] = SELECTEDVALUE(DateTable[Year]) )
SELECTEDVALUE会获取当前选中的年份,确保只筛选对应年份的1月数据。
验证效果
切换到2024年时,公式会自动筛选2024年1月的数据,返回该月份的首个非空值,不会再调用2023年的旧数据。
内容的提问来源于stack exchange,提问作者Serge Inácio
相关产品推荐
相关产品推荐

