使用 CASE 表达式

了解 CASE 表达式的格式和组件以及可以构建的一些常用的 CASE 表达式,以在报告应用程序中创建计算字段。

工作原理

CASE 表达式是一个条件表达式,可被用来更改表示数据的方式。CASE 表达式允许一个语句返回几个可能的结果之一,具体取决于几个条件中哪一个条件的结果为真。

您可以使用简单公式生成器来利用 CASE 表达式创建计算字段。

要了解更多信息,请参考创建计算字段

CASE 表达式格式

CASE 表达式的格式如下:

CASE 
WHEN 这是真的,THEN 返回这个
WHEN 这是真的,THEN 返回这个

ELSE 返回这个
END

CASE 表达式组件

组件描述
CASECASE 表达式中的开始组件
WHEN

定义条件,例如 WHEN 问题已关闭?等于 0

CASE 表达式中可包含多个 WHEN 组件。WHEN 组件必须先于 ELSE 组件。

THEN

链接到 WHEN 组件,并指示报告应用程序当条件满足时要返回的内容

例如,WHEN 问题已关闭?等于 0 THEN '问题打开’

ELSE一个组件,用于通知报告应用程序当不符合任何 WHEN 条件时应当做什么
END

定义 CASE 表达式的结尾

为了使 CASE 表达式有效,您必须添加 END。

CASE 表达式执行顺序

CASE 表达式按从左到右的顺序执行。如果一个字段匹配多个 WHEN 条件,则它将返回第一个条件的结果。

例如,如果您有一个名为项目 X 的项目以及具有以下逻辑的计算字段,则该字段将显示 “SOX”:

CASE 
WHEN 项目名称 = 项目 X THEN 'SOX'
WHEN 项目名称不为空 THEN '工资总支出'
ELSE '差旅费和招待费'
END

常用的 CASE 表达式

下表提供了您可以使用简单公式生成器构建的常用 CASE 表达式列表:

说明

报告应用程序服务器时间是 UTC,且当前日期字段以 UTC 显示。UTC 是一种替代格林尼治标准时间(GMT)的全球时间标准。在大多数情况下,这两个标准是等效的。对于基于 UTC 的日期时间数据,如果到 UTC 的转换向前或向后跨越了午夜,日期会调整一天。

计算字段名称CASE 表达式描述其他考虑事项

测试状态

CASE WHEN 控制测试准备者 IS NOT NULL AND 控制测试详情审核者 IS NOT NULL AND 控制测试一般审核者 IS NOT NULL THEN '已完成'

WHEN 控制测试准备者 IS NOT NULL OR 控制测试详情审核者 IS NOT NULL OR 控制测试一般审核者 IS NOT NULL THEN '进行中' ELSE '未开始' END

显示带有计算测试状态的控制测试摘要
  • 增加过滤器和节 = 项目名称
  • 禁止重复目标名称目标 URL控制状态
  • 控制 SYS ID 上应用不重复计数的聚合函数
  • 应用条件格式化以显示特定颜色及测试状态(红色 = 未开始,黄色 = 进行中,绿色 = 完成)
  • 目标名称字段中进行计数汇总小计

已测试控制

控制通过

控制失败

CASE WHEN 控制有效?IS NOT NULL THEN 1 ELSE 0 END

CASE WHEN 控制有效?= 1 THEN 1 ELSE 0 END

CASE WHEN 控制有效 = 0 THEN 1 ELSE 0 END

显示一个控制测试摘要,说明控制是通过还是失败
  • 使用外勤工作视图
  • 使用过滤器项目名称在列表中项目名称不在列表中
  • 小计项目名称字段
  • 抑制重复字段
Is_Overdue

CASE WHEN 问题已关闭?= 1 THEN '关闭' 

WHEN 问题补救 IS NULL THEN ''

WHEN 当前日期 < 问题补救日期 THEN '否' ELSE '是' END

  • 显示问题补救是否已过期
  • 与 Not_Yet_Due 类似

条件按从左到右的顺序执行。如果一个字段匹配多个 WHEN 条件,则它将返回第一个条件的结果。

Is_Overdue_Aging

CASE WHEN 问题已关闭 = 0 AND 补救前的天数 < 0 THEN 补救前的天数 * 1 ELSE 0 END

显示补救截止日期的剩余天数
  • 补救天数是显示离补救截止日期的剩余天数(正数)的字段。
  • 过期问题被显示为负数。
  • 如果问题没有过期,则返回 0。
Is_Overdue_Bucket

WHEN 问题已关闭 = 0 AND 补救天数 <= -1 AND 补救天数 >= -30 THEN '0-30'

WHEN 问题已关闭 = 0 AND 补救前的天数 <= -31 AND 补救前的天数 >= -60 THEN '31-60'

WHEN 问题已关闭 = 0 AND 补救前的天数 <= -61 AND 补救前的天数 >= -90 THEN '61-90'

WHEN 问题已关闭 = 0 AND 补救天数 <= -91 '91+ ELSE '当前' END

将老化桶分配给问题过期的天数
  • 根据天数将问题分配给桶
  • 如果没有任何条件适用,则返回 '当前'。
Not_Yet_Due

CASE WHEN 问题已关闭 = 0 AND 当前日期 < 问题补救日期 AND 问题补救日期 IS NOT NULL THEN 1

WHEN 问题已关闭 = 0 AND 问题补救日期 IS NULL THEN 0

WHEN 问题已关闭 = 0 AND 问题补救日期 <= 当前日期 AND 问题补救日期 IS NOT NULL THEN 0

WHEN 问题已关闭 = 1 THEN 0 ELSE 9999 END

类似于 Is_Overdue

处理下列条件:

  • 问题尚未被关闭 AND 当前日期早于补救日期 AND 补救日期不为空,则 1(计为尚未到期)。
  • 问题尚未关闭 AND 补救日期为空 则 0(不计入,到期日期未知)。
  • 问题尚未关闭 AND 补救日期不为空并且早于或等于当前日期,则 0(不计入,已过期)
  • 问题已关闭则 0(不计入,不适用)
  • 如果没有条件为真,则返回 9999 。