在数据模型中,每个列都有一个关联的 数据类型,用于指定列可以保存的数据类型:全数、小数、文本、货币数据、日期和时间等。 数据类型还确定可以对列执行哪些类型的操作,以及将值存储在列中需要的内存量。
如果使用加载项 Power Pivot ,可以更改列的数据类型。 如果日期列已导入为字符串,可能需要这样做,但需要将其用作其他内容。 有关详细信息,请参阅在 数据类型中设置列 TE102896613 。
本文内容
数据类型摘要
下表列出了数据模型支持的数据类型。 导入数据或在公式中使用值时,即使原始数据源包含不同的数据类型,数据也将被转换为这些数据类型之一。 公式结果的值也使用这些数据类型。
数据中的Excel |
DAX 中的数据类型 |
说明 |
---|---|---|
全数 |
64 位 (8 字节) 整数值 1, 2 |
没有小数位数的数字。 整数可以是正数或负数, 但必须是介于 -9,223,372,036,854,775,808 (-2^63) 和 9,223,372,036,854,775,807 (2^63-1) 之间的数字。 |
十进制数 |
64 位 (8 字节) 实数 1,2 |
实数是可以具有小数位数的数字。 实数涵盖各种值: -1.79E +308 到 -2.23E -308 的负值 零 2.23E -308 到 1.79E + 308 的正值 但是,有效位数限制为 15 位小数位数。 |
TRUE/FALSE |
布尔 |
True 或 False 值。 |
文本 |
String |
Unicode 字符数据字符串。 可以是以文本格式表示的字符串、数字或日期。 最大字符串长度为 268,435,456 Unicode 字符 (256 兆字符) 或 536,870,912 字节。 |
日期 |
日期/时间 |
接受的日期时间表示形式中的日期和时间。 有效日期是 1900 年 1 月 1 日之后的所有日期。 |
货币 |
货币 |
货币 数据类型 允许介于 -922,337,203,685,477.5808 到 922,337,203,685,477.5807 之间的值,具有四位固定精度的小数位数。 |
N/A |
空白 |
空白是 DAX 数据类型表示和替换空值SQL值。 可以使用 BLANK 函数创建空白,然后使用逻辑函数 ISBLANK 测试空值。 |
1 DAX 公式不支持小于表中列出的数据类型。
2 如果尝试导入具有非常大的数值的数据,导入可能会失败并出现以下错误:
内存中数据库错误:"<表名称>"表的"<列名称>"列包含不支持的值"1.7976931348623157e+308"。 操作已取消。
发生此错误的原因是 Power Pivot 该值表示 null。 以下列表中的值是 null 值的同义词:
值 |
|
---|---|
9223372036854775807 |
|
-9223372036854775808 |
|
1.7976931348623158e+308 |
|
2.2250738585072014e-308 |
从数据中删除值,然后重试导入操作。
表数据类型
DAX 在许多函数中数据类型表函数,例如聚合和时间智能计算。 某些函数需要引用表;其他函数返回一个表,该表随后可用作其他函数的输入。 在某些需要将表作为输入的函数中,可以指定计算结果为表的表达式;对于某些函数,需要引用基表。 有关特定函数的要求的信息,请参阅 DAX 函数参考。
DAX 公式数据类型隐式和显式转换
对于用作输入和输出的数据类型,每个 DAX 函数都有特定的要求。 例如,某些函数需要一些参数的整数,另一些函数需要日期;其他函数需要文本或表格。
如果指定为参数的列中的数据与函数所需的数据类型不兼容,则 DAX 在许多情况下将返回错误。 但是,如果可能,DAX 将尝试将数据隐式转换为所需的数据类型。 例如:
-
可以将日期键入为字符串,DAX 将分析该字符串并尝试将它强制强制转换为Windows日期和时间格式之一。
-
可以添加 TRUE + 1 并获取结果 2,因为 TRUE 隐式转换为数字 1,并且执行操作 1+1。
-
如果在两列中添加值,并且一个值恰好表示为文本 ("12") ,另一个值表示为数字 (12) ,则 DAX 隐式将字符串转换为数字,然后对数字结果进行加法操作。 以下表达式返回 44:= "22" + 22
-
如果尝试连接两个数字,Excel字符串,然后连接。 以下表达式返回"1234":= 12 & 34
下表汇总了在数据类型中执行的隐式转换。 Excel指定操作的要求,尽可能执行隐式转换。
隐式数据转换表
执行的转换类型由 运算符确定,运算符在执行请求的操作之前转换它所需的值。 这些表列出运算符,并指示在列数据类型与交叉行中的值配对时对数据类型执行转换。
注意: 这些表中不包括文本数据类型。 当数字以文本格式表示时,在某些情况下 Power Pivot 将尝试确定数字类型,并表示为数字。
添加 (+)
运算符 (+) |
INTEGER |
CURRENCY |
REAL |
日期/时间 |
---|---|---|---|---|
INTEGER |
INTEGER |
CURRENCY |
REAL |
日期/时间 |
CURRENCY |
CURRENCY |
CURRENCY |
REAL |
日期/时间 |
REAL |
REAL |
REAL |
REAL |
日期/时间 |
日期/时间 |
日期/时间 |
日期/时间 |
日期/时间 |
日期/时间 |
例如,如果将实数与货币数据一起用于加法运算,则这两个值将转换为 REAL,结果将返回为 REAL。
减法 (-)
在下表中,行标题是左侧 (minuend) 列标题是右侧 (的) 。
运算符 () |
INTEGER |
CURRENCY |
REAL |
日期/时间 |
---|---|---|---|---|
INTEGER |
INTEGER |
CURRENCY |
REAL |
REAL |
CURRENCY |
CURRENCY |
CURRENCY |
REAL |
REAL |
REAL |
REAL |
REAL |
REAL |
REAL |
日期/时间 |
日期/时间 |
日期/时间 |
日期/时间 |
日期/时间 |
例如,如果对任何其他值执行减法运算数据类型日期,则这两个值将转换为日期,并且返回值也是日期。
注意: 数据模型还支持一元运算符 - (负) ,但此运算符不会数据类型操作数的正数。
乘法 (*)
运算符 (*) |
INTEGER |
CURRENCY |
REAL |
日期/时间 |
---|---|---|---|---|
INTEGER |
INTEGER |
CURRENCY |
REAL |
INTEGER |
CURRENCY |
CURRENCY |
REAL |
CURRENCY |
CURRENCY |
REAL |
REAL |
CURRENCY |
REAL |
REAL |
例如,如果在乘法运算中将整数与实数组合在一起,则两个数字都转换为实数,并且返回值也是 REAL。
除 (/)
在下表中,行标题是分子,列标题是分母。
运算符 (/) (行/列) |
INTEGER |
CURRENCY |
REAL |
日期/时间 |
---|---|---|---|---|
INTEGER |
REAL |
CURRENCY |
REAL |
REAL |
CURRENCY |
CURRENCY |
REAL |
CURRENCY |
REAL |
REAL |
REAL |
REAL |
REAL |
REAL |
日期/时间 |
REAL |
REAL |
REAL |
REAL |
例如,如果在除法运算中将整数与货币值组合在一起,则两个值都转换为实数,结果也是实数。
比较运算符
在比较表达式中,布尔值被视为大于字符串值,字符串值被视为大于数值或日期/时间值;数字和日期/时间值被视为具有相同的排位。 不为布尔值或字符串值执行隐式转换;BLANK 或空白值将转换为 0/""/false,数据类型比较值的值。
以下 DAX 表达式演示了此行为:
=IF (FALSE () >"true","Expression is true", "Expression is false") ,返回"Expression is true"
=IF ("12">12,"Expression is true", "Expression is false") ,返回"Expression is true"。
=IF ("12"=12,"Expression is true", "Expression is false") , 返回"Expression is false"
对数字或日期/时间类型隐式执行转换,如下表所述:
比较运算符 |
INTEGER |
CURRENCY |
REAL |
日期/时间 |
---|---|---|---|---|
INTEGER |
INTEGER |
CURRENCY |
REAL |
REAL |
CURRENCY |
CURRENCY |
CURRENCY |
REAL |
REAL |
REAL |
REAL |
REAL |
REAL |
REAL |
日期/时间 |
REAL |
REAL |
REAL |
日期/时间 |
处理空值、空字符串和零值
在 DAX 中,null、空值、空单元格或缺失值都由相同的新值类型 BLANK 表示。 也可使用 BLANK 函数生成空值,或者使用 ISBLANK 函数测试空值。
如何在添加或连接等操作中处理空白取决于单个函数。 下表总结了 DAX 和公式Microsoft Excel处理空白的方式之间的差异。
表达式 |
DAX |
Excel |
---|---|---|
空白 + 空白 |
BLANK |
0(零) |
BLANK +5 |
5 |
5 |
BLANK * 5 |
BLANK |
0(零) |
5/BLANK |
无穷大 |
错误 |
0/BLANK |
NaN |
错误 |
BLANK/BLANK |
BLANK |
错误 |
FALSE 或空白 |
FALSE |
FALSE |
FALSE 和空白 |
FALSE |
FALSE |
TRUE 或空白 |
TRUE |
TRUE |
TRUE 和空白 |
FALSE |
TRUE |
空白或空白 |
BLANK |
错误 |
空白和空白 |
BLANK |
错误 |
有关特定函数或运算符如何处理空白的详细信息,请参阅 DAX 函数参考 部分中每个 DAX 函数的单个主题。