DAX:如何将销售日期与对应产品的有效促销日期匹配?
解决方案
核心逻辑
无需嵌套IF,直接基于产品匹配+日期范围筛选,定位销售日期所属的最近一次促销即可,所有逻辑可复用,新增促销无需修改公式。
前置字段约定
先明确通用表结构,你可以对应自己的实际字段调整:
- 销售表(Sales)核心字段:
[产品ID](关联促销表的产品唯一标识)、[销售日期](单条销售记录的产生日期) - 促销表(Promotion)核心字段:
[产品ID]、[促销ID]、[促销名称]、[促销开始日期](单场促销的启动时间)
销售表计算列DAX代码
关联促销名称 = VAR 当前产品 = Sales[产品ID] VAR 当前销售日期 = Sales[销售日期] // 筛选当前产品、早于等于销售日期的所有促销,取最大的促销开始日期 VAR 最近生效促销日期 = CALCULATE( MAX(Promotion[促销开始日期]), FILTER( Promotion, Promotion[产品ID] = 当前产品 && Promotion[促销开始日期] <= 当前销售日期 ) ) // 匹配对应促销的信息,无匹配促销时返回自定义值 RETURN IF( ISBLANK(最近生效促销日期), "无促销", CALCULATE( SELECTEDVALUE(Promotion[促销名称]), FILTER( Promotion, Promotion[产品ID] = 当前产品 && Promotion[促销开始日期] = 最近生效促销日期 ) ) )
注意事项
- 单产品同个开始日期不允许存在多场重复促销,提前对促销表按
[产品ID]+[促销开始日期]去重即可避免匹配错误 - 如果你需要返回促销ID、折扣等其他促销字段,只需修改最后CALCULATE内的取值字段即可
- 如果规则里促销有明确结束时间,可在FILTER条件中新增
Promotion[促销结束日期] >= 当前销售日期的判定
内容的提问来源于stack exchange,提问作者David Lydike
相关产品推荐
相关产品推荐

