[知识体系] 逻辑函数

  [复制链接]
查看257173 | 回复183 | 2021-2-21 19:30:40 | 显示全部楼层 |阅读模式
我们经常需要在表达式中构建逻辑条件,例如,根据列值或截获的错误条件来实现不同的计算。在这些情况下,你可以使用 DAX 中的逻辑函数。在处理 DAX 表达式中的错误一文,你已经了解到这类 DAX 表达式的两个最重要的函数是 IFIFERROR

了解逻辑函数


逻辑函数非常直观,函数的名字就代表了功能,它们是 AND, FALSE, IF, IFERROR, NOT, TRUE 和 OR。例如,你希望仅当价格列包含正确的数值时,才将数量乘以价格,则可以使用以下模式:
  1. Amount = IFERROR ( Sales[Quantity] * Sales[Price], BLANK ( ) )
复制代码

如果你没有使用 IFERROR,并且价格列包含无效的数字,那么计算列将提示错误,因为如果单个行产生了计算错误,这个错误将传递到整个列。但是,使用 IFERROR 会截获错误,并将其替换为空值。在处理 DAX 表达式中的错误一文的最后,你将了解到 IFERROR 是个需要谨慎使用的函数。

SWITCH

这个类别中另一个有趣的函数是 SWITCH,当你有一个包含少量不重复值的列,并且希望根据列值获得不同的行为时,它非常有用。例如,产品表的尺寸列包含 L、M、S、XL,你可能希望新建一列来解码这些值。你可以通过使用嵌套的 IF 函数获得结果:
  1. SizeDesc =
  2. IF (
  3.     Product[Size] = "S",
  4.     "Small",
  5.     IF (
  6.         Product[Size] = "M",
  7.         "Medium",
  8.         IF (
  9.             Product[Size] = "L",
  10.             "Large",
  11.             IF ( Product[Size] = "XL", "Extra Large", "Other" )
  12.         )
  13.     )
  14. )
复制代码

使用 SWITCH 可以更方便地表达同一个公式:
  1. SizeDesc =
  2. SWITCH (
  3.     Product[Size],
  4.     "S", "Small",
  5.     "M", "Medium",
  6.     "L", "Large",
  7.     "XL", "Extra Large",
  8.     "Other"
  9. )
复制代码

后一种表达式虽然性能没有变化,但代码的可读性更好,因为在引擎内部,DAX 将 SWITCH 语句转换为一组嵌套的 IF 函数。

SWITCH 的特殊用法

关于 SWITCH 函数有个有趣的用法,你可以用它来检查同一个表达式中的多个条件,因为 SWITCH 被转换为一组嵌套 IF,其中第一个匹配到的条件胜出,你可以使用此模式测试多个条件:
  1. SWITCH (
  2.     TRUE (),
  3.     Product[Size] = "XL"
  4.         && Product[Color] = "Red", "Red and XL",
  5.     Product[Size] = "XL"
  6.         && Product[Color] = "Blue", "Blue and XL",
  7.     Product[Size] = "L"
  8.         && Product[Color] = "Green", "Green and L"
  9. )
复制代码
使用 TRUE 作为第一参数的作用是,返回条件判断 List 中为第一个为 TRUE 的结果
回复

使用道具 举报

lubaby726 | 2021-4-24 17:29:33 | 显示全部楼层
无论是不是沙发都得回复下
回复

使用道具 举报

mzxds | 2021-6-3 21:04:34 来自手机 | 显示全部楼层
支持你哈...................................
回复

使用道具 举报

刘文钟 | 2021-6-18 13:18:31 来自手机 | 显示全部楼层
支持你哈...................................
回复

使用道具 举报

wzfwzf | 2021-6-29 07:12:45 | 显示全部楼层
我也是坐沙发的
回复

使用道具 举报

波柱 | 2021-8-1 18:04:21 来自手机 | 显示全部楼层
介是神马?!!
回复

使用道具 举报

jimmy | 2021-8-21 09:36:27 | 显示全部楼层
呵呵。。。.....
回复

使用道具 举报

大阿哥 | 2021-8-26 22:52:05 来自手机 | 显示全部楼层
大人,此事必有蹊跷!
回复

使用道具 举报

肥婷婷 | 2021-9-4 07:57:02 | 显示全部楼层
不错 支持下
回复

使用道具 举报

mayqueen | 2021-10-1 08:33:35 来自手机 | 显示全部楼层
我了个去,顶了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则