如何用DAX筛选各库存最后一笔订单并按条件统计?
用DAX统计各库存最后一笔订单的特定条件指标
要实现每个库存最后一笔订单的条件统计,核心是先精准定位每个库存对应的最后订单,再基于这个范围做条件筛选。你之前用LASTDATE/MAX失败的原因通常是没有限定「每个库存」的上下文,导致函数取的是全局或当前筛选器的最后值,而非单库存维度的最后值。
方法一:用度量值实现(推荐,适合动态筛选场景)
步骤1:定义每个库存的最后订单标识
如果订单日期唯一(无同日多单),用日期作为标识:
每个库存最后订单日期 = CALCULATE( MAX('订单表'[订单日期]), ALLEXCEPT('订单表', '订单表'[库存编码]) )
如果存在同日多单,建议用递增的订单编码作为标识(确保最后订单的编码最大):
每个库存最后订单编码 = CALCULATE( MAX('订单表'[订单编码]), ALLEXCEPT('订单表', '订单表'[库存编码]) )
ALLEXCEPT的作用是清除除「库存编码」外的所有筛选上下文,确保计算的是单个库存维度下的最大日期/编码。
步骤2:基于最后订单做条件统计
比如统计最后订单满足「订单状态=已完成」的库存数量:
最后订单为已完成的库存数 = CALCULATE( DISTINCTCOUNT('订单表'[库存编码]), FILTER( '订单表', -- 替换为上面定义的标识字段 '订单表'[订单日期] = [每个库存最后订单日期] && '订单表'[订单状态] = "已完成" ) )
如果用订单编码作为标识,把条件改成'订单表'[订单编码] = [每个库存最后订单编码]即可。
方法二:用计算列标记最后订单(适合静态统计)
如果不需要动态筛选,可以给每条记录添加「是否为该库存最后订单」的标记:
是否为最后订单 = VAR 当前库存 = '订单表'[库存编码] VAR 库存最后订单日期 = CALCULATE(MAX('订单表'[订单日期]), '订单表'[库存编码] = 当前库存) RETURN IF('订单表'[订单日期] = 库存最后订单日期, 1, 0)
之后直接用这个计算列筛选统计:
最后订单符合条件计数 = CALCULATE( COUNT('订单表'[订单编码]), '订单表'[是否为最后订单] = 1 && '订单表'[特定条件列] = "你的条件值" )
关键注意点
- 确保「库存编码」是精准的分组维度,避免重复或错误编码导致统计偏差
- 如果订单存在取消/作废的情况,需要先在筛选中排除这类无效订单,比如在
CALCULATE里添加'订单表'[订单状态] <> "作废"
内容的提问来源于stack exchange,提问作者vivatodoo
相关产品推荐
相关产品推荐

