Power BI 中的 SWITCH() 函数是一种逻辑 DAX 函数,相比于嵌套的 IF() 语句,它能以更有条理、可读性更高的方式处理多重条件。
在本教程中,我们将详细讲解 SWITCH() 函数,讨论它是什么、如何使用,以及在使用该函数时的一些常见误区与最佳实践。
要开始学习 Power BI 和 DAX,您可以查看我们的 Power BI Fundamentals 技能路径,并随身备一份我们的 DAX 速查表,以便快速参考您将遇到的众多常用 DAX 函数。

Power BI 中的 SWITCH 函数是什么?
Power BI 的 DAX 中的 SWITCH() 函数可让您更轻松地编写条件语句。它会对一个表达式求值,并将其与一系列取值进行比较,返回第一个匹配的结果。
SWITCH() 可以替代多个嵌套的 IF() 语句,将多重条件浓缩进一个函数中。这会使 DAX 表达式更简洁、清晰,便于阅读与维护。同时也提升了公式的可读性,方便您和他人理解与修改您的计算。
基础语法与用法
SWITCH() 函数的基本语法为:
SWITCH(<expression>, <value>, <result>[, <value>, <result>]…[, <else>])技术支持
- Expression:要进行求值的表达式。
- Value:与表达式进行比较的取值。
- Result:当表达式与对应取值匹配时返回的结果。
- Else:可选结果,当没有任何取值与表达式匹配时返回。
这里有个阅读基础语法声明的小窍门(如上面的示例),您会在教程和微软 Power BI 官方文档中经常看到。上面的声明展示了两个 <value> 与 <result> 参数组,第二组用方括号括起,这意味着可以有多个值与结果的组合,且对 SWITCH() 函数来说是可选的。同理,函数的 <else> 部分也用方括号包裹,因此它也是可选项。
与嵌套 IF 语句的比较
在 DAX 中处理多重条件的传统方式通常需要嵌套 IF 语句,这会很快变得复杂且难以阅读。比如,处理四个条件通常需要三个嵌套的 IF 函数。相比之下,SWITCH() 通过允许使用清晰的条件-结果列表来简化这一过程,从而提高可读性与可维护性。
尽管多个嵌套 IF 语句也能实现与 SWITCH() 相同的结果,但 SWITCH() 依然更受青睐,因为它更易编写且更不容易出错。大量的 IF() 调用还可能对报表性能产生负面影响。不过需要记住,SWITCH() 同样可能影响报表性能。这也是我们将在本教程后面讨论如何优化 SWITCH() 函数以及相关最佳实践的原因。
适用于复杂计算的场景
SWITCH() 特别适用于表达式具有一组明确可能取值,并且每个取值都有相应返回结果的场景。
当条件数量增多时,它比多个嵌套的 IF() 更清晰、更高效。这使得 SWITCH() 成为在关注可读性与性能的复杂计算中极佳的选择。
不过,尽管 SWITCH() 能提升可读性,其相较于嵌套 IF() 的性能收益很大程度上取决于具体用例和底层数据模型。
如何在 Power BI 中使用 SWITCH 函数
以下示例展示了 SWITCH() 函数在 Power BI 中应对不同业务场景的多样性。通过用 SWITCH() 替代复杂的嵌套 IF() 语句,您可以获得更清晰、更易维护的 DAX 公式。
示例 1:销售分级分析
设想一家企业希望根据总销售额将销售划分成不同等级,以更有效地分析销售表现。
在下面的 DAX 公式中,我们使用 SWITCH() 函数根据总销售额分配销售类别。您会注意到我们在公式中将逻辑函数 TRUE() 作为表达式使用。这是因为 SWITCH() 只寻找精确匹配,而我们希望在公式中使用大于、小于等运算符。因此,通过将表达式设为 TRUE(),SWITCH() 会依次评估每个条件,直到找到匹配(即条件结果为 true)。
Sales Category =
SWITCH(
TRUE(),
[Total Sales] < 10000, "Low Sales",
[Total Sales] < 50000, "Medium Sales",
[Total Sales] >= 50000, "High Sales",
"Unknown")技术支持
以下是在 Power BI 中的结果:

示例 2:产品折扣策略
假设一家连锁零售商会根据产品的净售价应用不同的折扣百分比,以最大化利润。他们希望计算门店中折后销售的总金额。
在下面的 DAX 公式中,我们在变量中使用了 SWITCH() 函数。由于我们在报表的其他地方不需要重复使用折扣百分比的公式,因此可以减少重复计算,仅在本次折后销售的公式中对其求值。
DiscountedSales =
VAR DiscountPct = SWITCH(
TRUE,
Sales[Net Price] <= 150, 0.15,
Sales[Net Price] <= 500, 0.2,
Sales[Net Price] <= 1000, 0.3,
0
)
VAR DiscountAmount = Sales[SalesAmount] * (1 - DiscountPct)
RETURN
DiscountAmount技术支持
以下是在 Power BI 中的结果:

常见误区及规避方法
本节回顾在使用 SWITCH() 函数时的一些常见误区,并给出规避建议。
1. 在简单条件中过度使用
在本可用简单 IF 语句解决的场景下使用 SWITCH(),会让 DAX 公式不必要地复杂化。
因此,请将 SWITCH() 留给多重条件的场景。对于一到两个条件,为简洁起见可考虑使用 IF。
2. 大型数据集下的性能影响
在大型数据集中,大量使用 SWITCH(),尤其是配合复杂表达式,可能会拖慢报表性能。
通过使用变量预先计算复杂部分,来优化 SWITCH() 内部的表达式。变量能让 SWITCH() 表达式更简洁、更易理解,并通过减少冗余或不必要计算的机会间接促进优化。
将常见表达式或条件中的复杂部分只计算一次并存储在变量中,避免在 SWITCH() 内多次重复计算相同表达式。
3. 低效的默认值用法
在未充分考虑的情况下,误用 SWITCH() 的默认分支去处理错误或异常值,可能导致结果不正确。
清晰定义条件,并显式处理已知场景。使用 IFERROR 或 ISBLANK 等函数来管理异常或缺失值。
4. 忽视上下文
忘记 SWITCH() 在当前上下文中求值,可能导致意外结果,尤其在行上下文或筛选上下文中使用时。请查看我们的 Introduction to DAX 课程,其中对于 上下文有更详细的讨论。
在设计 SWITCH() 表达式时,务必考虑当前的行或筛选上下文。谨慎使用 CALCULATE() 等上下文转换函数按需调整上下文。
5. 条件顺序
忽视 SWITCH() 语句中条件的先后顺序会导致意外结果,因为 SWITCH() 会按照定义顺序评估条件,并采用第一个匹配的条件。
确保每个分支按正确的顺序出现,就像您在编写嵌套 IF() 语句时会做的那样。
SWITCH 的最佳实践
以下是高效使用 SWITCH() 的一些最佳实践:
-
用于多重条件:当您有两个以上的条件判断时,SWITCH() 是理想选择。与嵌套 IF() 相比,它让公式更易读、更易维护。
-
清晰定义所有分支:您的 SWITCH() 函数应覆盖所有可能情形,并包含默认分支以处理异常值。这样能让计算更稳健、更不易出错。
-
优化性能:尽量保持 SWITCH() 内部表达式的简洁,以避免在大型数据集上出现性能问题。使用变量存储中间结果,有助于降低计算负担。
-
充分测试:尤其在用 SWITCH() 处理复杂逻辑时,请在不同场景下充分测试结果,以便发现任何逻辑错误或遗漏的情形。
结论
如果您正在寻找一种在 Power BI 中处理多重条件的更高效、更灵活的方法,SWITCH() 就是答案。与嵌套 IF 语句不同,SWITCH() 将多重条件浓缩到单个函数中,使 DAX 表达式更简洁清晰,便于阅读和维护。同时,它还能提升公式的可读性,方便您和他人理解与修改计算。
不过,在使用 SWITCH() 时也要避免一些常见错误,并遵循我们在本教程中讨论的最佳实践。
如果您认真考虑成为一名 Power BI 开发者,请查看我们的逐步 BI 开发者入门指南,以及完整的 Data Analyst in Power BI 职业路径,它将教会您开始实际使用 Power BI 所需的一切知识。
Power BI 中的
SWITCH()函数是一种逻辑 DAX 函数,相比于嵌套的IF()语句,它能以更有条理、可读性更高的方式处理多重条件。在本教程中,我们将详细讲解
SWITCH()函数,讨论它是什么、如何使用,以及在使用该函数时的一些常见误区与最佳实践。要开始学习 Power BI 和 DAX,您可以查看我们的 Power BI Fundamentals 技能路径,并随身备一份我们的 DAX 速查表,以便快速参考您将遇到的众多常用 DAX 函数。
Power BI 中的 SWITCH 函数是什么?
Power BI 的 DAX 中的
SWITCH()函数可让您更轻松地编写条件语句。它会对一个表达式求值,并将其与一系列取值进行比较,返回第一个匹配的结果。SWITCH()可以替代多个嵌套的IF()语句,将多重条件浓缩进一个函数中。这会使 DAX 表达式更简洁、清晰,便于阅读与维护。同时也提升了公式的可读性,方便您和他人理解与修改您的计算。基础语法与用法
SWITCH()函数的基本语法为:这里有个阅读基础语法声明的小窍门(如上面的示例),您会在教程和微软 Power BI 官方文档中经常看到。上面的声明展示了两个
<value>与<result>参数组,第二组用方括号括起,这意味着可以有多个值与结果的组合,且对SWITCH()函数来说是可选的。同理,函数的<else>部分也用方括号包裹,因此它也是可选项。与嵌套 IF 语句的比较
在 DAX 中处理多重条件的传统方式通常需要嵌套 IF 语句,这会很快变得复杂且难以阅读。比如,处理四个条件通常需要三个嵌套的 IF 函数。相比之下,
SWITCH()通过允许使用清晰的条件-结果列表来简化这一过程,从而提高可读性与可维护性。尽管多个嵌套 IF 语句也能实现与
SWITCH()相同的结果,但SWITCH()依然更受青睐,因为它更易编写且更不容易出错。大量的IF()调用还可能对报表性能产生负面影响。不过需要记住,SWITCH()同样可能影响报表性能。这也是我们将在本教程后面讨论如何优化SWITCH()函数以及相关最佳实践的原因。适用于复杂计算的场景
SWITCH()特别适用于表达式具有一组明确可能取值,并且每个取值都有相应返回结果的场景。当条件数量增多时,它比多个嵌套的
IF()更清晰、更高效。这使得SWITCH()成为在关注可读性与性能的复杂计算中极佳的选择。不过,尽管
SWITCH()能提升可读性,其相较于嵌套IF()的性能收益很大程度上取决于具体用例和底层数据模型。如何在 Power BI 中使用 SWITCH 函数
以下示例展示了
SWITCH()函数在 Power BI 中应对不同业务场景的多样性。通过用SWITCH()替代复杂的嵌套IF()语句,您可以获得更清晰、更易维护的 DAX 公式。示例 1:销售分级分析
设想一家企业希望根据总销售额将销售划分成不同等级,以更有效地分析销售表现。
在下面的 DAX 公式中,我们使用
SWITCH()函数根据总销售额分配销售类别。您会注意到我们在公式中将逻辑函数TRUE()作为表达式使用。这是因为SWITCH()只寻找精确匹配,而我们希望在公式中使用大于、小于等运算符。因此,通过将表达式设为TRUE(),SWITCH()会依次评估每个条件,直到找到匹配(即条件结果为 true)。以下是在 Power BI 中的结果:
示例 2:产品折扣策略
假设一家连锁零售商会根据产品的净售价应用不同的折扣百分比,以最大化利润。他们希望计算门店中折后销售的总金额。
在下面的 DAX 公式中,我们在变量中使用了
SWITCH()函数。由于我们在报表的其他地方不需要重复使用折扣百分比的公式,因此可以减少重复计算,仅在本次折后销售的公式中对其求值。以下是在 Power BI 中的结果:
常见误区及规避方法
本节回顾在使用
SWITCH()函数时的一些常见误区,并给出规避建议。1. 在简单条件中过度使用
在本可用简单 IF 语句解决的场景下使用
SWITCH(),会让 DAX 公式不必要地复杂化。因此,请将
SWITCH()留给多重条件的场景。对于一到两个条件,为简洁起见可考虑使用 IF。2. 大型数据集下的性能影响
在大型数据集中,大量使用
SWITCH(),尤其是配合复杂表达式,可能会拖慢报表性能。通过使用变量预先计算复杂部分,来优化
SWITCH()内部的表达式。变量能让SWITCH()表达式更简洁、更易理解,并通过减少冗余或不必要计算的机会间接促进优化。将常见表达式或条件中的复杂部分只计算一次并存储在变量中,避免在
SWITCH()内多次重复计算相同表达式。3. 低效的默认值用法
在未充分考虑的情况下,误用
SWITCH()的默认分支去处理错误或异常值,可能导致结果不正确。清晰定义条件,并显式处理已知场景。使用
IFERROR或ISBLANK等函数来管理异常或缺失值。4. 忽视上下文
忘记
SWITCH()在当前上下文中求值,可能导致意外结果,尤其在行上下文或筛选上下文中使用时。请查看我们的 Introduction to DAX 课程,其中对于 上下文有更详细的讨论。在设计
SWITCH()表达式时,务必考虑当前的行或筛选上下文。谨慎使用CALCULATE()等上下文转换函数按需调整上下文。5. 条件顺序
忽视
SWITCH()语句中条件的先后顺序会导致意外结果,因为SWITCH()会按照定义顺序评估条件,并采用第一个匹配的条件。确保每个分支按正确的顺序出现,就像您在编写嵌套
IF()语句时会做的那样。SWITCH 的最佳实践
以下是高效使用
SWITCH()的一些最佳实践:用于多重条件:当您有两个以上的条件判断时,
SWITCH()是理想选择。与嵌套IF()相比,它让公式更易读、更易维护。清晰定义所有分支:您的
SWITCH()函数应覆盖所有可能情形,并包含默认分支以处理异常值。这样能让计算更稳健、更不易出错。优化性能:尽量保持
SWITCH()内部表达式的简洁,以避免在大型数据集上出现性能问题。使用变量存储中间结果,有助于降低计算负担。充分测试:尤其在用
SWITCH()处理复杂逻辑时,请在不同场景下充分测试结果,以便发现任何逻辑错误或遗漏的情形。结论
如果您正在寻找一种在 Power BI 中处理多重条件的更高效、更灵活的方法,
SWITCH()就是答案。与嵌套 IF 语句不同,SWITCH()将多重条件浓缩到单个函数中,使 DAX 表达式更简洁清晰,便于阅读和维护。同时,它还能提升公式的可读性,方便您和他人理解与修改计算。不过,在使用
SWITCH()时也要避免一些常见错误,并遵循我们在本教程中讨论的最佳实践。如果您认真考虑成为一名 Power BI 开发者,请查看我们的逐步 BI 开发者入门指南,以及完整的 Data Analyst in Power BI 职业路径,它将教会您开始实际使用 Power BI 所需的一切知识。