Excel DAX - 数据类型
表是数据模型中的一种新数据类型。
您可以使用包含多列和多行数据的表作为 DAX 函数的参数。
一些 DAX 函数返回表,这些表存储在内存中,可以用作其他 DAX 函数的参数。
日期时间是数据模型中的另一种新数据类型,用于日期和时间值。 需要日期和/或时间作为参数的 DAX 函数需要日期时间数据类型。
DAX 数据类型汇总
DAX 支持的数据类型如下 −
Sr.No | 数据类型 & 描述 |
---|---|
1 | 64 位(八字节)整数值 没有小数位的数字。 整数可以是正数或负数,但必须是 9,223,372,036,854,775,808 (-2^63) 和 9,223,372,036,854,775,807 (2^63-1) 之间的整数。 |
2 | 64 位(八字节)实数 实数是可以有小数位的数字。 实数涵盖以下值 −
但是,有效数字的数量限制为 15 位十进制数字。 |
3 | Boolean
|
4 | String Unicode 字符数据字符串。 可以是以文本格式表示的字符串、数字或日期。 最大字符串长度为 268,435,456 个 Unicode 字符(256 兆字符)或 536,870,912 个字节。 |
5 | datetime 接受的日期时间表示中的日期和时间。 有效日期为 1900 年 1 月 1 日之后的所有日期。 |
6 | Currency 货币数据类型允许 922,337,203,685,477.5808 到 922,337,203,685,477.5807 之间的值,具有固定精度的四位小数。 |
7 | Blank Blank(空白)是 DAX 中的一种数据类型,表示并替换 SQL 空值。 您可以使用 BLANK 函数创建空白,并使用逻辑函数 ISBLANK 测试空白。 |
8 | Table 表示数据模型中的表。 |
注意 − 数据模型不支持使用 Excel 中使用的变体数据类型。 因此,在加载或导入数据时,请确保表中每一列的数据具有一致的数据类型。
DAX 函数适用于以下数据类型 −
- 标量值,包括字符串。
- 数字,包括整数和实数。
- 日期和时间。
DAX 函数在数据类型不兼容的情况下返回错误。 确保表中每一列的数据类型符合要求。 如果没有,您可以在 Power Pivot 窗口的功能区中明确设置数据类型。
您可以在本教程库中的章节 - DAX 函数 中了解每个 DAX 函数所需的数据类型。
DAX 公式中的隐式数据类型转换
您不需要强制转换、转换或以其他方式指定您在 DAX 公式中使用的列或值的数据类型。 当您在 DAX 公式中使用数据时,DAX 会自动识别引用列中的数据类型和您键入的值的数据类型,并在必要时执行隐式转换以完成指定操作。
但是,对于可以成功转换的值,存在一些限制。 如果值或列的数据类型与当前操作不兼容,DAX 将返回错误。
DAX中隐式数据转换的例子 − 假设您有一个 DAX 公式,其中要将数字添加到日期。 DAX 在所使用函数的上下文中对其进行解释。 两个参数都转换为通用数据类型,结果以预期的数据类型返回。
执行的转换类型由运算符决定,运算符在执行请求的操作之前转换它需要的值。 在以下部分中,您可以找到以下运算符的隐式数据转换表 −
- 加法 (+)
- 减法 (-)
- 乘法 (*)
- 除法 (/)
- 比较运算符
每个表都列出了运算符,并指示在与相交行中的数据类型配对时对列中的每种数据类型执行的转换。
用于加法的隐式数据转换表 (+)
运算符 (+) | INTEGER | CURRENCY | REAL | DATETIME |
---|---|---|---|---|
INTEGER | INTEGER | CURRENCY | REAL | DATETIME |
CURRENCY | CURRENCY | CURRENCY | REAL | DATETIME |
REAL | REAL | REAL | REAL | DATETIME |
DATETIME | DATETIME | DATETIME | DATETIME | DATETIME |
例如,如果A是Currency数据类型,B是Real数据类型,那么在计算A+B时,DAX将A转换为Real并添加到B。结果将是Real数据类型。 p>
减法(-)的隐式数据转换表
行标题是被减数(左侧),列标题是减数(右侧)。
运算符 (-) | INTEGER | CURRENCY | REAL | DATETIME |
---|---|---|---|---|
INTEGER | INTEGER | CURRENCY | REAL | REAL |
CURRENCY | CURRENCY | CURRENCY | REAL | REAL |
REAL | REAL | REAL | REAL | REAL |
DATETIME | DATETIME | DATETIME | DATETIME | DATETIME |
比如A是Integer数据类型,B是Real数据类型,那么DAX在计算A-B时,将A转换为Real,再从A中减去B,结果就是Real数据类型。
注意 − 数据模型还支持一元运算符 -(负数),但此运算符不会更改操作数的数据类型。
乘法的隐式数据转换表 (*)
运算符 (*) | INTEGER | CURRENCY | REAL | DATETIME |
---|---|---|---|---|
INTEGER | INTEGER | CURRENCY | REAL | INTEGER |
CURRENCY | CURRENCY | REAL | CURRENCY | CURRENCY |
REAL | REAL | CURRENCY | REAL | REAL |
例如,如果 A 是 Real 数据类型,B 是 Currency 数据类型,那么为了计算 A*B,DAX 将 A 转换为 Currency 数据类型并将 A 与 B 相乘。结果将是 Currency 数据类型。
除法(/)的隐式数据转换表
运算符 (/) | INTEGER | CURRENCY | REAL | DATETIME |
---|---|---|---|---|
INTEGER | REAL | CURRENCY | REAL | REAL |
CURRENCY | REAL | CURRENCY | REAL | REAL |
REAL | REAL | REAL | REAL | REAL |
DATETIME | REAL | REAL | REAL | REAL |
例如,如果A是Currency数据类型,B是Real数据类型,那么在计算A/B时,DAX会将A转换为Real number并进行除法。 结果将是 Real 数据类型。
比较运算符的隐式数据转换表
在比较表达式中,DAX遵循以下规则 −
布尔值被认为大于字符串值。
字符串值被认为大于数字或日期时间值。
数字和日期时间值被认为具有相同的等级。
不对布尔值或字符串值执行隐式数据转换。
BLANK 或空白值根据其他比较值的数据类型转换为 0/""/false。
对于数字或日期时间类型,数据转换是隐式执行的,如下表所示 −
比较运算符 | INTEGER | CURRENCY | REAL | DATETIME |
---|---|---|---|---|
INTEGER | INTEGER | CURRENCY | REAL | REAL |
CURRENCY | CURRENCY | CURRENCY | REAL | REAL |
REAL | REAL | REAL | REAL | REAL |
DATETIME | REAL | REAL | REAL | DATETIME |
DAX 如何处理空白、空字符串和零值?
在 DAX 中,空值、空白值、空单元格或缺失值都由相同的特殊值 BLANK 表示。
- 您可以使用 DAX BLANK 函数生成空白。
- 您可以使用 DAX ISBLANK 函数测试 BLANK。
DAX 如何处理 DAX 公式或 DAX 函数中的空格取决于具体的操作(例如加法或串联)或特定的 DAX 函数。
例子
DAX 公式 | 结果 |
---|---|
BLANK + BLANK | BLANK |
BLANK + 5 | 5 |
BLANK * 5 | BLANK |
5 / BLANK | Infinity |
0 / BLANK | NaN |
BLANK / BLANK | BLANK |
FALSE OR BLANK | FALSE |
FALSE AND BLANK | FALSE |
TRUE OR BLANK | TRUE |
TRUE AND BLANK | FALSE |
BLANK OR BLANK | BLANK |
BLANK AND BLANK | BLANK |