表格模型中支持的数据类型
适用于: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium
本文说明可在表格模型中使用的数据类型,并且论述在数据分析表达式 (DAX) 公式中计算或使用数据时数据类型的隐式转换。
表格模型中使用的数据类型
当您在公式中导入数据或者使用某一值时,即使原始数据源包含不同的数据类型,该数据也转换为以下数据类型之一。 从公式得出的值也使用这些数据类型。
通常,实施这些数据类型以便在计算列中实现精确的计算,并且相同的限制将应用于模型中的其余数据以便保持一致性。
用于数字、货币、日期和时间的格式应遵循在用于处理模型数据的客户端上指定的区域设置的格式。 您可以使用模型中的格式设置选项控制显示值的方式。
模型中的数据类型 | DAX 中的数据类型 | 描述 |
---|---|---|
整数 | 一个 64 位(八字节)整数值* 注意: DAX 公式不支持因太小而无法保存说明中列出的最小值的数据类型。 |
没有小数位的数字。 整数可以是正数或负数, 但必须是介于 -9,223,372,036,854,775,807 (-2^63+1) 和 9,223,372,036,854,775,806 (2^63-2) 之间的整数。 |
十进制数 | 一个 64 位(八字节)实数* 注意: DAX 公式不支持因太小而无法保存说明中列出的最小值的数据类型。 |
实数是可具有小数位的数字。 实数涵盖很广范围的值: 从 -1.79E +308 到 -2.23E -308 的负值 零 从 2.23E -308 到 1.79E + 308 的正值 但是,有效位数限制为 15 个小数位。 |
布尔 | 布尔 | True 或 False 值。 |
文本 | String | 一个 Unicode 字符数据字符串。 可以是字符串、数字或文本格式表示的日期。 |
日期 | 日期/时间 | 采用接受的日期-时间表示形式的日期和时间。 有效值是 1900 年 3 月 1 日后的所有日期。 |
货币 | 货币 | 货币数据类型允许介于 -922,337,203,685,477.5807 到 922,337,203,685,477.5806 之间的值,具有四个固定精度的十进制数字。 |
空值 | 空白 | 空白是 DAX 中的一种数据类型,表示并替代 SQL 中的 Null。 您可以通过使用 BLANK 函数创建空白,并通过使用逻辑函数 ISBLANK 测试是否存在空白。 |
* 如果尝试导入具有较大数值的数据,导入可能会失败并出现以下错误:
内存中数据库错误:“table name”<表的“列名称>>”<列包含值“1.7976931348623157e+308”,不受支持。 操作已取消。
此错误是因为模型设计器使用该值来表示 Null 导致的。 下表中的值是上述 Null 值的同义词:
值 |
---|
9223372036854775807 |
-9223372036854775808 |
1.7976931348623158e+308 |
-1.7976931348623158e+308 |
从数据中删除值,然后再次尝试导入。
注意
不能从字符串长度超过 131,072 个字符的 varchar(max) 列进行导入。
表数据类型
此外,DAX 使用“表” 数据类型。 DAX 在许多函数中都使用此数据类型,如在聚合和时间智能计算中。 某些函数需要引用表;其他函数返回随后可用于输入到其他函数的表。 在某些需要表作为输入的函数中,你可以指定计算结果为表格的表达式;对于一些函数,则需要引用基础表。 有关特定函数的要求的详细信息,请参阅 DAX 函数引用。
DAX 公式中的隐式和显式数据类型转换
关于用作输入和输出的数据类型,每个 DAX 函数都有特定的要求。 例如,某些函数要求对部分参数使用整数,而其他部分使用日期;另外一些函数则要求使用文本或表。
如果指定为参数的列中的数据与函数所需的数据类型不兼容,则在许多情况下,DAX 将返回错误。 但只要有可能,DAX 会尝试将数据隐式转换为所需的数据类型。 例如:
可以将数字(例如“123”)键入为字符串。 DAX 分析字符串,并尝试将其指定为数字数据类型。
你可以添加 TRUE+1 并获得结果 2,因为 TRUE 被隐式转换为数字 1,并执行 1+1 的操作。
如果在两个列中添加值,其中一个值恰好以文本方式表示 ("12"),而另一个值以数字方式表示 (12),DAX 会将字符串隐式转换为数字,然后执行加法并获得数值结果。 下面的表达式返回 44: = "22" + 22
如果尝试连接两个数字,它们将显示为字符串,然后串联。 下面的表达式返回 "1234": = 12 & 34
下表总结了在公式中执行的隐式数据类型转换。 通常,语义模型设计器在行为上类似于 Microsoft Excel,在指定操作要求时将尽可能执行隐式转换。
隐式数据转换表
执行的转换的类型由运算符确定,它在执行所请求的操作之前会将值转换为所需的值。 这些表列出了运算符,并指示当其与交叉行内的数据类型配对时,对列中每种数据类型执行的转换。
注意
这些表中不包含文本数据类型。 当数字以文本格式表示为 时,在某些情况下,模型设计器会尝试确定数字类型并将其表示为数字。
加 (+)
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 |
例如,如果在除法运算将整数与货币值结合使用,两个值都会转换为实数,并且结果也是实数。
比较运算符
仅支持一组有限的用于比较操作的混合数据类型组合。 若要了解详细信息,请参阅 DAX 运算符参考。
处理空白、空字符串和零值
下表总结了 DAX 与 Microsoft Excel 中空白的处理方式之间的差异:
表达式 | DAX | Excel |
---|---|---|
BLANK + BLANK | BLANK | 0(零) |
BLANK +5 | 5 | 5 |
BLANK * 5 | BLANK | 0(零) |
5/BLANK | 无穷大 | Error |
0/BLANK | NaN | Error |
空白/空白 | BLANK | Error |
FALSE OR BLANK | FALSE | FALSE |
FALSE AND BLANK | FALSE | FALSE |
TRUE OR BLANK | TRUE | TRUE |
TRUE AND BLANK | FALSE | TRUE |
BLANK OR BLANK | BLANK | Error |
BLANK AND BLANK | BLANK | Error |
有关特定函数或运算符如何处理空白的详细信息,请参阅 DAX 函数引用一节中关于各 DAX 函数的单独主题。