逻辑函数
下面的列表显示了可在表达式中使用的逻辑函数。
| 函数 | 说明 |
|---|---|
Case | 条件语句具有两种不同的形式。 简单:
将对 已搜索:
当 输入多个 when/then 表达式,并以从左到右的顺序进行输入及求值。 有关详细信息,请参见下文。 示例:
有关更多示例,请见下文和基于条件的计算列。 |
If(Arg1,Arg2,Arg3)
| 当 Arg1=true 时将返回 Arg2,当 Arg1=false 将返回 Arg3。Arg1 是布尔类型,通常是比较的结果。Arg2 和 Arg3 可以为任何类型,但这两者都必须属于同一类型或同为空。第二个和第三个参数仅处理行的子集,会影响所有基于列的和累计的方法。有关详细信息,请参见下文。 示例:
有关更多示例,请见下文和基于条件的计算列。 |
Is Not Null
| 在 If- 或 Case- 语句中使用,以确定表达式是否生成空值(null 值)。示例:
如果表达式包含空值(null 值),您可以使用 |
Is Null
| 在 示例:
如果表达式包含空值(null 值),您可以使用 |
更多有关在表达式中使用 if 的信息:
在表达式中使用 if 语句时,第一个参数中的情况会限制第三个参数中要评估的值。要了解其工作原理,首先以简单的整数列为例:
| Col1 |
| 1 |
| 2 |
| 3 |
使用以下表达式插入计算的列:
if(Col1 < 2,
Max(Col1), Max(Col1))
这会导致新列带有两个不同的值:一个是所有小于 2 的值的最大值,一个是其他值的最大值(同时也是整个列中的最大值):
| Col1 | if(Col1 < 2, Max(Col1), Max(Col1))
|
| 1 | 1 |
| 2 | 3 |
| 3 | 3 |
If- 函数旨在将列分为两组,然后继续评估新组上的表达式。
如果您正在使用 Percentile 表达式,则根据第一种情况中拆分列的方式,相同的 Percentile 表达式会生成不同的结果:
| Col2 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
使用以下两个表达式插入两个列:
if (Col2 < 4, 0,
Percentile(Col2, 70))
if (Col2 < 6, 0,
Percentile(Col2, 70))
则会获得以下结果:
| Col2 | if (Col2 < 4, 0,
Percentile(Col2, 70))
| if (Col2 < 6,
0, Percentile(Col2, 70))
|
| 1 | 0 | 0 |
| 2 | 0 | 0 |
| 3 | 0 | 0 |
| 4 | 8.2 | 0 |
| 5 | 8.2 | 0 |
| 6 | 8.2 | 8.8 |
| 7 | 8.2 | 8.8 |
| 8 | 8.2 | 8.8 |
| 9 | 8.2 | 8.8 |
| 10 | 8.2 | 8.8 |
If”对数据的分组方式而更改。更多有关在表达式中使用 case 的信息:
使用 case 表达式时,“when”后面的条件会对整个列进行计算。“then”后面的参数对“when”条件定义的行进行计算。如果表达式中包含多个“when- then”对,那么“then”受到前面所有条件的限制(包括最后一个)。
下面以简单的整数列为例:
| Col1 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
使用以下表达式插入两个计算的列,命名为 Case Min 和 Case Max:
Case Min:
case
when [Col1]<Avg([Col1]) then Min([Col1])
when [Col1]<(Avg([Col1]) + 1) then Min([Col1])
else Min([Col1])
endCase Max:
case
when [Col1] < Avg([Col1]) then Max([Col1])
when [Col1] < (Avg([Col1]) + 1) then Max([Col1])
else Max([Col1])
end会生成如下结果:
| Col1 | Case Min | Case Max |
| 1 | 1 | 4 |
| 2 | 1 | 4 |
| 3 | 1 | 4 |
| 4 | 1 | 4 |
| 5 | 5 | 5 |
| 6 | 6 | 8 |
| 7 | 6 | 8 |
| 8 | 6 | 8 |