我们经常需要在表达式中构建逻辑条件,例如,根据列值或截获的错误条件来实现不同的计算。在这些情况下,你可以使用 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 的结果
SWITCH这个特殊用法很实用,之前知道第一个参数使用True后面进行判断,但是不太了解在后面的参数中使用多条件判断,这次学习到了。