基于条件的计算列
计算列时,您可能想要根据某些条件是否满足来获取不同的表达式结果。可以使用逻辑函数 If()
或Case()
在表达式中设置条件。
If()
使用函数 If()
时,可以指定为真或为假的条件,后接在条件为真时返回的内容以及在条件为假时返回的内容。
示例
表达式
If(([Amount]<10),"low","high")
意味着当列“Amount”中的行值小于 10 时,将在结果中返回值“low”;而当值为 10 或更大时,将返回值“high”。
如下图中所示:

换言之,函数 If()
会将行分为两个组;其中一个组包含指定的条件为真(在结果中返回“low”)的行,另一个组包含指定的条件为假(在结果中返回“high”)的行。
如果要返回的值是聚合值,则会单独处理两个组。下表以添加的表达式为例说明了这点。
If(([Amount]<10),Avg([Amount]),Avg([Amount]))
该表达式包含平均值聚合。在此示例中,为两个组指定了相同的聚合,但可以使用不同的聚合。

对于小于 10 的行值,该组是“true”组,将返回平均值 6 ((5+7)/2);对于“false”组,平均值为 13 ((14+10+15)/3)。
函数 if()
还可以与 and
或 or
结合使用。例如,表达式
If(([Customer age]<20) and ([Gender]="Female"),"girl","other")
将生成以下添加的计算列:

Case()
如果要编写条件结果不仅限于 true 和 false 的表达式,您可以使用函数 case()
。Case()
有两种不同的使用方式,下面举例介绍了这两种方式。
示例 1
假设以下书籍和视频的价格分别下降了 10% 和 50%,则价格列表需要更新。

由于下降幅度因产品类型而异,因此可以使用表达式 case()
来计算新价格:
case [Type]
when "Book" then [Price]*0.9
when "Video" then [Price]*0.5
else [Price]
end

在此示例中,case()
仅根据表达式中的每个 when
选项检查“Type”。
示例 2
在第二个示例中,使用 case()
来计算几名学生的测试结果。有以下三个计算级别:Failed(总分低于 100)、Passed 和 Excellent(总分为 160 或以上)。

在此示例中,Case()
为每个 when
选项单独计算条件:
case
when ([Test A] + [Test B])<100 then "Failed"
when ([Test A] + [Test B])>=160 then "Excellent"
else "Passed"
end
这样,可以实施比示例 1 更复杂的条件。
下面显示了生成的计算列:

case()
形式,都可以在表达式中包含多个 when
/then
条件。条件的执行顺序
表达式 case()
的各个部分按照从上到下的顺序执行。请参见以下表达式和生成的列:
case
when [Number]<40 then "yes"
when [Number]<70 then "no"
else "x"
end

也就是说,小于 40 的数字设置为“yes”,并且不会更改。在该表达式的下一部分中,小于 70 的数字设置为“no”,并且只会影响剩余的行。