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