使用during/before/after时间过滤器替代sprint时结果异常的技术咨询
during时间范围统计不对齐的问题 我之前做迭代统计的时候也踩过这个坑,太懂这种总数和拆分项对不上的烦躁了!核心问题大概率是**during的统计逻辑和你之前用的sprint = ###完全不一样**,咱们捋清楚:
为啥sprint好用?
用sprint = ###的时候,Jira是把所有归属这个迭代的问题都算进去,不管它的状态什么时候变——只要属于这个迭代,就会被纳入总问题,打开和关闭的统计也是基于「当前状态」或者「迭代内的最终状态」,自然加起来等于总数。
但换成during时间过滤器后,逻辑就变了,这里有两个最常见的坑:
坑1:总过滤器和状态过滤器的统计维度不统一
比如你总过滤器用的是updated during ("开始时间", "结束时间")(统计窗口内有任何更新的问题),但已关闭过滤器用的是status changed to Closed during ("开始时间", "结束时间")(只统计窗口内完成关闭动作的问题)。这时候就会出现:
- 有些问题在窗口前就已经关闭了,窗口内只是加了个评论/改了个字段,会被算进总问题,但不会被算进关闭问题
- 有些问题在窗口内从关闭又改成了打开,会被算进打开问题,但关闭问题里不会有它
坑2:状态过滤器的逻辑没覆盖全场景
比如你的已打开过滤器只统计「窗口内始终处于打开状态」的问题,但忽略了那些窗口前是关闭,窗口内被重新打开的问题;或者反过来,窗口前是打开,窗口内没任何状态变更的问题,也没被统计进去。
怎么调整过滤器让数字对齐?
要让三个过滤器的统计逻辑完全对齐,得统一「时间范围+归属迭代+状态判断」的规则,给你一套可直接用的JQL模板:
1. 总问题数过滤器(统计指定迭代内,窗口内有更新或状态变化的所有问题)
sprint = ### AND (updated during ("YYYY-MM-DD", "YYYY-MM-DD") OR status changed during ("YYYY-MM-DD", "YYYY-MM-DD"))
或者如果你想统计窗口内创建的迭代问题:
sprint = ### AND created during ("YYYY-MM-DD", "YYYY-MM-DD")
2. 已打开问题数过滤器(统计迭代内,窗口结束时处于打开/进行中状态的问题)
sprint = ### AND status in ("Open", "In Progress") AND ( created during ("YYYY-MM-DD", "YYYY-MM-DD") OR (created <= "YYYY-MM-DD" AND status was not in ("Closed", "Done") during ("YYYY-MM-DD", "YYYY-MM-DD")) )
这个逻辑是:要么是窗口内创建的打开问题,要么是窗口前就存在、且整个窗口内没变成关闭状态的打开问题。
3. 已关闭问题数过滤器(统计迭代内,窗口结束时处于关闭/完成状态的问题)
sprint = ### AND status in ("Closed", "Done") AND ( status changed to ("Closed", "Done") during ("YYYY-MM-DD", "YYYY-MM-DD") OR (created <= "YYYY-MM-DD" AND status was in ("Closed", "Done") during ("YYYY-MM-DD", "YYYY-MM-DD")) )
这个逻辑是:要么是窗口内完成关闭的问题,要么是窗口前就已经关闭、且整个窗口内没重新打开的问题。
快速验证方法
导出三个过滤器的问题列表,手动核对那11条总问题里的「漏网之鱼」:
- 看看那些没被算进打开/关闭的问题,状态变更历史是什么样的?
- 是不是窗口前就处于某个状态,窗口内没变更状态?或者窗口内状态来回变了好几次?
比如我之前碰到过一个问题,窗口前是关闭状态,窗口内只是改了个标签,总过滤器算进去了,但关闭过滤器因为没检测到状态变更,就没算,导致数字对不上。
内容的提问来源于stack exchange,提问作者Cynic




