场景
有时候我们需要统计在我们某类处理问题过程中的leadtime,但leadtime并不是从问题的创建到关闭的整个周期。
比如需求任务从新建->确认->待排期->开始开发->测试中->UAT中->待上线→已上线→关闭,这是他们正常的工作流程,我们在业务定义业务人员的交付周期的时候,一般会从开始开发算起到开发完成验收后待上线的阶段,这样针对开发团队才会更公平。
因此,我们统计业务的交付周期(需求Leadtime),需要计算从第一次进入到开始开发状态到最后一次进入到待上线状态的时间周期。
同时,我们希望按最后一次进入到开发状态作为时间点来进行计量,因此还还需要将交付日期作为维度来进行计算。
解决方案
此时,我们需要计算从第一次进入到开始开发状态到最后一次进入到待上线状态的时间周期,并将此时间周期作为度量项。
这时,我们就需要通过eazyBI的高级设置以及导入的ScriptRunner脚本来进行计算和写入。
高级设置定义度量
[jira.customfield_bussleadtime] name = "需求交付周期" data_type = "decimal" measure = true dimension = true
以上是定义一个度量,名称为:需求交付周期,类型为:数字,作为计划单位 (measure = true),eazyBI内部的字段ID为:customfield_bussleadtime,并且将之作为维度(dimension = true)
度量引入
我们定义了需求交付周期这样 的度量项,我们在导入的时候可以选择此度量项
对度量的值进行计算
我们在以上步骤设置了一个自定义字段的度量定义,那么这个值如计算写入,我们可以编写以下脚本
var changefield = 'status'; var datefisrt = null;//第一次进入到开发开发状态的时间 var datelast = null;//最后一次进入到已上线状态的时间 var statusfirstname = '10030';//开发状态ID var statuslastname = '10301';//已上线状态ID var statusto = null; var statusfrom = null; var duration = null;//leadtime var firstflag = false; var lastflag = false; issue.changelog.histories.forEach(function(history){ history.items.forEach(function(historyItem){ if (historyItem.field == changefield) { statusto = historyItem.to; if(statusto == statusfirstname && !firstflag ){ datefisrt = history.created; firstflag = true } if(statusto == statuslastname){ datelast = history.created; lastflag = true } } }); }); duration = (Date.parse(datelast) - Date.parse(datefisrt)) / 1000 / 60 / 60 / 24; issue.fields.customfield_bussleadtime = duration;//将计算的开发周期写入到定义的字段中
并将它引用到高级配置中
报告使用
完成以上设置并将数据进行导入后,我们可以在报告中来进行
我们得到的数据信息后,对报告进行加工,通过time为行,需求交付周期为列,并取它的平均数
切换为line图,我们可以得到需求在每一周的交付周期的趋势图
1 Comment
红旗公
https://docs.eazybi.com/eazybi/data-import/data-adjustments-using-javascript