理解 IF 和 SWITCH 您所在的位置:网站首页 if能嵌套if吗 理解 IF 和 SWITCH

理解 IF 和 SWITCH

2024-07-05 04:34| 来源: 网络整理| 查看: 265

基础

IF 是最常见的逻辑函数,用于条件判断,它的语法和 Excel 相同。SWITCH 是多层 IF 的简化形式,本质是 IF 嵌套,但是写法更优雅,以下是两个示例:

-------- 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" )

除了用第一参数返回的值作为判断条件,SWITCH 还有一种实用的写法,适合用在逻辑判断中,在逻辑函数一文中介绍过,

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 作为第一参数表示:“返回条件求值为 TRUE 的第一个结果”。

注意

IF 函数看似结构简单,但隐藏了一些容易被忽视的细节。

变体类型

变体数据类型用于可能返回不同数据类型的度量值,主要与 IF 配合使用,变体类型取决于度量值使用的条件表达式。例如,下面的语句可以返回整数或字符串,所以它返回一个变体类型:

IF ( [measure] > 0, 1, "N/A" )

变体只适用于度量值,不能用于计算列,因为计算列必须具有统一的数据类型

计算列的必须使用统一的数据类型

标量函数

IF 和 SWITCH 都是标量函数,所以它们只能输出标量值,不能输出表,你不能在 IF 的条件中直接返回表表达式,所以下面的写法是错误的:

VAR Granularity = IF ( SELECTEDVALUE ( 'Dynamic Axis'[Granularity] ) = "Monthly", DATESMTD ( 'Calendar'[date] ), DATESYTD ( 'Calendar'[date] ) ) RETURN CALCULATE ( SUM ( [SomeField] ), Granularity ) 逻辑表达式的一种特殊情况

当 IF 的返回条件中出现一个空值和一个逻辑表达式(即 TRUE() 或 FALSE() 时),整个公式返回逻辑表达式,忽略空值。

IF ( 1 = 1, BLANK(), TRUE() ) 返回 FALSE 使用变量优化 IF 和 SWITCH

在 DAX 表达式中使用变量替换相同度量值的多次引用可以提高公式可读性、优化公式的效率,因为正确地使用变量可以防止对同一表达式多次计算。然而,在某些情况下,变量的使用也可能适得其反,对性能产生负面影响。

本文隐藏内容查看价格为5G币,请先登录单独购买的内容长期有效,不受时间限制(购买前先刷新当前页面)。加入VIP会员可享受全站权益,性价比更高。

短路计算

在这种多条件计算中,我们希望公式在命中指定的分支时才计算对应的变量。在 IF 和 SWITCH 函数的计值过程中,这种优化策略称为短路计算,做法是将特定筛选器应用于 IF 或 SWITCH 的每个求值分支的筛选上下文。由于 Sales vSlow 度量值中的变量是在 IF 和 SWITCH 之前定义的,因此分支中的筛选上下文无法影响变量的计算。所有变量(和所有度量值)的计算将不考虑示例报表的 Period 切片器中所做的选择。

变量使用规范

在特定场景中,此特性可能对 DAX 度量值的性能产生严重影响,因此,使用变量最好遵循以下规则:

本文隐藏内容查看价格为5G币,请先登录单独购买的内容长期有效,不受时间限制(购买前先刷新当前页面)。加入VIP会员可享受全站权益,性价比更高。

 

参考阅读:Optimizing IF and SWITCH expressions using variables



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有