Power BI中基于列重复值计算日期差的DAX公式实现
在Power BI中用DAX实现重复值列对应的日期差计算
当然可以实现,以下是几种针对不同需求的DAX方案,均保留所有原始行:
1. 计算当前日期与同客户最早交付日期的天数差
这个公式会给每个客户的每一行,计算当前交付日期和该客户最早交付日期的差值,负数表示当前日期比最早日期更早,正数则更晚:
日期与最早日期差 = VAR 客户最早日期 = CALCULATE(MIN('你的表名'[交付日期]), ALLEXCEPT('你的表名', '你的表名'[客户编号])) RETURN DATEDIFF(客户最早日期, '你的表名'[交付日期], DAY)
ALLEXCEPT用于锁定当前行的客户编号上下文,只计算该客户的最早交付日期DATEDIFF的参数顺序决定结果正负:第一个参数是基准日期(最早日期),第二个是当前日期,结果为正代表当前日期更晚,负则更早
2. 计算当前日期与同客户最晚交付日期的天数差
如果需要对比同客户的最晚交付日期,用这个公式:
日期与最晚日期差 = VAR 客户最晚日期 = CALCULATE(MAX('你的表名'[交付日期]), ALLEXCEPT('你的表名', '你的表名'[客户编号])) RETURN DATEDIFF('你的表名'[交付日期], 客户最晚日期, DAY)
这里DATEDIFF把当前日期放在前面,结果为正表示当前日期比最晚日期更早,负则更晚,符合你对正负的定义。
3. 计算当前日期与同客户上一个日期的天数差(多重复行场景)
如果客户有多个交付日期,需要按日期顺序计算相邻日期的差值,用这个公式:
与上一日期天数差 = VAR 当前客户 = '你的表名'[客户编号] VAR 当前日期 = '你的表名'[交付日期] VAR 上一日期 = CALCULATE(MAX('你的表名'[交付日期]), FILTER('你的表名', '你的表名'[客户编号] = 当前客户 && '你的表名'[交付日期] < 当前日期 ) ) RETURN IF(NOT(ISBLANK(上一日期)), DATEDIFF(上一日期, 当前日期, DAY), BLANK())
- 这个公式会找到当前客户中比当前日期更早的最大日期(即上一个交付日期),计算两者的天数差
- 对于客户的最早日期,因为没有更早的日期,会返回空白值
使用时只需要把公式里的你的表名替换成你实际的表名称即可,所有方案都不会删除任何原始行,只会在新增列中填充计算结果。
内容的提问来源于stack exchange,提问作者Donyae Scott
相关产品推荐
相关产品推荐

