我们经常需要在表达式中构建逻辑条件,例如,根据列值或截获的错误条件来实现不同的计算。在这些情况下,你可以使用 DAX 中的逻辑函数。在处理 DAX 表达式中的错误一文,你已经了解到这类 DAX 表达式的两个最重要的函数是 IF 和 IFERROR。
了解逻辑函数
逻辑函数非常直观,函数的名字就代表了功能,它们是 AND, FALSE, IF, IFERROR, NOT, TRUE 和 OR。例如,你希望仅当价格列包含正确的数值时,才将数量乘以价格,则可以使用以下模式:
- Amount = IFERROR ( Sales[Quantity] * Sales[Price], BLANK ( ) )
复制代码
如果你没有使用 IFERROR,并且价格列包含无效的数字,那么计算列将提示错误,因为如果单个行产生了计算错误,这个错误将传递到整个列。但是,使用 IFERROR 会截获错误,并将其替换为空值。在处理 DAX 表达式中的错误一文的最后,你将了解到 IFERROR 是个需要谨慎使用的函数。
SWITCH
这个类别中另一个有趣的函数是 SWITCH,当你有一个包含少量不重复值的列,并且希望根据列值获得不同的行为时,它非常有用。例如,产品表的尺寸列包含 L、M、S、XL,你可能希望新建一列来解码这些值。你可以通过使用嵌套的 IF 函数获得结果:
- SizeDesc =
- IF (
- Product[Size] = "S",
- "Small",
- IF (
- Product[Size] = "M",
- "Medium",
- IF (
- Product[Size] = "L",
- "Large",
- IF ( Product[Size] = "XL", "Extra Large", "Other" )
- )
- )
- )
复制代码
使用 SWITCH 可以更方便地表达同一个公式:
- SizeDesc =
- SWITCH (
- Product[Size],
- "S", "Small",
- "M", "Medium",
- "L", "Large",
- "XL", "Extra Large",
- "Other"
- )
复制代码
后一种表达式虽然性能没有变化,但代码的可读性更好,因为在引擎内部,DAX 将 SWITCH 语句转换为一组嵌套的 IF 函数。
SWITCH 的特殊用法
关于 SWITCH 函数有个有趣的用法,你可以用它来检查同一个表达式中的多个条件,因为 SWITCH 被转换为一组嵌套 IF,其中第一个匹配到的条件胜出,你可以使用此模式测试多个条件:
- SWITCH (
- TRUE (),
- Product[Size] = "XL"
- && Product[Color] = "Red", "Red and XL",
- Product[Size] = "XL"
- && Product[Color] = "Blue", "Blue and XL",
- Product[Size] = "L"
- && Product[Color] = "Green", "Green and L"
- )
复制代码使用 TRUE 作为第一参数的作用是,返回条件判断 List 中为第一个为 TRUE 的结果 |