适用于: SQL Server Analysis Services
Azure Analysis Services
Fabric/Power BI Premium
本文介绍可在表格模型中使用的数据类型,并讨论在数据分析表达式(DAX)公式中计算或使用数据时数据类型的隐式转换。
表格模型中使用的数据类型
在公式中导入数据或使用值时,即使原始数据源包含不同的数据类型,数据也会转换为以下数据类型之一。 公式生成的值也使用这些数据类型。
通常,这些数据类型是为了实现计算列中的准确计算,为了保持一致性,相同的限制适用于模型中的其余数据。
用于数字、货币、日期和时间的格式应遵循客户端上用于处理模型数据的区域设置的格式。 可以使用模型中的格式设置选项来控制值显示的方式。
模型中的数据类型 | DAX 中的数据类型 | DESCRIPTION |
---|---|---|
整数 | 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 值。 |
文本 | 字符串 | Unicode 字符数据字符串。 可以是文本格式表示的字符串、数字或日期。 字符串的有效最大大小受 32767 字节的限制。 |
二进制 | 字符串 | 非结构化二进制数据,例如图像。 具有此数据类型的列在 DAX 中具有有限的功能。 二进制数据值的有效最大大小受67108864字节限制的约束。 |
日期 | 日期/时间 | 采用接受的日期/时间表示形式的日期和时间。 有效日期都是 1900 年 3 月 1 日之后的所有日期。 |
货币 | 货币 | 货币数据类型允许介于 -922,337,203,685,477.5807 到 922,337,203,685,477.5806 之间的值,具有四个固定精度的小数位数。 |
变体 | 变体 | 用于可能返回不同数据类型的表达式(如 DAX 度量值)。 例如,返回整数或字符串的 DAX 度量值的类型为变体。 |
非适用 | 空白 | 空白是 DAX 中表示和替换 SQL null 的数据类型。 可以使用 BLANK 函数创建空白,并使用逻辑函数 ISBLANK 测试空白。 |
* 如果尝试导入具有大数值的数据,则导入可能会失败,并出现以下错误:
内存中数据库错误:“表名<”表的“><列名>”列包含值“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,并尽可能执行指定作所需的隐式转换。
隐式数据转换表
执行的转换类型由运算符确定,该运算符在执行请求的作之前转换所需的值。 这些表格列出了运算符,并指明当列中的每个数据类型与交叉行中的数据类型匹配时执行的转换。
注释
这些表中不包含文本数据类型。 当数字以文本格式表示时,在某些情况下,模型设计器会尝试确定数字类型并将其表示为数字。
加法 (+)
整数 | 货币 | 真正 | 日期/时间 | |
---|---|---|---|---|
整数 | 整数 | 货币 | 真正 | 日期/时间 |
货币 | 货币 | 货币 | 真正 | 日期/时间 |
真正 | 真正 | 真正 | 真正 | 日期/时间 |
日期/时间 | 日期/时间 | 日期/时间 | 日期/时间 | 日期/时间 |
例如,如果在加法运算中结合货币数据使用实数,则这两个值将转换为 REAL,并将结果返回为 REAL。
减法 (-)
在下表中,行标题为被减数(左侧),列标题为减数(右侧):
整数 | 货币 | 真正 | 日期/时间 | |
---|---|---|---|---|
整数 | 整数 | 货币 | 真正 | 真正 |
货币 | 货币 | 货币 | 真正 | 真正 |
真正 | 真正 | 真正 | 真正 | 真正 |
日期/时间 | 日期/时间 | 日期/时间 | 日期/时间 | 日期/时间 |
例如,如果在减法运算中使用了任何其他数据类型的日期,则这两个值都转换为日期,并且返回值也是日期。
注释
表格模型还支持一元运算符 - (负),但此运算符不会更改作数的数据类型。
乘法 (*)
整数 | 货币 | 真正 | 日期/时间 | |
---|---|---|---|---|
整数 | 整数 | 货币 | 真正 | 整数 |
货币 | 货币 | 真正 | 货币 | 货币 |
真正 | 真正 | 货币 | 真正 | 真正 |
例如,如果整数与乘法运算中的实数组合,则这两个数字将转换为实数,并且返回值也是 REAL。
分区(/)
在下表中,行标题是分子,列标题是分母:(行/列)
整数 | 货币 | 真正 | 日期/时间 | |
---|---|---|---|---|
整数 | 真正 | 货币 | 真正 | 真正 |
货币 | 货币 | 真正 | 货币 | 真正 |
真正 | 真正 | 真正 | 真正 | 真正 |
日期/时间 | 真正 | 真正 | 真正 | 真正 |
例如,如果整数与除法运算中的货币值组合,则这两个值都转换为实数,结果也是实数。
比较运算符
仅支持有限的混合数据类型组合用于比较操作。 若要了解详细信息,请参阅 DAX 运算符参考。
处理空白、空字符串和零值
下表总结了 DAX 与 Microsoft Excel 之间在处理空白时的不同之处。
表达式 | 德国DAX指数 | Excel表 |
---|---|---|
BLANK + BLANK | 空白 | 0(零) |
BLANK +5 | 5 | 5 |
空白 * 5 | 空白 | 0(零) |
5/空白 | 无限 | 错误 |
0/空白 | 南 | 错误 |
BLANK/BLANK | 空白 | 错误 |
FALSE 或空白 | 假 | 假 |
假和空白 | 假 | 假 |
TRUE 或 空白 | 正确 | 正确 |
真和空白 | 假 | 正确 |
空白或空白 | 空白 | 错误 |
空白和空白 | 空白 | 错误 |
有关特定函数或运算符如何处理空白的详细信息,请参阅 DAX 函数参考部分中每个 DAX 函数的各个主题。