逻辑函数
下面的列表显示了可在表达式中使用的逻辑函数。
函数 | 说明 |
---|---|
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])
end
Case 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 |