If 和 Switch 函数

适用于:画布应用 Dataverse 公式列桌面流模型驱动应用 Power Platform CLI

确定集中的任何条件是否为 true (If),或确定公式的结果是否与集中的任何值一致 (Switch),再返回结果或执行操作。

描述

If 函数会一直测试一个或多个条件,直到结果为 true 时为止。 如果结果为 true,将返回相应的值。 否则,将返回默认值。 无论属于上述哪种情况,返回的值可以是要显示的字符串、要求值的公式或另一种形式的结果。

Switch 函数先对公式求值,再确定结果是否与指定序列中的任何值一致。 如果找到匹配值,将返回相应的值。 否则,将返回默认值。 无论属于上述哪种情况,返回的值可以是要显示的字符串、要求值的公式或另一种形式的结果。

虽然 IfSwitch 函数非常相似,但应使用最适合自身情况的函数:

  • 使用 If 函数对一个条件求值。 此函数的最常见语法为 If( Condition, ThenResult, DefaultResult ),提供其他编程工具中常见的“if … then … 在其他编程工具中看到的 else …" 模式。
  • 使用 If 函数对多个不相关条件求值。 在 Power Apps 中,可以指定多个条件,而无需嵌套 If 公式(不同于 Microsoft Excel)。
  • 使用 Switch 对一个条件求值,以进行多次匹配。 在这种情况下,还可以使用 If 函数,但需要为每次匹配重复执行公式。

可以在行为公式中结合使用这两个函数,在两个或多个操作之间形成分支。 操作只由一个分支触发。 将按顺序对条件和匹配进行求值,如果条件为 true 或找到匹配项,将停止求值。

如果没有条件为 true、找不到任何匹配项且未指定默认结果,将返回 Blank

语法

If( Condition, ThenResult [, DefaultResult ] )
If( Condition1, ThenResult1 [, Condition2, ThenResult2, ... [ , DefaultResult ] ] )

  • Condition(s) - 必需。 要测试是否为 true 的公式。 此类公式通常包含比较运算符(如 <>=)和测试函数(如 IsBlankIsEmpty)。
  • ThenResult(s) - 必需。 对计算结果为 true 的条件返回的对应值。
  • DefaultResult - 可选。 没有条件求值为 true 时返回的值。 如果未指定此参数,则将返回空白

Switch( Formula, Match1, Result1 [, Match2, Result2, ... [, DefaultResult ] ] )

  • Formula - 必需。 为进行匹配而求值的公式。 此公式仅求值一次。
  • Match(s) - 必需。 要与 Formula 结果比较的值。 如果找到完全匹配项,将返回相应的 Result
  • Result(s) - 必需。 找到完全匹配项时返回的相应值。
  • DefaultResult - 可选。 如果找不到匹配项,将返回此值。 如果未指定此参数,则将返回空白

示例

公式中的值

在下面这些示例中,Slider 控件(名为 Slider1)的值为 25

公式 说明 结果
If( Slider1.Value = 25, "Result1" ) 条件为 true,并返回相应结果。 “Result1”
If( Slider1.Value = 25, "Result1", "Result2" ) 条件为 true,并返回相应结果。 “Result1”
If( Slider1.Value>1000, "Result1" ) 条件为 false,且未提供 DefaultResult blank
If( Slider1.Value>1000, "Result1", "Result2" ) 条件为 false,但提供了 DefaultResult,将返回此结果。 “Result2”
If( Slider1.Value = 25, "Result1", Slider1.Value > 0, "Result2" ) 第一个条件为 true,并返回相应结果。 第二个条件也为 true,但未进行求值,因为它在参数列表中的出现时间要晚于比求值为 true 的条件。 “Result1”
If( IsBlank( Slider1.Value ), "Result1", IsNumeric( Slider1.Value ), "Result2" ) 第一个条件为 false,因为滑块不是空白。 第二个条件为 true,因为滑块的值是数字,并返回相应结果。 “Result2”
If( Slider1.Value>1000, "Result1", Slider1.Value>50, "Result2", "Result3") 第一个和第二个条件均为 false,但提供了 DefaultResult,将返回此结果。 “Result3”
Switch( Slider1.Value, 25, "Result1" ) 滑块的值与要检查的第一个值一致,将返回相应的结果。 “Result1”
Switch( Slider1.Value, 20, "Result1", 25, "Result2", 30, "Result3" ) 滑块的值与要检查的第二个值一致,将返回相应的结果。 “Result2”
Switch( Slider1.Value, 20, "Result1", 10, "Result2", 0, "Result3", "DefaultResult" ) 滑块的值与要检查的任何值都不一致。 因为提供了 DefaultResult,所以将返回此结果。 “DefaultResult”

在行为公式中分支

在下面这些示例中,用户在名为 FirstNameText input 控件中键入的值为“John”。

公式 描述 结果
If( ! IsBlank( FirstName.Text ), Navigate( Screen1, ScreenTransition.None ) ) 条件为 true,因此将运行 Navigate 函数。 可使用 IsBlank 函数测试所需的窗体字段是否已填充。 如果 FirstNameblank,此公式不会产生任何影响。 true

显示更改为 Screen1
If( IsBlank( FirstName.Text ), Navigate( Screen1, ScreenTransition.None ), Back() ) 没有 ! 运算符,条件为 false,因此不会运行 Navigate 函数。 因为 Back 函数作为 DefaultResult 提供,所以将运行此函数。 true

将重新显示之前显示的屏幕。
Switch( FirstName.Text, "Carlos", Navigate( Screen1, ScreenTransition.None ), "Kirstin", Navigate( Screen2, ScreenTransition.None ), "John", Navigate( Screen3, ScreenTransition.None ) ) FirstName.Text 的值与“Carlos”、“Kirstin”和“John”(按此顺序)进行比较。 因为找到与“John”匹配的项,所以应用将转到 Screen3 true

切换显示 Screen3

分步操作

  1. 添加 Text input 控件,再将它命名为 Text1(如果默认名称不是这样的话)。

  2. Text1 中,键入 30

  3. 添加一个 Label 控件,然后将 Text 属性设置为以下公式:
    If( Value(Text1.Text) < 20, "Order MANY more!", Value(Text1.Text) < 40, "Order more!", Text1.Text )

    此时,Label 控件显示 Order more!,因为 Text1 的值大于 20 但小于 40。

  4. Text1 中,键入 15

    此时,Label 控件显示 Order MANY more!,因为 Text1 的值小于 20。

  5. Text1 中,键入 50

    此时,Label 控件显示所键入的值,因为 Text1 的值大于 40。