如何编写DAX计算:年度总计取年末最新值而非SUM求和
解决DAX年度总计取最晚记录金额的问题
要实现年度总计不取求和值,而是取该年度最后一条记录的金额,我们可以通过DAX中的变量和上下文筛选来完成。下面分两种常见场景给出解决方案:
场景1:数据表中已有单独的「年度」列
如果你的数据表(比如叫财务数据表)里已经有专门的年度列(比如2023、2024这类值),可以用这个度量值:
年度最晚金额 = VAR 年度最大日期 = CALCULATE(MAX('财务数据表'[日期]), ALLEXCEPT('财务数据表', '财务数据表'[年度])) RETURN CALCULATE(SUM('财务数据表'[金额]), '财务数据表'[日期] = 年度最大日期)
公式解释:
年度最大日期变量:用ALLEXCEPT保留当前的年度上下文,去除其他筛选器,计算出该年度的最晚日期。- 返回结果:在筛选出「等于年度最大日期」的记录后,返回对应的金额总和(如果同一天只有一条记录,用
MAX('财务数据表'[金额])结果一致)。
场景2:需要从「日期」列提取年度
如果你的表中没有单独的年度列,需要通过日期自动提取年度,可以用这个版本:
年度最晚金额 = VAR 当前年度 = YEAR(MAX('财务数据表'[日期])) VAR 年度最大日期 = CALCULATE(MAX('财务数据表'[日期]), YEAR('财务数据表'[日期]) = 当前年度) RETURN CALCULATE(SUM('财务数据表'[金额]), '财务数据表'[日期] = 年度最大日期)
特殊情况处理:同一天有多条记录
如果你的「最晚记录」指的是同一天有多条记录时取最后一条(而非求和),可以把公式中的SUM换成LASTNONBLANKVALUE,确保返回的是单条最晚记录的金额:
年度最晚金额 = VAR 年度最大日期 = CALCULATE(MAX('财务数据表'[日期]), ALLEXCEPT('财务数据表', '财务数据表'[年度])) RETURN LASTNONBLANKVALUE('财务数据表'[日期], '财务数据表'[金额])
使用方法:
把原来报表中用于求和的度量值替换成这个「年度最晚金额」度量,当你在视觉对象中按年度分组时,总计行就会自动显示该年度最后一条记录的金额(比如你提到的-3416261278),而不是全年金额的总和。
内容的提问来源于stack exchange,提问作者Sauron
相关产品推荐
相关产品推荐

