综合运营商

数据分析表达式(DAX)语言使用运算符创建比较值、执行算术计算或处理字符串的表达式。

操作符的类型

有四种不同类型的计算运算符:算术运算符、比较运算符、文本连接运算符和逻辑运算符。

算术运算符

算术:进行基本的数学运算,如加法、减法或乘法;结合数字;并产生数值结果,使用以下算术运算符。

算术运算符 意义 例子
+(加号) 除了 3 + 3
-(负号) 减法或符号 3–1–1
*(星号) 乘法 3 * 3
/(斜杠) 部门 3/3
^(脱字符号) 求幂 16 ^ 4

请注意

加号既可以作为二进制运算符,也可以作为一元运算符。二进制运算符要求运算符两边都有数字,并进行加法运算。当您在二元运算符的两边使用DAX公式中的值时,如果这些值不是数字,DAX会尝试将它们转换为数字数据类型。相比之下,一元操作符可以应用于任何类型的实参。加号不影响类型或值,只是被忽略,而减号操作符如果应用于数值则创建负值。

比较运算符

可以使用以下操作符比较两个值。当使用这些运算符比较两个值时,结果是一个逻辑值,要么是TRUE,要么是FALSE。

比较运算符 意义 例子
= 等于 [地区]= "美国"
== 严格地等于 [地区]== "美国"
> 大于 [发售日期]> " 2009年1月"
< 不到 [发售日期]< " 2009年1月1日"
> = 大于或等于 [数量]>= 20000
< = 小于或等于 [数量]<= 100
<> 不等于 [地区]<>“美国”

除==外的所有比较运算符都将BLANK视为等于数字0、空字符串""、DATE(1899, 12, 30)或FALSE。因此,当[Column]的值为0或BLANK时,[Column] = 0将为true。只有当[Column]的值为0时,[Column] == 0为真。

文本连接操作符

使用与符号(&)来连接或连接两个或多个文本字符串,以生成单个文本。

文本运算符 意义 例子
& (&) 连接或连接两个值以产生一个连续的文本值 [地区]&“,”&[城市]

逻辑运算符

使用逻辑运算符(&&)和(||)来组合表达式以产生单个结果。

文本运算符 意义 例子
&&(双&号) 在两个表达式之间创建AND条件,每个表达式都有一个布尔结果。如果两个表达式都返回TRUE,则两个表达式的组合也返回TRUE;否则组合返回FALSE。 ([Region] = "France") && ([BikeBuyer] = "yes"))
||(双管符号) 在两个逻辑表达式之间创建一个OR条件。如果其中一个表达式返回TRUE,则结果为TRUE;只有当两个表达式都为FALSE时,结果才为FALSE。 (([Region] = "France") || ([BikeBuyer] = "yes"))
在要与表进行比较的每一行之间创建逻辑或条件。注意:表构造函数语法使用大括号。 “Product”[Color] IN{“红色”,“蓝色”,“黑色”}

操作符和优先顺序

在某些情况下,执行计算的顺序可能会影响返回值;因此,了解如何确定顺序以及如何更改顺序以获得期望的结果非常重要。

计算订单

表达式按特定顺序计算运算符和值。所有表达式总是以等号(=)开头。等号表示后面的字符构成一个表达式。

等号后面是要计算的元素(操作数),它们由计算操作符分隔。表达式总是从左到右读取,但是可以通过使用括号在一定程度上控制元素分组的顺序。

运算符优先级

如果将多个运算符合并到一个公式中,则按下表的顺序进行操作。如果操作符的优先级值相等,则从左到右排序。例如,如果表达式同时包含乘法和除法操作符,则按照它们在表达式中出现的顺序(从左到右)对它们进行求值。

操作符 描述
求幂
- - - - - - 符号(如-1)
*和/ 乘法和除法
+和- 加减法
& 连接两个文本字符串(连接)
=,==,<,>,<=,>=,<>, 在 比较
NOT(一元运算符)

使用圆括号控制计算顺序

若要更改求值顺序,应将公式中必须首先计算的部分用括号括起来。例如,下面的公式产生11,因为乘法在加法之前计算。这个公式用2乘以3,然后再加上5。

= 5 + 2 * 3

相反,如果使用括号更改语法,则顺序会发生变化,以便将5和2加在一起,并将结果乘以3得到21。

= (5 + 2) * 3

在下面的示例中,公式第一部分周围的括号强制计算首先计算表达式(3 + 0.25),然后将结果除以表达式的结果(3 - 0.25)。

=(3 + 0.25)/(3 - 0.25)  

在下面的示例中,根据运算符的优先级规则,首先应用求幂运算符,然后应用符号运算符。这个表达式的结果是-4。

= 2 ^ 2

为了确保符号操作符首先应用于数值,可以使用括号来控制操作符,如下面的示例所示。这个表达式的结果是4。

= (2) ^ 2

兼容性

DAX很容易处理和比较各种数据类型,很像Microsoft Excel。然而,底层计算引擎基于SQL Server Analysis Services,并提供关系数据存储的其他高级特性,包括对日期和时间类型的更丰富支持。因此,在某些情况下,计算结果或函数的行为可能与Excel中的不一样。此外,DAX比Excel支持更多的数据类型。本节描述主要区别。

强制操作数的数据类型

一般来说,任何操作符左右两侧的两个操作数应该是相同的数据类型。但是,如果数据类型不同,DAX会将它们转换为通用数据类型,以便在某些情况下应用运算符:

  1. 两个操作数都被转换为最大的通用数据类型。
  2. 如果可能的话,应用操作符。

例如,假设您有两个要合并的数字。一个数字从公式中得到,例如=[Price] * .20,结果可能包含许多小数位。另一个数字是作为字符串值提供的整数。

在这种情况下,DAX将使用能够存储这两种数字的最大数字格式,将这两个数字转换为数字格式的实数。然后DAX将应用乘法。

根据数据类型组合的不同,类型强制转换不能应用于比较操作。有关DAX支持的数据类型的完整列表,请参阅表格模型中支持的数据类型和Power BI Desktop中的数据类型。

为了便于比较,整数、实数、货币、日期/时间和空白被认为是数字。在执行比较时,空白的计算结果为零。比较操作支持以下数据类型组合。

左侧数据类型 数据类型
数字 数字
布尔 布尔
字符串 字符串

其他混合数据类型比较将返回错误。例如,如="1" > 0这样的公式返回一个错误,指出DAX比较操作不支持将Text类型的值与Integer类型的值进行比较。

DAX中使用的数据类型 Excel中使用的数据类型
数字(I8, R8) 数字(R8)
字符串 字符串
布尔 布尔
DateTime 变体
货币 货币

优先顺序的差异

DAX公式中操作的优先顺序与Microsoft Excel中使用的基本相同,但不支持某些Excel操作符,例如百分比。此外,不支持范围。

因此,每当从Excel中复制和粘贴公式时,一定要仔细检查公式,因为公式中的某些运算符或元素可能无效。当对执行操作的顺序有任何疑问时,建议使用括号来控制操作的顺序,并消除对结果的任何歧义。

DAX参数命名