Excel Dax 简明教程

Excel DAX - Operators

DAX 是一种由函数、运算符和值组成的公式语言,可以用于公式或表达式中,以计算并返回一个或多个值。

您可以使用 DAX operators 来比较值、执行算术计算和连接字符串。在本章中,您将了解 DAX 运算符以及如何使用它们。

DAX Operator Precedence Order

可以使用一个包含多个 DAX 运算符的 DAX 公式,来组合多个值或表达式。在这种情况下,最终结果将取决于执行运算的顺序。DAX 提供了默认运算符优先级顺序以及替代默认优先级顺序的方法。

DAX 默认运算符优先级列在以下表格中。

Precedence Order

Operator(s)

Operation

1

^

Exponentiation

2

Sign

3

* and /

Multiplication and Division

4

!

NOT

5

+ and –

Addition and Subtraction

6

&

Concatenation

7

=、<、>、⇐、>= 和 <>

等于、小于、大于、小于或等于、大于或等于和不等于

DAX Expression Syntax

您需要首先了解 DAX 表达式语法以及如何使用操作数和运算符对表达式进行求值。

  1. 所有表达式都始终以等号 (=) 开头。等号表示后面的字符构成了一个表达式。

  2. 在等号的右边,您将有通过 DAX 运算符连接的操作数。例如,= 5 + 4 > 5.= 5 * 6 - 3。

  3. 表达式始终从左到右读取,并且计算基于上一部分中给出的 DAX 运算符优先级按该顺序进行。

  4. 如果 DAX 运算符具有相同的优先级值,则从左到右求值。例如,=5*6/10。* 和 / 都具有相同的优先级顺序。因此,表达式被求值为 30/10 = 3。

  5. 如果表达式中的 DAX 运算符具有不同的优先级值,则按从左到右的优先级顺序求值。= 5 + 4 > 7。默认优先级首先是 +,然后是 >。因此,表达式从左到右计算。- 5 + 4 首先计算为 9,然后计算 9 > 5,结果为 TRUE。= 5 * 6 - 3。默认优先级首先是 *,然后是 -。因此,表达式从左到右计算。- 5 * 6 首先计算为 30,然后计算 30 - 3,结果为 27。= 2 * 5 - 6 * 3。默认优先级首先是 *,其次是 *,然后是 -。因此,表达式的计算结果为 10 – 18,然后为 -8。请注意,它不是 10 - 6(结果为 4),然后是 4*3(结果为 12)。

Using Parentheses to Control DAX Calculation Order

您可以使用括号来更改 DAX 默认运算符优先级顺序,对操作数和运算符进行分组以控制计算顺序。

例如,= 5 * 6 - 3 在 DAX 默认运算符优先级顺序下计算结果为 27。如果您使用括号对操作数和运算符进行分组,如 = 5 * (6 - 3),则首先计算 6 - 3,结果为 3,然后计算 5 * 3,结果为 15。

2 * 5 - 6 * 3 evaluates to -8 with the DAX default operator precedence order. If you use parenthesis to group the operands and operators as = 2 * (5 - 6) * 3, then 5 - 6 is calculated first resulting in -1 and then 2 * (-1) * 3 is calculated which results in -6.

如您所见,对于相同的操作数和运算符,可以通过分组方式得到不同的结果。因此,当您在 DAX 公式中使用 DAX 运算符时,您应该注意计算顺序。

Differences Between Excel and DAX

虽然 DAX 与 Excel 公式有相似之处,但两者之间存在一些重要的差异。

  1. 由于 DAX 具有底层内存驻留计算引擎,因此它比 Excel 更加强大。

  2. DAX 支持比 Excel 更多的数据类型。

  3. DAX 提供了关系数据库、数据模型的其他高级功能,包括对日期和时间类型更丰富的支持。

在某些情况下,DAX 中的计算结果或函数行为可能与 Excel 中的不相同。这是由于以下差异造成的:

  1. Data type casting

  2. Data types

Difference in Data Type Casting

在 DAX 中,当您有表达式 =value1 operator value2 时,两个操作数 value1 和 value2 应为相同的数据类型。如果数据类型不同,DAX 会首先将它们隐式地转换为公共数据类型。有关详细信息,请参阅章节 - DAX 语法。

例如,您必须比较不同数据类型两个操作数,比如说某个公式产生的数字,如 =[Amount] * 0.08 和一个整数。第一个数字可以是有许多小数位的小数,而第二个数字是一个整数。然后,DAX 会这样处理:

  1. 首先,DAX 会使用可存储这两种数字的最大数字格式,将这两个操作数都转换为实数。

  2. 接下来,DAX 会比较这两个实数。

相反,Excel 会尝试比较不同数据类型的值,而不用首先将这些值强制转换为公共数据类型。由于此原因,您可能会发现在 DAX 和 Excel 中,同一个比较表达式的结果不同。

Difference in Data Types

DAX 和 Excel 中的操作符优先级顺序相同。但是,DAX 不支持 Excel 支持的百分号 (%) 操作符和数据范围。此外,DAX 支持表作为数据类型,而这在 Excel 中不行。

此外,在 Excel 公式中,您可以引用一个单元格,或一个数组或一系列单元格。在 DAX 公式中,您不能引用任何这些。DAX 公式引用到数据时应采用表、列、计算字段和计算列的方式。

如果您从 Excel 复制公式并将其粘贴在 DAX 中,确保 DAX 公式的正确性,因为 DAX 语法不同于 Excel 公式语法。此外,即使一个函数在 DAX 和 Excel 中具有相同名称,其参数也可能不同,函数的结果也可能不同。

您将在后面的章节中了解有关所有这些内容的更多信息。