使用 CASE 表达式
了解 CASE 表达式的格式和组件以及可以构建的一些常用的 CASE 表达式,以在报告应用程序中创建计算字段。
工作原理
CASE 表达式是一个条件表达式,可被用来更改表示数据的方式。CASE 表达式允许一个语句返回几个可能的结果之一,具体取决于几个条件中哪一个条件的结果为真。
您可以使用简单公式生成器来利用 CASE 表达式创建计算字段。
要了解更多信息,请参考创建计算字段。
CASE 表达式格式
CASE 表达式的格式如下:
CASE
WHEN 这是真的,THEN 返回这个
WHEN 这是真的,THEN 返回这个
…
ELSE 返回这个
END
CASE 表达式组件
| 组件 | 描述 |
|---|---|
| CASE | CASE 表达式中的开始组件 |
| 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 | 显示带有计算测试状态的控制测试摘要 |
|
已测试控制 控制通过 控制失败 | 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 |
| 条件按从左到右的顺序执行。如果一个字段匹配多个 WHEN 条件,则它将返回第一个条件的结果。 |
| Is_Overdue_Aging | CASE WHEN 问题已关闭 = 0 AND 补救前的天数 < 0 THEN 补救前的天数 * 1 ELSE 0 END | 显示补救截止日期的剩余天数 |
|
| 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 | 处理下列条件:
|