飞书项目度量计算公式2.0案例合集

飞书项目度量计算公式2.0案例合集

飞书项目手册精选NaN-NaN-NaN
产品功能
🎈
自定义计算字段:旗舰版客户可用
自定义计算字段:企业版客户可用
自定义计算字段:商业版客户不可用
✍️
维度这里可变化,本文档仅作为示例参考。
如还不了解度量使用,可先阅读[度量图表配置指南 2.0]。
如何添加计算字段请参考[如何创建计算字段?],具体度量函数了解可点击[度量函数一览表 2.0]。
度量公式已支持站外复制[复制公式],如需复制本文档公式示例,请参考[可复制指标]部分。
基础计算
需求/缺陷数量
场景
公式示例
需求整体情况:
计算全部需求数量
具体配置:
  • 维度:优先级
  • 指标:count({工作项id})
  • 可复制指标:COUNT(${工作项id})
公式解析:
  • 工作项 id为需求的唯一标识
  • 因此推荐使用工作项ID计算需求数量,并按不同优先级进行分布
剩余需求情况:
计算未完成的需求数量
具体配置:
  • 维度:优先级
  • 指标:countIf({工作项id},isNull({完成日期})==true)
  • 可复制指标:countIf(${工作项id},isNull(${完成日期})==true)
公式解析:
  • isNull():判断一个字段是否为空,空返回 true,非空返回 false
  • 工作项 id为需求的唯一标识
  • 使用isNull()函数判断完成日期是否为空
  • 完成日期为空代表需求未完成,则对其进行计数,并按不同优先级进行分布
完成需求情况
计算已完成的需求数量
具体配置:
  • 维度:优先级
  • 指标:countIf({工作项id},isNull({完成日期})==false)
  • 可复制指标:countIf(${工作项id},isNull(${完成日期})==false)
公式解析:
  • isNull():判断一个字段是否为空,空返回 true,非空返回 false
  • 工作项 id为需求的唯一标识
  • 使用isNull()函数判断完成日期是否为空
  • 完成日期不为空代表需求已完成,则对其进行计数,并按不同优先级进行分布
参与测试的需求情况:
计算含有测试节点的需求数量
具体配置:
  • 维度:优先级
  • 指标:countDistinctIf({工作项id},{流程节点}.{节点名称}=="测试")
  • 可复制指标:countDistinctIf(${工作项id},${流程节点}.${节点名称}=="测试")
公式解析:
  • countDistinctIf():去重计数(带条件的)
  • 工作项 id为需求的唯一标识
  • 使用countDistinctIf()函数,去重计数含有测试节点的需求数量,并按不同优先级进行分布
高优需求完成情况:
计算优先级为 P0 的已完成需求数量
具体配置:
  • 维度:业务线
  • 指标:countDistinctIf({工作项id},isNull({完成日期})==false&&优先级==紧急需求)
  • 可复制指标:countDistinctIf(${工作项id},isNull(${完成日期})==false)&&{完成日期}==紧急需求)
公式解析:
  • countDistinctIf():去重计数(带条件的)
  • 工作项 id为需求的唯一标识
  • 使用countDistinctIf()函数,去重计数含有测试节点的需求数量
  • 按照 P0优先级进行分布
月需求吞吐情况:
月创建的需求/月交付完成的需求
具体配置:
  • 维度:timeline(date("2022-01-01"), date("2023-08-03"), "month")
  • 指标:countIf({工作项id},toStartOfMonth({完成日期})== toStartOfMonth(timelineCursor()))/countIf({工作项id},toStartOfMonth({提出时间})== toStartOfMonth(timelineCursor()))
  • 可复制指标:countIf(${工作项id},toStartOfMonth(${完成日期})== toStartOfMonth(timelineCursor()))/countIf(${工作项id},toStartOfMonth(${提出时间})== toStartOfMonth(timelineCursor()))
公式解析:
  • timelineCursor():取维度 timeline 的切片时间
  • toStartOfMonth():取日期所在月的第一天
  • 即本指标含义为,如果需求的完成日期所在月的第一天==维度timelineCursor() 所对应切片时间的所在月第一天,即把需求在该维度上计数,计算出本月完成的需求数量,同理计算本月提出的需求数量后,用本月完成需求数量除以提出需求数量
需求周开发情况:
计算本周完成开发节点的需求数量
具体配置:
  • 维度:timeline(date("2022-01-01"), now(), "week")
  • 指标:countIf({工作项id}, toStartofday(maxIf({流程节点}.{节点末次结束时间},{流程节点}.{节点名称}=="开始"))<=toStartofday(timelineCursor())&&toStartofday(maxIf({流程节点}.{节点末次结束时间},{流程节点}.{节点名称}=="开始"))>dateAdd(timelineCursor(),-7))
  • 可复制指标:countIf(${工作项id}, toStartofday(maxIf(${流程节点}.${节点末次结束时间},${流程节点}.${节点名称}=="开始"))<=toStartofday(timelineCursor())&&toStartofday(maxIf(${流程节点}.${节点末次结束时间},${流程节点}.${节点名称}=="开始"))>dateAdd(timelineCursor(),-7))
公式解析:
  • timelineCursor():取维度 timeline 的切片时间
  • toStartofday():获取当前天的起始时间,向前取整到今天开始
  • 即本指标含义为,如果需求的完成时间,向前取整到今天开始==维度timelineCursor所对应切片时间,每7天分割一次,即把需求在该维度上计数,计算出本周完成开发节点的需求数量,同理计算本月完成开发节点的需求数量后,用本月完成开发节点数量除以提出需求数量
定容率:
计算每月,需求评审结束的数量/进入前端估分的需求数量
具体配置:
  • 维度:timeline(date("2022-01-01"), today(), "month")
  • 指标:(countIf({工作项id}, toStartofmonth(maxIf({流程节点}.{节点末次结束时间},{流程节点}.{节点名称}=="需求评审"))==toStartofmonth(timelineCursor()))/countIf({工作项id}, toStartofmonth(minIf({流程节点}.{节点末次开始时间},match({流程节点}.{节点名称},"估分")))==toStartofmonth(timelineCursor())))
  • 可复制指标:(countIf(${工作项id}, toStartofmonth(maxIf(${流程节点}.${节点末次结束时间},${流程节点}.${节点名称}=="需求评审"))==toStartofmonth(timelineCursor()))/countIf(${工作项id}, toStartofmonth(minIf(${流程节点}.${节点末次开始时间},match(${流程节点}.${节点名称},"估分")))==toStartofmonth(timelineCursor())))
公式解析:
  • timelineCursor():取维度 timeline 的切片时间
  • toStartOfMonth():取日期所在月的第一天
  • 即本指标含义为,需求评审节点的末次结束时间在当月的需求数量除以估分节点的开始时间在当月的需求数量
人均完成需求量:
计算不同业务线人均完成需求数量
具体配置:
  • 维度:业务线
  • 指标:countDistinct({工作项id})/countDistinct({流程节点}.{节点人员}.{负责人})
  • 可复制指标:countDistinct(${工作项id})/countDistinct(${流程节点}.${节点人员}.${负责人})
公式解析:
  • countDistinct ():用于对字段进行去重计数
  • 工作项 id为需求的唯一标识,判断,按照业务线进行分布
  • 即本指标含义为,使用countDistinct ()函数对工作项id和节点负责人进行去重计数,然后计算人均需求完成量
Bug RESOLVED情况:
计算每天新增的RESOLVED状态缺陷数量
具体配置:
  • 维度:timeline(date("2022-01-01"), now(), "day")
  • 指标:countIf({工作项id},toStartOfDay(maxIf({所有状态}.{状态首次开始时间},{所有状态}.{状态名称}=="RESOLVED"))==timelineCursor())
  • 可复制指标:countIf(${工作项id},toStartOfDay(maxIf(${所有状态}.${状态首次开始时间},${所有状态}.${状态名称}=="RESOLVED"))==timelineCursor())
公式解析:
  • timelineCursor():取当前 timeline 时间切片日期
  • toStartofday():获取当前天的起始时间,向前取整到今天开始
  • 即本指标含义为,如果缺陷实例 RESOLVED状态的状态首次开始时间==timeline时间轴上的当前天就统计缺陷数量,即把缺陷在该维度上计数,计算出每天新增的RESOLVED状态缺陷数量
子任务数量
场景
公式
子任务交付情况:
计算月完成的子任务数量
具体配置:
  • 维度:timeline(date("2022-01-01"), date("2023-08-03"), "month")
  • 指标:countIf({流程节点}.{节点子任务}.{任务 id},toStartOfMonth( timelineCursor())==toStartOfMonth(filter({流程节点}.{节点子任务}.{任务所有状态},each.{状态名称}=="已完成").{状态末次开始时间}))
  • 可复制指标:countIf(${流程节点}.${节点子任务}.${任务 id},toStartOfMonth( timelineCursor())==toStartOfMonth(filter(${流程节点}.${节点子任务}.${任务所有状态},each.${状态名称}=="已完成").${状态末次开始时间}))
公式解析:
  • timelineCursor():取维度 timeline 的切片时间
  • toStartOfMonth():取日期所在月的第一天
  • 即本指标含义为,使用toStartOfMonth函数,获取已完成子任务的状态末次开始时间所在月的第一天==timeline时间轴上的切片时间,即把子任务在该维度上计数,计算出本月子任务完成数量
节点/状态进入次数
场景
公式
需求评审次数:
计算需求进入评审节点的次数
具体配置:
  • 数据源:需求
  • 维度:优先级
  • 指标:sumIf({流程节点}.{节点进入次数},{流程节点}.{节点名称}=="评审")
  • 可复制指标:sumIf(${流程节点}.${节点进入次数},${流程节点}.${节点名称}=="评审")
公式解析:通过sumif()函数,对需求进入评审节点的次数求和,并按不同优先级进行分布
缺陷REOPENED情况:
计算缺陷进入REOPENED状态的次数
具体配置:
  • 数据源:缺陷
  • 维度:名称
  • 指标:sumIf({所有状态}.{状态进入次数},{所有状态}.{状态名称}=="REOPENED")
  • 可复制指标:sumIf(${所有状态}.${状态进入次数},${所有状态}.${状态名称}=="REOPENED")
公式解析:通过sumif()函数,对缺陷进入REOPENED状态的次数求和,并按不同缺陷名称进行分布
人力盘点
节点估分
场景
公式
各节点估分投入分布:
计算不同节点的估分
具体配置:
  • 维度:流程节点.节点名称
  • 指标:sum({流程节点}.{节点估分})
  • 可复制指标:sum(${流程节点}.${节点估分})
公式解析:通过sum()函数,统计不同节点的估分和,并按不同节点名称进行分布
开发节点人力投入情况:
计算指定节点的估分
具体配置:
  • 维度:优先级
  • 指标:sumIf({流程节点}.{节点估分},{流程节点}.{节点名称}=="开发")
或sum(filter({流程节点},each.{节点名称}=="开发").{节点估分})
  • 可复制指标:sumIf(${流程节点}.${节点估分},${流程节点}.${节点名称}=="开发")
或sum(filter(${流程节点},each.${节点名称}=="开发").${节点估分})
公式解析:
  • filter():用于对源范围条件过滤后,生成一个新的对象数组
  • each.:点语法
  • 通过sumif()函数计算开发节点的估分和,并按不同优先级进行分布
  • 使用filter()函数过滤出开发节点的估分,通过sum()函数进行求和,并按不同优先级进行分布
开发和测试节点人力投入情况:
计算多个指定节点的估分
具体配置:
  • 维度:优先级
  • 指标:sumIf({流程节点}.{节点估分},{流程节点}.{节点名称}=="开发"||{流程节点}.{节点名称}=="测试")
或sum(filter({流程节点},each.{节点名称}=="开发" || each.{节点名称}=="测试").{节点估分})
  • 可复制指标:
指标:sumIf(${流程节点}.${节点估分},${流程节点}.${节点名称}=="开发"||${流程节点}.${节点名称}=="测试")
或sum(filter(${流程节点},each.${节点名称}=="开发" || each.${节点名称}=="测试").${节点估分})
公式解析:
  • filter():用于对源范围条件过滤后,生成一个新的对象数组
  • each.:点语法
  • 通过sumif()函数计算开发节点和测试节点的估分和,并按不同优先级进行分布
  • 使用filter()函数过滤出开发节点和测试节点的估分,通过sum()函数进行求和,并按不同优先级进行分布
已完成的开发和测试节点人力投入情况:
计算多个指定节点且已完成节点的估分
具体配置:
  • 维度:优先级
  • 指标:sumIf({流程节点}.{节点估分},contains(["开发","测试"],{流程节点}.{节点名称})&&{流程节点}.{节点状态}==已完成)
或sumIf(filter({流程节点},each.{节点名称}=="开发" || each.{节点名称}=="测试").{节点估分},{流程节点}.{节点状态}==已完成)
  • 可复制指标:sumIf(${流程节点}.${节点估分},contains(["开发","测试"],${流程节点}.${节点名称})&& ${流程节点}.${节点状态}==$option{已完成})
或sumIf(filter(${流程节点},each.${节点名称}=="开发" || each.${节点名称}=="测试").${节点估分},${流程节点}.${节点状态}==$option{已完成})
公式解析:
  • filter():用于对源范围条件过滤后,生成一个新的对象数组
  • each.:点语法
  • contains():判断数组是否包含某一个元素,是返回 true,反之返回 false
  • 使用contains()函数判断节点名称是否==开发或者测试,并且判断节点状态为已完成,通过sumif函数对指定节点估分进行求和,并按不同优先级进行分布
  • 使用filter()函数过滤出开发节点和测试节点的估分,并且判断节点状态为已完成,通过sumif函数对指定节点估分进行求和,并按不同优先级进行分布
任务估分
场景
公式
已完成的开发任务人力投入情况:
计算开发节点下已完成的子任务估分和
具体配置:
  • 指标:sumIf({流程节点}.{节点子任务}.{任务估分},{流程节点}.{节点名称}=="开发"&&{流程节点}.{节点子任务}.{任务状态}==已完成)
  • 可复制指标:sumIf(${流程节点}.${节点子任务}.${任务估分},${流程节点}.${节点名称}=="开发"&&${流程节点}.${节点子任务}.${任务状态}==$option{已完成})
公式解析:
  • filter():用于对源范围条件过滤后,生成一个新的对象数组
  • each.:点语法
  • 使用sumif()函数,判断节点名称==开发,并且节点子任务状态==已完成,满足条件则对其估分进行求和
开发节点子任务的人力投入情况:
开发节点下的子任务估分插值
具体配置:
  • 指标:sum(filter({流程节点},each.{节点名称}=="开发").{节点子任务}.{任务人员}.{估分插值(子任务精度)})
  • 可复制指标:sum(filter(${流程节点},each.${节点名称}=="开发").${节点子任务}.${任务人员}.${估分插值(子任务精度)})
公式解析:
  • filter():用于对源范围条件过滤后,生成一个新的对象数组
  • each.:点语法
  • 使用filter()函数过滤出开发节点 {节点子任务}.{任务人员}.{估分插值(子任务精度),通过sum()函数进行求和
人员估分
场景
公式
查看各节点负责人的人力投入情况:
计算节点人员的估分
具体配置:
  • 维度:{流程节点}.{节点人员}
  • 指标:sum({流程节点}.{节点人员}.{人员估分排期}.{人员估分})
  • 可复制指标:sum(${流程节点}.${节点人员}.${人员估分排期}.${人员估分})
公式解析:使用sum()函数计算{节点人员}.{人员估分排期}.{人员估分}的估分和,并按不同节点人员进行分布
查看各子任务负责人的人力投入情况:
计算节点子任务人员估分
具体配置:
  • 维度:{流程节点}.{节点子任务}.{任务人员}
  • 指标:sum({流程节点}.{节点子任务}.{任务人员}.{人员估分排期}.{人员估分})
  • 可复制指标:sum(${流程节点}.${节点子任务}.${任务人员}.${人员估分排期}.${人员估分})
公式解析:使用sum()函数计算{节点子任务}.{任务人员}.{人员估分排期}.{人员估分}估分和,并按不同任务人员进行分布
计算每月的人力(估分)投入:
计算估分分布在每个月上的插值,当人力估分数据涉及到时间周期的统计,需要使用估分插值
具体配置:
  • 维度:timeline(date("2023-01-01"),today(),"month")
  • 指标:sum({流程节点}.{节点人员}.{估分插值})
  • 可复制指标:sum(${流程节点}.${节点人员}.${估分插值})
公式解析:
  • timeline():输出时间轴,支持 day、workday、week、bi-week、month、bi-month、quarter 与 year 输出,不能与其他函数混合使用 例:timeline(startTime,endTime, "day")
  • 使用sum()函数计算节点人员的估分插值并求和,按月维度进行分布
计算每个月不同团队的需求人力(估分)投入
当人力估分数据涉及到时间周期的统计,需要使用估分插值
具体配置:
  • 维度:timeline(date("2023-01-01"),today(),"month");{流程节点}.{节点人员}.{所属团队}
  • 指标:sum({流程节点}.{节点人员}.{估分插值})
  • 可复制指标:sum(${流程节点}.${节点人员}.${估分插值})
公式解析:
  • timeline():输出时间轴,支持 day、workday、week、bi-week、month、bi-month、quarter 与 year 输出,不能与其他函数混合使用 例:timeline(startTime,endTime, "day")
  • 使用sum()函数计算节点人员的估分插值并求和,按所属团队,月维度进行分布
计算每个月某指定团队人员的估分
具体配置:
  • 维度:timeline(date("2023-01-01",today(),"month")
  • 指标:sum(filter({流程节点}.{节点人员},contains(each.{所属团队},@团队)).{估分插值})
  • 可复制指标:sum(filter(${流程节点}.${节点人员},contains(each.${所属团队},$team{团队})).${估分插值})
公式解析:
  • timeline():输出时间轴,支持 day、workday、week、bi-week、month、bi-month、quarter 与 year 输出,不能与其他函数混合使用 例:timeline(startTime,endTime, "day")
  • filter():用于对源范围条件过滤后,生成一个新的对象数组
  • Contains()判断数组是否包含某一个元素,是返回 true,反之返回 false
  • 使用filter()函数,contains()函数,过滤和判断节点人员是否属于指定团队,并对符合条件的人员估分插值求和,按月维度进行分布
查看RD在需求内的人力投入:
计算RD作为负责人的节点的估分和,维度需要使用节点角色人员
具体配置:
  • 维度:filter({流程节点}.{节点人员}.{流程角色},each.{名称}=="RD").{角色人员}
  • 可复制维度:filter(${流程节点}.${节点人员}.${流程角色},each.${名称}=="RD").${角色人员}
  • 指标:sum({流程节点}.{节点人员}.{人员估分排期}.{人员估分})
  • 可复制指标:sum(${流程节点}.${节点人员}.${人员估分排期}.${人员估分})
公式解析:
  • filter():用于对源范围条件过滤后,生成一个新的对象数组
  • 使用filter()函数,过滤出RD角色作为节点负责人的节点
  • 使用sum()函数对节点人员估分进行求和
查看一段时间内,PM在需求内的人力投入:
计算一段时间内,PM作为负责人的节点的估分插值和,维度需要使用节点角色人员
具体配置:
  • 维度:
  • filter({流程节点}.{节点人员}.{流程角色},each.{名称}=="PM").{角色人员}
  • TIMELINE(DATE("2023-01-01"),TODAY(),"day")
  • 可复制维度:
  • filter(${流程节点}.${节点人员}.${流程角色},each.${名称}=="PM").${角色人员}
  • TIMELINE(DATE("2023-01-01"),TODAY(),"day")
  • 指标:sum({流程节点}.{节点人员}.{估分插值})
  • 可复制指标:sum(${流程节点}.${节点人员}.${估分插值})
公式解析:
  • timeline():输出时间轴,支持 day、workday、week、bi-week、month、bi-month、quarter 与 year 输出,不能与其他函数混合使用 例:timeline(startTime,endTime, "day")
  • filter():用于对源范围条件过滤后,生成一个新的对象数组
  • each.:点语法
  • 使用filter()函数配合timeline条件,过滤出PM作为负责人的节点
  • 使用sum()函数对节点人员估分插值进行求和
统计不同bug负责人在需求上投入的人力
维度返回和关联缺陷角色人员相等的需求节点负责人
具体配置:
  • 维度:FILTER(${流程节点}.${节点人员},CONTAINS($related{缺陷-关联需求}.${经办人},each.${全部人员}))
  • 指标:估分插值(求和)
公式解析:
  • 关联工作项{缺陷-关联需求}需通过@唤起
阶段周期
节点耗时
场景
公式
不同节点的平均交付周期(天):
计算全部已完成的节点的平均耗时
具体配置:
  • 维度:流程节点
  • 指标:avgIf({流程节点}.{节点累计进行时间},{流程节点}.{节点状态}==已完成)/86400(除以86400可以得到天为单位的数据)
  • 可复制指标:avgIf(${流程节点}.${节点累计进行时间},${流程节点}.${节点状态}==$option{已完成})/86400
公式解析:使用avgIf()函数,判断节点状态为已完成,并对节点累计进行时间求平均值,按不同流程节点进行分布
需求整体的交付周期(天):
计算需求从提出到完成的平均耗时
具体配置:
  • 维度:优先级
  • 指标:avg({完成日期} - {提出时间})/86400(除以86400可以得到天为单位的数据)
  • 可复制指标:avg(${完成日期} - ${提出时间})/86400
公式解析:使用avgIf()函数,计算需求平均交付周期(完成日期-提出时间),按不同优先级进行分布
需求开发耗时(天):
计算需求的开发节点从开始到完成的平均耗时
具体配置:
  • 维度:需求类型
  • 指标:avg(maxif({流程节点}.{节点末次结束时间}, {流程节点}.{节点名称}=="开发")-maxif({流程节点}.{节点末次开始时间}, {流程节点}.{节点名称}=="开发"))/86400
  • 可复制指标:avg(maxif(${流程节点}.${节点末次结束时间}, ${流程节点}.${节点名称}=="开发")-maxif(${流程节点}.${节点末次开始时间}, ${流程节点}.${节点名称}=="开发"))/86400
公式解析:使用avg()函数,计算开发节点从开始到完成的平均时间(可使用节点末次结束时间-节点末次开始时间,求出节点累计进行时间),按不同需求类型进行分布。
节点延期
场景
公式
各节点延期情况:
以节点为维度,计算不同节点的延期数量
具体配置:
  • 维度:节点名称
  • 指标:COUNTIF({工作项id},{流程节点}.{节点末次结束时间}>{流程节点}.{节点排期}.{预计结束日期}and {流程节点}.{节点状态}=={已完成}&&{流程节点}.{节点排期}.{周期时长}>0)
  • 可复制指标:COUNTIF(${工作项id},${流程节点}.${节点末次结束时间}>${流程节点}.${节点排期}.${预计结束日期}and ${流程节点}.${节点状态}==$option{已完成}&&${流程节点}.${节点排期}.${周期时长}>0)
公式解析:
  • {流程节点}.{节点排期}.{周期时长}>0:节点存在排期
  • 以节点为维度展示,如果节点已完成且存在排期,且完成时间大于排期结束时间,对需求进行计数。
需求人员节点延期情况:
计算任意节点延期的需求数量
具体配置:
  • 维度:{工作项ID}
  • 指标:countDistinctIf({工作项id},maxIf(toStartOfDay({流程节点}.{节点实际结束时间})-toStartOfDay({流程节点}.{节点排期}.{预计结束日期}),{流程节点}.{节点状态}==已完成)>0)
  • 可复制指标:countDistinctIf(${工作项id},maxIf(toStartOfDay(${流程节点}.${节点实际结束时间})-toStartOfDay(${流程节点}.${节点排期}.${预计结束日期}),${流程节点}.${节点状态}==$option{已完成})>0)
公式解析:
  • countDistinctIf():去重计数(带条件的)
  • toStartOfDay():获取当前天的起始时间,向前取整到今天开始
  • 使用countDistinctIf()函数,判断节点状态==已完成,使用节点的实际结束时间-节点排期预计结束日期,如果值大于0,则节点延期对其计数,并按不同工作项id进行分布
进行中需求延期情况:
判断当前正在进行中的节点是否延期
具体配置:
  • 指标:countDistinctIf({工作项id},maxIf(toStartOfDay(today())-toStartOfDay({流程节点}.{节点排期}.{预计结束日期}),{流程节点}.{节点状态}==进行中)>0&&isNull({流程节点}.{节点排期}.{预计结束日期})==false)
  • 可复制指标:countDistinctIf(${工作项id},maxIf(toStartOfDay(today())-toStartOfDay(${流程节点}.${节点排期}.${预计结束日期}),${流程节点}.${节点状态}==$option{进行中})>0&&isNull(${流程节点}.${节点排期}.${预计结束日期})==false)
公式解析:
  • countDistinctIf():去重计数(带条件的)
  • toStartOfDay():获取当前天的起始时间,向前取整到今天开始
  • 使用toStartOfDay()函数 获取 今天和节点排期的预计结束日期 都向前取整到今天开始
  • 并满足条件:节点状态==进行中,节点排期预计结束日期不为空,并且 today()-预计结束日期>0
  • 使用countDistinctIf()函数对满足以上条件的节点进行计数
需求指定节点延期数量:
计算开发节点,实际完成>预计完成的需求数量;
具体配置:
  • 维度:优先级
  • 指标:countIf({工作项id},(maxIf(toStartOfDay({流程节点}.{节点末次结束时间}),{流程节点}.{节点名称}=="开发"&&{流程节点}.{节点状态}=="已完成")- maxIf(toStartOfDay({流程节点}.{节点排期}.{预计结束日期}),{流程节点}.{节点名称}=="开发"&&{流程节点}.{节点状态}==已完成))>0)
  • 可复制指标:countIf(${工作项id},(maxIf(toStartOfDay(${流程节点}.${节点末次结束时间}),${流程节点}.${节点名称}=="开发"&&${流程节点}.${节点状态}==$option{已完成})- maxIf(toStartOfDay(${流程节点}.${节点排期}.${预计结束日期}),${流程节点}.${节点名称}=="开发"&&${流程节点}.${节点状态}==$option{已完成}))>0)
公式解析:
  • toStartOfDay():获取当前天的起始时间,向前取整到今天开始
  • 使用toStartOfDay()函数 获取【节点末次结束时间,节点排期的预计结束日期】都向前取整到今天开始,并满足条件:节点状态==已完成,节点末次结束时间取值开发节点,节点排期预计结束日期取值估分节点
  • 使用节点末次结束时间-预计结束日期,如果值大于0,则开发节点延期
  • 使用countIf()函数对延期需求进行计数,按不同优先级进行分布
需求指定节点延期天数:
计算开发延期的节点,实际完成时间-预计完成时间的平均值
具体配置:
  • 维度:需求名称
  • 指标:avgIf((toStartOfDay({流程节点}.{节点末次结束时间})-toStartOfDay({流程节点}.{节点排期}.{预计结束日期}))/86400,{流程节点}.{节点名称}=="开发"&&isNull({流程节点}.{节点排期}.{预计结束日期})==false&&(toStartOfDay({流程节点}.{节点末次结束时间})-toStartOfDay({流程节点}.{节点排期}.{预计结束日期})>0))
  • 可复制指标:avgIf((toStartOfDay(${流程节点}.${节点末次结束时间})-toStartOfDay(${流程节点}.${节点排期}.${预计结束日期}))/86400,${流程节点}.${节点名称}=="开发"&&isNull(${流程节点}.${节点排期}.${预计结束日期})==false&&(toStartOfDay(${流程节点}.${节点末次结束时间})-toStartOfDay(${流程节点}.${节点排期}.${预计结束日期})>0))
公式解析:
  • toStartOfDay():获取当前天的起始时间,向前取整到今天开始
  • isNull():判断一个字段是否为空,空返回 true,非空返回 false
  • 使用toStartOfDay()函数 获取【节点末次结束时间,节点排期的预计结束日期】都向前取整到今天开始
  • 并满足条件:节点名称==开发,节点排期预计结束日期不为空,并且节点末次结束时间-预计结束日期>0
  • 使用avgIf()函数对【节点末次结束时间-预计结束日期】的结果取平均值
  • 按不同需求名称进行分布
任务延期
场景
公式
统计延期完成的子任务:
在任务工作项计算节点任务延期数量
具体配置:
  • 指标:countIf({任务 id},(toStartOfDay({完成日期})-toStartOfDay({排期}.{结束日期})>0))
  • 可复制指标:countIf(${流程节点}.${节点子任务}.${任务 id},(toStartOfDay(${完成日期})-toStartOfDay(${排期}.${结束日期})>0))
公式解析:
  • countIf():通过条件判断来获取字段包含值数量
  • toStartOfDay():获取当前天的起始时间,向前取整到今天开始
  • 使用toStartOfDay()函数 获取 任务工作项的完成日期和结束日期的时间 都向前取整到今天开始
  • 如果任务工作项的完成日期-排期内的结束日期>0的话,则对任务id进行计数
统计延期完成的子任务:
在需求内计算节点子任务的延期数量
具体配置:
  • 维度:需求名称
  • 指标:countIf({流程节点}.{节点子任务}.{任务 id},(filter({流程节点}.{节点子任务},each.{任务状态}==已完成).{任务所有状态}.{状态末次结束时间}-filter({流程节点}.{节点子任务},each.{任务状态}==已完成).{任务排期}.{预计结束日期})>0)
  • 可复制指标:countIf(${流程节点}.${节点子任务}.${任务 id},(filter(${流程节点}.${节点子任务},each.${任务状态}==$option{已完成}).${任务所有状态}.${状态末次结束时间}-filter(${流程节点}.${节点子任务},each.${任务状态}==$option{已完成}).${任务排期}.${预计结束日期})>0)
公式解析:
  • countIf():通过条件判断来获取字段包含值数量
  • filter():用于对源范围条件过滤后,生成一个新的对象数组
  • each.:点语法
  • 使用filter()函数过滤筛选出,任务状态==已完成,并且任务状态末次结束时间-预计结束日期>0
  • 如果满足以上条件则使用countif函数对其进行计数
  • 按不同需求名称进行分布
状态耗时
场景
公式
BUG平均解决时长:
计算缺陷从提出到归档的平均耗时
具体配置:
  • 维度:优先级
  • 指标:avg({归档日期} - {提出时间})/86400
  • 可复制指标:avg(${归档日期} - ${提出时间})/86400
公式解析:使用avg函数对(缺陷归档日期-提出时间)的结果取平均值,并按不同优先级进行分布。
BUG open状态持续时长:
计算缺陷在open状态的累计时间
具体配置:
  • 维度:优先级
  • 指标:sumIf({所有状态}.{状态累计进行时间},{所有状态}.{状态名称}=="OPEN")/86400
  • 可复制指标:sumIf(${所有状态}.${状态累计进行时间},${所有状态}.${状态名称}=="OPEN")/86400
公式解析:
  • 使用sumif()函数,判断缺陷状态是否为open
  • 符合条件则对状态累计进行时间求和
  • 按不同优先级进行分布
BUG从OPEN到RESOLVED的平均周期:
计算缺陷在多个状态的累计进行时间和
具体配置:
  • 指标:avg(maxIf({所有状态}.{状态首次开始时间},{所有状态}.{状态名称}=="RESOLVED"&&({状态}=={REOPENED}||{状态}=={CLOSED}))-maxIf({所有状态}.{状态首次开始时间},{所有状态}.{状态名称}=="OPEN"&&({状态}=={REOPENED}||{状态}=={CLOSED})))/86400
  • 可复制指标:avg(maxIf(${所有状态}.${状态首次开始时间},${所有状态}.${状态名称}=="RESOLVED"&&(${状态}==$option{REOPENED}||${状态}==$option{CLOSED}))-maxIf(${所有状态}.${状态首次开始时间},${所有状态}.${状态名称}=="OPEN"&&(${状态}==$option{REOPENED}||${状态}==$option{CLOSED})))/86400
公式解析:计算open,closed缺陷状态的状态首次开始时间 - reopen,reclosed缺陷状态的状态首次开始时间,对结果取平均值
跨工作项
度量-计算字段内,判断/计算关联工作项数据,需通过@语法,唤起关联工作项关系后选择需要的信息。
250px|700px|reset
关联工作项计算
场景
公式
需求关联项目数量:
在需求计算不同需求关联的项目数量
具体配置:
  • 数据源:需求
  • 维度:需求名称
  • 指标:countIf({需求-项目关联},{需求-项目关联}.{需求状态}!=已终止)
  • 可复制指标:countIf($related{需求-项目关联},$related{需求-项目关联}.${需求状态}!=$option{已终止})
公式解析:
  • 使用countif()函数 判断需求状态不等于已终止,满足条件则进行计数
  • 按不同需求名称进行分布
版本维度的bug估分比:
计算版本关联的缺陷总数/版本的总估时
具体配置:
  • 数据源:版本
  • 维度:版本名称
  • 指标:count({空间 A_缺陷-版本关联_空间 A_缺陷})/sum({版本估时})
  • 版本缺陷总数:count({空间 A_缺陷-版本关联_空间 A_缺陷})
  • 版本总估时:sum({版本估时})
  • 可复制指标:
  • 指标:count($related{空间 A_缺陷-版本关联_空间 A_缺陷})/sum(${版本估时})
  • 版本缺陷总数:count($related{空间 A_缺陷-版本关联_空间 A_缺陷})
  • 版本总估时:sum(${版本估时})
公式解析::
  • 使用count()函数,对版本关联缺陷进行计数
  • 使用sum()函数,对版本总估时进行求和
  • 使用count()函数,计算(版本关联缺陷总数/版本总估时),得出版本维度的bug估分比
  • 按不同版本名称进行分布
需求维度的bug估分比:
计算需求关联bug总数/需求所有研发节点的估分和
具体配置:
  • 数据源:需求
  • 维度:需求名称
  • 指标:count({五道口nps_缺陷-关联需求_五道口nps_缺陷})/sumIf({流程节点}.{节点估分},{流程节点}.{节点名称}=="开发")
  • 可复制指标:count($related{五道口nps_缺陷-关联需求_五道口nps_缺陷})/sumIf(${流程节点}.${节点估分},${流程节点}.${节点名称}=="开发")
公式解析:
  • 使用count()函数,计算缺陷关联需求数量
  • 使用sumif()函数,判断节点名称==开发时,计算节点估分和
  • 计算(缺陷关联需求数量 / 开发节点的估分和),计算出需求维度的bug估分比
  • 按不同需求名称进行分布
时间维度的bug估分比:
计算本月提出且经办的bug数/本月需求开发估分和
具体配置:
  • 数据源:需求
  • 维度:timeline()
  • 指标:countIf({五道口nps_缺陷-关联需求_五道口nps_缺陷},toStartOfMonth({五道口nps_缺陷-关联需求_五道口nps_缺陷}.{提出时间})==toStartOfMonth(timelineCursor()))/sumIf({流程节点}.{节点人员}.{估分插值},{流程节点}.{节点人员}.{流程角色}.{名称}=="开发")
  • 可复制指标:countIf($related{五道口nps_缺陷-关联需求_五道口nps_缺陷},toStartOfMonth($related{五道口nps_缺陷-关联需求_五道口nps_缺陷}.${提出时间})==toStartOfMonth(timelineCursor()))/sumIf(${流程节点}.${节点人员}.${估分插值},${流程节点}.${节点人员}.${流程角色}.${名称}=="开发")
公式解析:
  • timelineCursor():取维度 timeline 的切片时间;
  • toStartOfMonth():取日期所在月的第一天;
  • 使用toStartOfMonth函数,根据bug提出时间获取并判断日期所在月的第一天==timelineCursor切片时间,得出本月提出且经办的bug数
  • 使用上述值 / 需求中开发角色的估分插值和,得出bug估分比
  • 按时间维度进行分布
需求维度的BUG解决周期:
计算不同业务线的需求,所关联缺陷的平均修复时间
具体配置:
  • 维度:{五道口nps_缺陷-关联需求_五道口nps_【需求】}.{业务线}
  • 可复制维度:$related{五道口nps_缺陷-关联需求_五道口nps_【需求】}.${业务线}
  • 指标:avgIf({归档日期}-{提出时间},{是否完成}==true)/86400
  • 可复制指标:avgIf(${归档日期}-${提出时间},${是否完成}==true)/86400
公式解析:
  • 判断需求是否完成
  • 获取需求归档日期-提出时间的平均值
  • 按不同业务线的需求维度进行展示
缺陷人员在关联需求上的估分投入
计算不同缺陷经办人(单人),在需求上的人力投入
具体配置:
  • 数据源:需求
  • 维度:{五道口nps_缺陷-关联需求_五道口nps_缺陷}.{经办人}
  • 可复制维度:$related{五道口nps_缺陷-关联需求_五道口nps_【需求】}.${经办人}
  • 指标:sumIf({流程节点}.{节点人员}.{人员估分排期}.{人员估分},contains({五道口nps_缺陷-关联需求_五道口nps_缺陷}.{经办人},{流程节点}.{节点人员}))
  • 可复制指标:sumIf(${流程节点}.${节点人员}.${人员估分排期}.${人员估分},contains($related{五道口nps_缺陷-关联需求_五道口nps_缺陷}.${经办人},${流程节点}.${节点人员}))
公式解析:
  • 判断缺陷经办人==关联需求的节点人员
  • 满足上述条件,则计算节点人员估分
  • 按不同经办人进行分布。
跨工作项判断
场景
公式
项目维度的需求、缺陷剩余情况:
计算项目关联的未完成的需求和bug数量和
具体配置:
  • 数据源:版本
  • 维度:版本名称
  • 指标:countIf({五道口nps_需求-项目关联_五道口nps_【需求】},{五道口nps_需求-项目关联_五道口nps_【需求】}.{需求状态}!=已上线)+countif({五道口nps_缺陷-项目关联_五道口nps_缺陷},{五道口nps_缺陷-项目关联_五道口nps_缺陷}.{状态}!=CLOSED)
  • 可复制指标:countIf($related{五道口nps_需求-项目关联_五道口nps_【需求】},$related{五道口nps_需求-项目关联_五道口nps_【需求】}.${需求状态}!=$option{已上线})+countif($related{五道口nps_缺陷-项目关联_五道口nps_缺陷},$related{五道口nps_缺陷-项目关联_五道口nps_缺陷}.${状态}!=$option{CLOSED})
公式解析:
  • 判断关联需求的状态不等于已上线,满足以上条件则对需求进行计数
  • 判断关联缺陷状态不等于closed,满足以上条件则对需求进行计数
  • 对需求和缺陷数量进行求和
  • 按不同版本名称进行分布
行业客户需求分布:
需求关联客户,计算不同行业客户的需求数量
具体配置:
  • 数据源:客户工作项
  • 维度:客户行业
  • 指标:countIf({五道口nps_需求-客户关联_五道口nps_【需求】},{五道口nps_需求-客户关联_五道口nps_【需求】}.客户行业==制造业)
  • 可复制指标:countIf($related{五道口nps_需求-客户关联_五道口nps_【需求】},$related{五道口nps_需求-客户关联_五道口nps_【需求】}.${客户行业}==$option{制造业})
公式解析:
  • 判断需求关联客户行业是否等于指定值进行计数
  • 按照不同客户行业进行分布
项目完成度:
项目下的需求全部完成才算项目完成,计算完成项目的占比
具体配置:
  • 数据源:项目
  • 指标:countIf({工作项id},countIf({五道口nps_需求-项目关联_五道口nps_【需/求】}.{工作项id},isNull( {五道口nps_需求-项目关联_五道口nps_【需/求】}.{完成日期})==true)==0)/count({工作项id})
  • 可复制指标:countIf(${工作项id},countIf($related{五道口nps_需求-项目关联_五道口nps_【需/求】}.${工作项id},isNull($related{五道口nps_需求-项目关联_五道口nps_【需/求】}.${完成日期})==true)==0)/count(${工作项id})
公式解析:
  • 判断项目下全部需求的完成日期不为空,满足条件则对项目计数(完成项目)
  • 使用完成项目/总项目求得占比
  • 按不同项目进行分布。
跨工作项对比
场景
公式
需求跨迭代完成情况:
计算需求的完成时间,大于规划迭代完成时间的需求数量
具体配置:
  • 数据源:迭代
  • 指标:countIf({五道口nps_需求-迭代关联_五道口nps_【需求】},{五道口nps_需求-迭代关联_五道口nps_【需求】}.{完成时间}>{排期}.{结束日期})
  • 可复制指标:countIf($related{五道口nps_需求-迭代关联_五道口nps_【需求】},$related{五道口nps_需求-迭代关联_五道口nps_【需求】}.${完成时间}>${排期}.${结束日期})
公式解析:
  • 判断需求关联项目的完成时间>项目排期的结束日期,则该项目跨迭代,对其进行计数。
上线需求bug解决情况:
在需求计算,关联的缺陷完成时间晚于需求完成时间的缺陷数量
具体配置:
  • 数据源:需求
  • 指标:countIf({五道口nps_缺陷-关联需求_五道口nps_缺陷},({五道口nps_缺陷-关联需求_五道口nps_缺陷}.{归档日期}>{完成日期}||isNull( {五道口nps_缺陷-关联需求_五道口nps_缺陷}.{归档日期})==true)&&isNull({完成日期})==false)
  • 可复制指标:countIf($related{五道口nps_缺陷-关联需求_五道口nps_缺陷},($related{五道口nps_缺陷-关联需求_五道口nps_缺陷}.${归档日期}>${完成日期}&&isNull($related{五道口nps_缺陷-关联需求_五道口nps_缺陷}.${归档日期})==true)&&isNull(${完成日期})==false)
公式解析:
  • 判断需求关联缺陷 归档日期>完成日期
  • 并且需求关联缺陷的归档日期和完成日期不为空
  • 满足以上条件则对其进行计数
进阶场景
相等判断
场景
公式
判断角色是否和人员字段相等
具体配置:
指标:countif({工作项id},filter({参与人员}.{流程角色},each.{名称}=="处理人").{角色人员}!={流程节点}.{节点人员}.{负责人})
  • 可复制指标:countif(${工作项id},filter(${参与人员}.${流程角色},each.${名称}=="处理人").${角色人员}!=${流程节点}.${节点人员}.${负责人})
公式解析:
  • 使用filter函数过滤参与人员
  • 判断条件:角色名称为处理人,并且角色人员不等于责任人
  • 对工作项进行计数
统计不同bug负责人在需求上投入的人力
维度返回和关联缺陷角色人员相等的需求节点负责人
具体配置:
  • 维度:FILTER(${流程节点}.${节点人员},CONTAINS($related{缺陷-关联需求}.${经办人},each.${全部人员}))
  • 指标:估分插值(求和)
公式解析:
  • 关联工作项{缺陷-关联需求}需通过@唤起
统计不同bug负责人在需求上投入的人力
维度返回和关联缺陷单选人员字段相等的需求节点负责人
具体配置:
  • 维度:FILTER(${流程节点}.${节点人员},each.${全部人员}==$related{缺陷-关联需求}.${负责人})
  • 指标:估分插值(求和)
公式解析:
  • 关联工作项{缺陷-关联需求}需通过@唤起
空值判断
场景
公式
判断节点负责人为空
具体配置:
  • 指标:countIf({流程节点}.{节点 ID},empty({流程节点}.{节点人员}.{负责人})==true)
  • 可复制指标:countIf(${流程节点}.${节点 ID},empty(${流程节点}.${节点人员}.${负责人})==true)
公式解析:
  • empty():判断一个字段是否为空,空返回 true,非空返回 false
  • 判断节点负责人是否为空,为空则对节点进行计数
角色/节点人员
场景
公式
展示某团队的节点人员
具体配置:
  • 维度:filter({流程节点}.{节点人员},contains(each.{所属团队},@团队名称))
  • 可复制维度:filter(${流程节点}.${节点人员},contains(each.${所属团队},$team{团队名称}))
公式解析:
  • filter():用于对源范围条件过滤后,生成一个新的对象数组
  • each.:点语法;
  • contains():判断数组是否包含某一个元素,是返回 true,反之返回 false
  • 使用filter()函数,过滤筛选节点人员是否属于指定团队
展示开发角色上的人员
具体配置:
  • 维度:filter({参与人员}.{流程角色},each.{名称}=="开发").{角色人员}
  • 可复制维度:filter(${参与人员}.${流程角色},each.${名称}=="开发").${角色人员}
公式解析:
  • filter():用于对源范围条件过滤后,生成一个新的对象数组
  • each.:点语法;
  • 使用filter()函数,过滤筛选开发角色上的人员
展示开发节点上的节点负责人
具体配置:
  • 维度:filter({流程节点},each.{节点名称}=="开发").{节点人员}.{负责人}
  • 可复制维度:filter(${流程节点},each.${节点名称}=="开发").${节点人员}.${负责人}
公式解析:
  • filter():用于对源范围条件过滤后,生成一个新的对象数组
  • each.:点语法;
  • 使用filter()函数进行过滤,并找到开发节点上的负责人
计算角色人员个数
具体配置:
  • 指标:countDistinctIf({参与人员}.{流程角色}.{角色人员},{参与人员}.{流程角色}.{名称}=="PM")
  • 可复制指标:countDistinctIf(${参与人员}.${流程角色}.${角色人员},${参与人员}.${流程角色}.${名称}=="PM")
公式解析:
  • countDistinctIf():去重计数(带条件的)
  • 使用countDistinctIf()函数,判断流程角色名称是否为“PM”,满足条件则对角色人员进行计数
计算需求内两个角色的估分比
具体配置:
  • 指标:sum(filter({流程节点}.{节点人员}.{人员估分排期},each.{角色名称}=="PM").{人员估分})/sum(filter({流程节点}.{节点人员}.{人员估分排期},each.{角色名称}=="DA").{人员估分})
  • 可复制指标:sum(filter(${流程节点}.${节点人员}.${人员估分排期},each.${角色名称}=="PM").${人员估分})/sum(filter(${流程节点}.${节点人员}.${人员估分排期},each.${角色名称}=="DA").${人员估分})
公式解析:
  • filter():用于对源范围条件过滤后,生成一个新的对象数组
  • each.:点语法;
  • 使用filter()函数过滤筛选节点人员
  • 用PM角色的人员估分 / DA角色的人员估分,得出估分比
判断指定人员作为某角色参与的需求数量
具体配置:
  • 单人:COUNTIF(${工作项id},CONTAINS(${PM},$user{小鹏}))
  • 多人:COUNTIF(${工作项id},CONTAINSANY(${PM},[$user{小鹏},$user{丽丽}]))
公式解析:CONTAINS判断,PM角色中是否包含小鹏,如果包含通过countif进行计数。
判断指定人员作为节点负责人参与的需求数量
具体配置:
  • 单人:COUNTIF(${工作项id},${流程节点}.${节点人员}==$user{小鹏})
  • 多人:COUNTIF(${工作项id},CONTAINS([$user{小鹏},$user{丽丽}],${流程节点}.${节点人员}))
公式解析:CONTAINS判断,节点负责人是否是小鹏或者丽丽,如果是通过countif进行计数。
节点信息计算
场景
公式
计算某个节点上的参与人员中属于某个团队的人员个数
具体配置:
  • 指标:countdistinct(filter({流程节点}.{节点人员},contains({流程节点}.{节点人员}.{所属团队},@团队名称)))
  • 可复制指标:countdistinct(filter(${流程节点}.${节点人员},contains(${流程节点}.${节点人员}.${所属团队},$team{团队})))
公式解析:
  • countDistinct ():用于对字段进行去重计数 ;
  • filter():用于对源范围条件过滤后,生成一个新的对象数组
  • contains()判断数组是否包含某一个元素,是返回 true,反之返回 false
  • 使用filter()函数进行过滤节点人员
  • 通过contains()函数判断节点人员是否属于某团队,嵌套在countDistinct函数内进行去重计数
计算多个并行节点的最晚完成时间
具体配置:
  • 维度:max(filter({流程节点},each.{节点名称}=="节点1"||each.{节点名称}=="节点2").{节点实际结束时间})
  • 可复制维度:max(filter(${流程节点},each.${节点名称}=="节点1"||each.${节点名称}=="节点2").${节点实际结束时间})
公式解析:
  • filter():用于对源范围条件过滤后,生成一个新的对象数组
  • each.:点语法
  • 使用filter()函数进行过滤流程节点,获取并行节点1和节点2的实际结束时间
计算指定节点已完成的子任务数量
具体配置:
  • 指标:COUNT(FILTER(FILTER(${流程节点},each.${节点名称}=="开发").${节点子任务},each.${任务状态}==$option{已完成}))
公式解析:
  • FILTER(${流程节点},each.${节点名称}=="开始").${节点子任务}:找到名字叫开发的节点并返回他的子任务;
  • FILTER(FILTER(${流程节点},each.${节点名称}=="开发").${节点子任务},each.${任务状态}==$option{已完成}):判断改子任务的状态等于已完成;
  • 通过count针对已完成的子任务计数。
其他
场景
公式
判断多选字段
具体配置:
  • 指标:countif({工作项id},contains({标签},超时))
  • 可复制指标:countif(${工作项id},contains(${标签},$option{超时}))
公式解析:
  • contains():判断数组是否包含某一个元素,是返回 true,反之返回 false
  • 使用contains函数找到标签为超时的工作项并计数
判断开关字段
具体配置:
  • 指标:countif({工作项id},{需要安全合规}==true)
  • 可复制指标:countif(${工作项id},${需要安全合规}==true)
公式解析:判断需要安全合规开关字段==true,符合条件则对工作项进行计数
给字段赋值
具体配置:
  • 指标:count({优先}=="待定")
  • 可复制指标:count(${优先}=="待定")
公式解析:给优先字段赋值“待定”
计算当月的工作日天数
具体配置:
  • 指标:workdaysBetween(toStartOfMonth(timelineCursor()),timelineCursor())
  • 可复制指标:workdaysBetween(toStartOfMonth(timelineCursor()),timelineCursor())
公式解析:
  • timelineCursor():取维度 timeline 的切片时间;
  • toStartOfMonth():取日期所在月的第一天
  • workdaysBetween():返回两个日期之间的工作日天数,值为 date2-date1 的结果
  • 计算当月的工作日天数
动态计算上月数据
维度:timeline
指标:
  • 上月第一天:TOSTARTOFMONTH(DATEADD(TOSTARTOFMONTH(TIMELINECURSOR()),-1))
  • 上月最后一天:DATEADD(TOSTARTOFMONTH(TIMELINECURSOR()),-1)
先进生产力和业务协同平台
联系我们立即试用

先进团队,先用飞书

欢迎联系我们,飞书效能顾问将为您提供全力支持
分享先进工作方式
输送行业最佳实践
全面协助组织提效
联系我们立即试用