数据分析表达式 (DAX) 语言使用运算符嘚嵌套符来创建表达式用以比较值、执行算术计算或处理字符串。 本节介绍了每种运算符的嵌套符的用法
有四種不同类型的运算符的嵌套符:算术运算符的嵌套符、比较运算符的嵌套符、文本串联运算符的嵌套符和逻辑运算符的嵌套符。
若要执行基本的数学运算符的嵌套(例如加法、减法或乘法)、组合数字以及生成数值结果请使用以下算术运算符的嵌套符:
加号既可以作为“二元运算符的嵌套符”,也可以作为“一元运算符的嵌套符”作为二元运算符的嵌套符时,该运算符的嵌套符要求兩端都有数字并执行加法运算符的嵌套。当在 DAX 公式中的二元运算符的嵌套符两端使用值时如果这些值不是数字,DAX 会尝试将其转换为数徝数据类型相比之下,一元运算符的嵌套符则可以应用于任何类型的参数加号不影响类型或值,只会被忽略而减号运算符的嵌套符茬应用于数值时会创建符号相反的值。
可以使用以下运算符的嵌套符对两个值进行比较 在使用这些运算符的嵌套符對两个值进行比较时,结果将为逻辑值 True 或 False
使用与号 (&) 可以联接或串联两个或更多文本字符串以生成单个文本。
连接(或串联)两个值以生成一个连续的文本值 |
使用逻辑运算符的嵌套符 (&&) 和 (||) 可组合表达式以生成单个结果
在两个都计算为布尔结果的表达式之间创建“与”条件。 如果两个表达式都返回 TRUE则这两个表达式的组合也返回 TRUE;否则该组合返回 FALSE。 |
在两个逻辑表达式之间创建“或”条件 如果任一表达式返回 TRUE,则结果为 TRUE;仅当两个表达式均为 FALSE 时结果才为 FALSE。 |
在某些情况丅执行计算的顺序可能会影响返回值;因此,务必要了解如何确定顺序以及如何更改顺序来获得所需的结果
表达式按特定顺序计算运算符的嵌套符和值。 所有表达式都以等号 (=) 开始 等号指示后续字符构成一个表达式。
等号之后是要计算的元素(操作数)由计算运算符的嵌套符分隔。 表达式始终从左向右读取但是可以使用括号对元素进行分组,从而在一定程度上控制元素的计算顺序
如果在一个公式中合用了多个运算符的嵌套符,则按下表中的顺序执行运算符的嵌套 如果多个运算符的嵌套符具有相同嘚优先级值,则按从左到右的顺序执行运算符的嵌套 例如,如果某个表达式中同时包含一个乘法运算符的嵌套符和一个除法运算符的嵌套符则这两个运算符的嵌套符按照在该表达式中出现的顺序,即从左到右进行计算
符号(如在 –1 中) |
连接两个文本字符串(串联) |
若要更改计算顺序,您应将必须先计算的公式部分括在括号内 例如,下面的公式计算结果为 11因为乘法先于加法进行計算。 该公式将 2 与 3 相乘然后将乘积与 5 相加。
相比之下如果使用括号更改该语法,将顺序更改为将 5 与 2 相加然后将结果乘以 3,从而得到 21
在下面的示例中,公式第一部分两旁的括号强制先计算表达式 (3 + 0.25)然后除以表达式 (3 - 0.25) 的结果。
在下面的示例中根据运算符的嵌套符的优先順序规则,首先应用求幂运算符的嵌套符然后应用符号运算符的嵌套符。 该表达式的结果是 -4
为了确保符号运算符的嵌套符首先应用于數值,您可以使用括号来控制运算符的嵌套符如下面的示例中所示。 该表达式的结果是 4
DAX 可轻松处理和比较各种数据类型,其方式与 Microsoft Excel 十分相似 然而,其基础计算引擎基于 SQL Server Analysis Services并新增了关系数据存储的一些高级功能,包括更加丰富的日期和时间类型支持 因此,計算结果或函数行为在某些情况下可能与 Excel 不同 此外,DAX 比 Excel 支持的数据类型要多 本节介绍一些主要差异。
一般而言任何运算符的嵌套符左右两侧的两个操作数都应具有相同的数据类型。 然而如果数据类型不同,DAX 会将其转换为通用数据类型以进行比較过程如下:
-
首先,将两个操作数都转换为最可能的通用数据类型
-
然后,对这两个操作数进行比较
例如,假定您要组合两个数字 ┅个数字为某个公式(如 =[Price] * .20)的计算结果,其中可能包含许多小数位 另一个数字是作为字符串值提供的整数。
在这种情况下DAX 将使用可以存储两种类型数字的最大数值格式将两个数字都转换为数值格式的实数。 然后DAX 将比较这两个值。
相比之下Excel 将尝试直接比较不同类型的徝,而不是先将它们强制为通用类型 因此,对于同一比较表达式DAX 中的结果可能与 Excel 中不同。
有关隐式数据类型转换的详细信息请参阅。
DAX 公式中的运算符的嵌套优先级顺序与 Microsoft Excel 采用的顺序基本相同但 DAX 公式中不支持某些 Excel 运算符的嵌套符(如百分号运算符的嵌套符)。 此外也不支持范围。
因此每当从 Excel 复制并粘帖公式时,请务必仔细检查公式因为公式中的某些运算符的嵌套符或元素可能無效。 如果对运算符的嵌套执行顺序有任何疑问我们建议您使用括号控制运算符的嵌套顺序,以避免结果的不明确性