You need to enable JavaScript to run this app. 如何使用DAX映射或统计当月数据中上月已存在的条目?
优惠活动
大模型
产品
解决方案
定价
更多

如何使用DAX映射或统计当月数据中上月已存在的条目?

DAX实现跨月留存条目统计方案

核心需求说明

针对包含ID、date、item三个字段的业务数据集,筛选输出当月数据条目中、同时在上月同维度存在的记录。
结合给定示例的匹配逻辑:

  • 12月(01.12.20)的条目共2条:ID=123对应item=one、ID=153对应item=three
  • 上月(11月)的条目共2条:ID=123对应item=one、ID=143对应item=two
  • 跨月匹配后仅ID=123、item=one的组合在两个月都存在,为预期输出结果

实现逻辑拆解

  • 匹配判定单位是ID + item的组合,不是单独的ID值,同一ID如果当月的item和上月不一致,不算符合条件
  • 先把文本格式的日期转成标准可计算的日期粒度,消除不同年份、不同日的同月份数据的匹配误差
  • 对每一条当月记录,回溯检索前一个自然月的全量数据,判断是否存在完全一致的ID+item组合

可直接复用的DAX代码

第一步:先在业务表中新增基础转换列,解决文本日期无法计算的问题

// 将示例中带.分隔的文本日期转为标准日期
转换为标准日期 = DATEVALUE([date])
// 取记录所属月的月末值作为统一年月标识,方便跨月比对
记录所属年月 = EOMONTH([转换为标准日期], 0)

第二步:新增计算列,给符合跨月留存条件的条目打标记

是否为上月已存在条目 = 
VAR 当前记录年月 = '业务表'[记录所属年月]
VAR 当前匹配键 = '业务表'[ID] & "|" & '业务表'[item]
// 检索上月是否存在完全一致的ID+item组合
VAR 上月匹配数 = 
CALCULATE(
    COUNTROWS('业务表'),
    ALL('业务表'), // 解除当前行的上下文限制,全表检索上月数据
    '业务表'[记录所属年月] = EOMONTH(当前记录年月, -1),
    '业务表'[ID] & "|" & '业务表'[item] = 当前匹配键
)
RETURN
IF(上月匹配数 > 0, 1, 0)

第三步:按需输出结果

  • 如果需要展示符合条件的条目明细:在可视化表中拖入ID、item字段,添加筛选规则——是否为上月已存在条目 = 1,即可得到示例中预期的「123 / one」结果
  • 如果需要统计符合条件的条目总数量,可直接写度量值:
跨月留存条目总数 = CALCULATE(
    DISTINCTCOUNT('业务表'[ID] & "|" & '业务表'[item]),
    '业务表'[是否为上月已存在条目] = 1
)

实现注意事项

  • 匹配键不要只用ID拼接单值,必须把item纳入组合维度,否则会出现同一ID跨月换了item却被误判为符合条件的问题
  • 检索上月数据时要注意保留外部切片器的筛选上下文,不要因为ALL函数把无关的筛选范围全部清除,导致匹配范围超出预期
  • 日期转换阶段要校验原始文本日期的格式,避免因文本格式不统一导致DATEVALUE计算报错

内容的提问来源于stack exchange,提问作者Shalva Bareladze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.13 00:54:09