使用 DAX 运算符

已完成

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

提示

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

算术运算符

下表列出了算术运算符。

运算符 描述
+
-
*
/
^ 乘方

请记住,当您将两个表达式相除时,如果分母可能返回零值或空值,使用 DIVIDE DAX 函数会更加高效且安全。

比较运算符

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

运算符 描述
= 等于
== 严格等于
> 大于
< 小于
>= 大于等于
<= 小于等于
<> 不等于

严格等于 (==) 外,其他所有比较运算符都将空值视为等于数字零、空字符串 ("")、日期 1899 年 12 月 30 日或 FALSE。 这意味着,当 [Revenue] 的值为零值或空值时,表达式 [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 将返回错误。 例如,尝试将日期值相乘会产生错误,因为它不符合逻辑。

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

提示

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