基于条件的计算列
计算列时,您可能想要根据某些条件是否满足来获取不同的表达式结果。可以使用逻辑函数 If() 或Case() 在表达式中设置条件。
示例
表达式
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 更复杂的条件。
下面显示了生成的计算列: