注意: 我们希望能够尽快以你的语言为你提供最新的帮助内容。本页面是自动翻译的,可能包含语法错误或不准确之处。我们的目的是使此内容能对你有所帮助。可以在本页面底部告诉我们此信息是否对你有帮助吗?请在此处查看本文的英文版本以便参考。
在数据模型中,每个列都具有一个关联数据类型,用于指定该列可以容纳的数据类型:整数、小数、文本、货币数据、日期和时间等。数据类型还确定您可以对列执行哪些类型的操作以及在列中存储值所需使用的内存量。
如果您使用的是Power Pivot加载项, 则可以更改列的数据类型。如果日期列是作为字符串导入的, 但是您需要它是其他内容, 那么您可能需要执行此操作。有关详细信息, 请参阅在Power Pivot中设置列的数据类型。
本文内容
数据类型汇总
下表列出了数据模型中支持的数据类型。当您在公式中导入数据或者使用值时,即使原始数据源包含不同的数据类型,该数据也会转换为以下数据类型之一。从公式得到的值也使用这些数据类型。
Excel 中的数据类型 |
DAX 中的数据类型 |
说明 |
整数 |
一个 64 位(八字节)整数值 1, 2 |
没有小数位的数字。整数可以是正数或负数,但必须是介于 -9,223,372,036,854,775,808 (-2^63) 和 9,223,372,036,854,775,807 (2^63-1) 之间的整数。 |
小数 |
一个 64 位(八字节)实数 1, 2 |
实数是可以具有小数位的数字。实数涵盖的值范围很广: 从 -1.79E +308 到 -2.23E -308 的负值 零 从 2.23E -308 到 1.79E + 308 的正值 但是,有效位数限制为 15 个小数位。 |
TRUE/FALSE |
布尔值 |
True 或 False 值。 |
文本 |
字符串 |
一个 Unicode 字符数据字符串。可以是字符串,或是以文本格式表示的数字或日期。 最大字符串长度为 268,435,456 个 Unicode 字符(2 亿 5 千 6 百万个字符)或 536,870,912 字节。 |
日期 |
日期/时间 |
采用接受的日期-时间表示形式的日期和时间。 有效值是 1900 年 1 月 1 日后的所有日期。 |
货币 |
货币 |
货币数据类型允许值介于 -922,337,203,685,477.5808 到 922,337,203,685,477.5807 之间,并且具有四个小数位的固定精度。 |
不适用 |
空白 |
空白是 DAX 中的一种数据类型,表示并替代 SQL 中的 Null。可以使用 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。
减 (-)
在下表中,行标题是被减数(左侧),列标题是减数(右侧)。
运算符 (-) |
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"
如下表所述,为数字或日期/时间类型执行隐式转换:
比较运算符 |
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 + BLANK |
BLANK |
0(零) |
BLANK +5 |
5 |
5 |
BLANK * 5 |
BLANK |
0(零) |
5/BLANK |
无穷 |
错误 |
0/BLANK |
NaN |
错误 |
BLANK/BLANK |
BLANK |
错误 |
FALSE OR BLANK |
FALSE |
FALSE |
FALSE AND BLANK |
FALSE |
FALSE |
TRUE OR BLANK |
TRUE |
TRUE |
TRUE AND BLANK |
FALSE |
TRUE |
BLANK OR BLANK |
BLANK |
错误 |
BLANK AND BLANK |
BLANK |
错误 |
有关特定函数或运算符如何处理空白的详细信息, 请参阅dax 函数参考一节中每个 dax 函数的各个主题。