从数据到信息
从信息到洞察

逻辑函数

我们经常需要在表达式中构建逻辑条件,例如,根据列值或截获的错误条件来实现不同的计算。在这些情况下,你可以使用 DAX 中的逻辑函数。在处理 DAX 表达式中的错误一文,你已经了解到这类 DAX 表达式的两个最重要的函数是 IFIFERROR

了解逻辑函数

逻辑函数非常直观,函数的名字就代表了功能,它们是 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 的结果

2
说点什么

1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
2 评论数
2 被回复的评论
3 订阅评论的人数
 
查看最近回复
查看最热评论
  订阅本文评论  
最新 最旧 得票最多
提醒
游客
秋晨的启明星

SWITCH这个特殊用法很实用,之前知道第一个参数使用True后面进行判断,但是不太了解在后面的参数中使用多条件判断,这次学习到了。

DAX 圣经

导读

初识 DAX

DAX 基础知识

DAX 原理

DAX 高级原理

基础函数类型

迭代函数

CALCULATE 函数

CALCULATE 调节器

基础表函数

条件判断函数

查找匹配函数

时间智能函数

统计类函数

投影函数

分组/连接函数

集合函数

其他函数