SQL 使用说明
效能管理提供了内置的 SQL 能力,支持用户在现成的指标之外自行制作更多指标。使用位置在卡片编辑页中⬇️

使用流程分为 3 个步骤:
- 获取字段
- 写计算公式
- 应用
1.获取字段
Performance 中的数据源来源有 2 种:自动同步的项目管理中的工作项属性,预处理过的属性相关的数据。
可以从下图中红圈位置处查看⬇️,每个数据集均有说明。

其中亦提供了用于写计算公式的sql表达式,点击图中按钮即可直接复制使用⬇️

所有数据集的预处理内容说明⬇️
1.工作项
| 维度 | 计算方式 | 说明 |
|---|---|---|
| 完成时间 | 工作项状态类型最后一次切换为「已完成」的时间 | |
| 是否逾期 | 状态类型为已完成的工作项,完成时间晚于截止日期,则为“是”,否则为“否” | “是”或“否” |
| 故事点完成量 | 工作项状态类型非「已完成」时,值为0;状态类型为「已完成」时,该值等于「故事点」 | |
| 生存时长 | 工作项完成时间 - 工作项创建时间 | |
| 响应时长 | 工作项「进行中」状态类型最早出现时间 - 工作项创建时间 |
| 指标 | 计算方式 | 说明 |
|---|---|---|
| 工作项按时交付数量 | 「是否逾期」为“否”的工作项数量 | |
| 工作项按时交付率 | 「是否逾期」为“否”的工作项数量 / 状态类型为已完成的工作项数量 | |
| 内部发现的缺陷数 | 「是否为线上缺陷」= 否的工作项数量 | 有使用「是否为线上缺陷」属性的工作项才会被计算 |
| 外部发现的缺陷数 | 「是否为线上缺陷」= 是的工作项数量 | 有使用「是否为线上缺陷」属性的工作项才会被计算 |
| 缺陷探测率 | 内部发现的缺陷数占全部缺陷比重。内部发现的缺陷数量 / [(内部发现的缺陷数量 +外部发现的缺陷数量)] * 100% | 使用该指标时,需要增加筛选条件:工作项类型 == 有使用「是否为线上缺陷」字段的工作项类型 |
| 缺陷逃逸率 | 外部发现的缺陷数占全部缺陷比重。外部发现的缺陷数量 / [(内部发现的缺陷数量 +外部发现的缺陷数量)] * 100% | 使用该指标时,需要增加筛选条件:工作项类型 == 有使用「是否为线上缺陷」字段的工作项类型 |
| 工作项完成进度 | 状态类型为「已完成」的工作项数量占全部工作项数量的比重 | 「全部工作项数量」取决于筛选范围 |
| 线上缺陷密度 | 线上缺陷个数 / 需求个数 |
2.项目
| 维度 | 计算方式 | 说明 |
|---|---|---|
| 是否归档 | “是”或“否” | |
| 延期率 | [(当前日期 - 计划结束日期)/(计划结束日期 - 计划开始日期)] * 100% | 只在计算进行中的项目时有意义;需要在筛选条件中限制状态类型为进行中的项目 |
3.迭代
| 维度 | 计算方式 | 说明 |
|---|---|---|
| 迭代实际完成日期 | 迭代阶段类型最后一次切换为「已完成」的日期 | |
| 是否按时交付 | 「迭代实际完成日期」早于等于「计划完成日期」则为“是”,否则则为“否” | “是”或“否” |
| 指标 | 计算方式 | 说明 |
|---|---|---|
| 按时交付数量 | 「是否按时交付」为“是”的迭代数量 | |
| 按时交付率 | 迭代按时交付数量 / 迭代阶段类型为已完成的迭代数量 |
4.工时
| 维度 | 计算方式 | 说明 |
|---|---|---|
| 工时 | 登记或预估工时的时长 | |
| 工时类型 | “登记”或“预估” | |
| 成员 | 添加登记或预估工时时选择的成员 | |
| 开始时间 | 工时的开始时间(不是创建时间) |
| 指标 | 计算方式 | 说明 |
|---|---|---|
| 总登记工时 | 登记工时的总和 | 根据筛选范围计算。如按项目、迭代、成员,按每天、每周、每月筛选 |
| 总预估工时 | 预估工时的总和 | 根据筛选范围计算。如按项目、迭代、成员,按每天、每周、每月筛选 |
| 预估偏差率 | (总登记工时 - 总预估工时)/ 总预估工时 * 100% | 根据筛选范围计算 |
| 日饱和度 | 用户每日登记工时 / 团队标准工作时长 * 100% | 使用折线图查看时,「时间单位」需设置成“天” |
| 周饱和度 | 每日饱和度按周求和 / 每周工作日 * 100% | 使用折线图查看时,「时间单位」需设置成“周” |
2.写计算公式
首先了解常用函数:
| 符号 | 意义 |
|---|---|
| + | 加 |
| - | 减 |
| * | 乘 |
| / | 除 |
| AVG | 取平均值 |
| MAX | 取最大值 |
| MIN | 取最小值 |
| COUNT | 计数 |
| COUNTIF | 有条件的计数 |
| SUM | 求和 |
| DISTINCT | 去重 |
| DATE_DIFF | 计算时间差 |
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
| = | 等于 |
| != | 不等于 |
| IN | 包含在某范围内 |
| NOT IN | 不包含在某范围内 |
| LIKE"%内容%" | 包含某内容 |
| IS NULL | 为空 |
| IS NOT NULL | 不为空 |
全量可用函数参见 clickhouse函数教程
具体使用方法示例
当你已选择「工作项」数据集:
计数——此时在sql输入框中输入:count(*),你会得到:工作项总数。
有条件的计数——输入:countIf(状态类型sql表达式='未开始'),你会得到:状态类型为“未开始”的工作项总数。
有多个条件的计数——输入:countIf(状态类型sql表达式='未开始' or 状态类型='进行中'),你会得到:状态类型为“未开始”或“进行中”的工作项总数。
求和——输入:sum(成本sql表达式),你会得到:总成本。
求比率:countIf(状态类型sql表达式='未开始')/count(*),你会得到:状态类型为“未开始”的工作项数占总数的比,简称未开始率。
求时间差:date_diff('day',startdate,enddate),你会得到:开始日期与结束日期相差的天数。
求平均值:avg(表达式),比如对时间差求平均,可以代入上一行表达式:avg(date_diff('day',startdate,enddate))
以上函数可以灵活组合使用,按需选择即可。
特殊值处理说明
自定义的状态值可以直接写中文,例如:状态表达式 = ‘审批进行中'。
对于系统状态值的写法,以未开始为例,应写:状态表达式 =‘{{status.todo}}'。所有需要特殊处理的系统状态值如下:
'status.todo': '未开始',
'status.inactive': '未激活',
'status.reopen': '重新打开',
'status.unpublished': '未发布',
'status.to_be_processed': '待处理',
'status.pending': '待办',
'status.fixed': '已修复',
'status.in_progress': '进行中',
'status.resolving': '处理中',
'status.in_implementation': '实现中',
'status.implemented': '已实现',
'status.done': '已完成',
'status.published': '已发布',
'status.rejected': '已拒绝',
'status.form_closed': '已关单',
'status.solved': '已解决',
'status.confirmed': '已确认',
"status.verified": '已验证',
'status.checked': '完成',
'status.close': '关闭',
另外,自定义的工作项类型可以直接写中文,例如:工作项类型表达式 = ‘合同'。
对于系统自带工作项类型的写法,以任务为例,应写:工作项类型表达式 =‘{{issue_type.task}}'。所有需要特殊处理的类型如下:
'issue_type.needs': '需求',
'issue_type.defect': '缺陷',
'issue_type.android_defect': 'Android缺陷',
'issue_type.web_defect': 'Web缺陷',
'issue_type.task': '任务',
'issue_type.work_order': '工单',
'issue_type.user_story': '用户故事',
'issue_type.sub_task': '子任务',
'issue_type.sub_needs': '子需求',
'issue_type.sub_check_item': '子检查项',
'issue_type.release': '发布',
3.应用
点击右下角按钮即可应用到图表⬇️

确认输出结果后,可以使用样式设置中的内容调整图表外观,以增加美观度
,如下图
。
