使用 DAX 运算符

已完成

DAX 公式可以使用运算符来创建表达式,以执行算术计算、比较值、处理字符串或测试条件。

提示

许多 DAX 运算符和优先级顺序与 Excel 中相同。

算术运算符

下表列出了算术运算符。

运算符 描述
+ 加法
- 减法
* 乘法
/ 除法
^ 乘方

请注意,当你要对两个表达式进行除法运算时,如果分母可能返回零或 BLANK,则使用 DIVIDE DAX 函数会更有效、更安全。

比较运算符

下表列出了用于比较两个值的比较运算符。 返回的结果为 TRUE 或 FALSE。

运算符 说明
= 等于
== 严格等于
> 大于
< 小于
>= 大于或等于
<= 小于或等于
<> 不等于

严格等于 (==) 外,其他所有比较运算符都将 BLANK 视为等于数字零、空字符串 ("")、日期 1899 年 12 月 30 日、或 FALSE。 这表示当 [Revenue] 的值为零或 BLANK 时,表达式 [Revenue] = 0 将为 TRUE。 相反,只有在 [Revenue] 的值为零时,[Revenue] == 0 才为 TRUE。

文本串联运算符

使用 & 号 (&) 字符连接两个文本值以生成一个连续的文本值。 例如,来看看下面的计算列定义:

Model Color = 'Product'[Model] & "-" & 'Product'[Color]

逻辑运算符

使用逻辑运算符可组合表达式以生成单个结果。 下表列出了所有逻辑运算符。

运算符 说明
&& 在两个表达式(每个表达式都有一个布尔结果)之间创建一个 AND 条件。 如果两个表达式都返回 TRUE,则表达式的组合也会返回 TRUE;否则组合返回 FALSE。
||(双竖线) 在两个逻辑表达式之间创建 OR 条件。 如果任一表达式返回 TRUE,则结果为 TRUE;仅当两个表达式都为 FALSE 时,结果才为 FALSE。
IN 在与表相对的每行之间创建一个逻辑 OR 条件。 注意:表构造函数语法使用大括号。
NOT 反转一个布尔表达式的状态(从 FALSE 到 TRUE,反之亦然)。

一个使用 IN 逻辑运算符的示例是 ANZ Revenue 度量值定义,它使用 CALCULATE DAX 函数来强制执行对以下两个国家/地区的特定筛选:澳大利亚和新西兰。

注意

当你学习如何修改筛选器上下文时,你将会了解到功能强大的 CALCULATE 函数。

ANZ Revenue =
CALCULATE(
    [Revenue],
    Customer[Country-Region] IN {
        "Australia",
        "New Zealand"
    }
)

运算符优先级

当 DAX 公式包含多个运算符时,DAX 使用规则来确定计算顺序,这就是运算符优先级。 操作按下表排序。

运算符 说明
^ 求幂
- 符号(如在 -1 中)
* 和 / 乘法和除法
NOT NOT
+ 和 - 加法和减法
& 连接两个文本字符串
=,==,<,>,<=,>=,<> 比较

如果多个运算符具有相同的优先级值,则按从左到右的顺序执行运算。

一般来说,运算符的优先级与 Excel 中相同。 如果需要重写计算顺序,则在括号内对操作分组。

例如,来看看下面的计算列定义:

Extended Amount = Sales[Order Quantity] * Sales[Unit Price] * 1 - [Unit Price Discount Pct]

此示例计算列定义生成的结果不正确,因为乘法发生在减法之前。 下面正确的计算列定义使用括号来确保减法发生在乘法之前。

Extended Amount = Sales[Order Quantity] * Sales[Unit Price] * (1 - [Unit Price Discount Pct])

提示

记住运算符优先级规则可能会很困难,尤其是对于 DAX 初学者而言。 因此,建议全面测试公式。 如果公式由于计算顺序不正确而不能生成正确的结果,你可以尝试通过添加括号来调整计算顺序。 添加括号还可以提高公式的可读性。

有关 DAX 运算符和优先级顺序的详细信息,请参阅 DAX 运算符

隐式转换

在编写一个使用运算符组合不同数据类型的 DAX 公式时,无需显式转换类型。 通常,DAX 会自动标识引用的模型对象的数据类型,并在必要时执行隐式转换以完成指定的操作。

但是,对于可以成功转换的值可能有一些限制。 如果值或列的数据类型与当前运算不兼容,则 DAX 将返回错误。 例如,尝试将日期值相乘会产生错误,因为它不符合逻辑。

BLANK 的处理方式不同,具体取决于所使用的运算符。 它的处理方式与 Excel 处理 BLANK 的方式类似,但在数据库 (SQL) 处理 NULL 时,方式有所不同。 BLANK 在由算术运算符处理时被视为零,在连接到字符串时被视为空字符串。

提示

记住 BLANK 的处理方式可能会很困难,尤其是对于 DAX 初学者而言。 因此,建议全面测试公式。 当 BLANK 产生意外结果时,请考虑使用 IFISBLANK DAX 函数测试 BLANK,然后以适当的方式进行响应。