综合运营商
数据分析表达式(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会将它们转换为通用数据类型,以便在某些情况下应用运算符:
- 两个操作数都被转换为最大的通用数据类型。
- 如果可能的话,应用操作符。
例如,假设您有两个要合并的数字。一个数字从公式中得到,例如=[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参数命名
反馈
即将到来:在整个2024年,我们将逐步取消GitHub问题作为内容的反馈机制,并以新的反馈系统取而代之。欲了解更多信息,请参阅:https://aka.ms/ContentUserFeedback。
提交和查看反馈