数据模型中的数据类型

应用对象
Microsoft 365 专属 Excel Excel 2024 Excel 2021 Excel 2019 Excel 2016

在数据模型中,每个列都有一个关联的数据类型,该类型指定列可以容纳的数据类型:整数、十进制数、文本、货币数据、日期和时间等。 数据类型还确定可以对列执行哪些类型的操作,以及将值存储在列中所需的内存量。

如果使用的是 Power Pivot 加载项,则可以更改列的数据类型。 如果将日期列导入为字符串,但你需要将其替换为其他字符串,则可能需要执行此操作。 有关详细信息,请参阅在 Power Pivot 中 设置列的数据类型

本文内容

数据类型摘要

下表列出了数据模型中支持的数据类型。 导入数据或在公式中使用值时,即使原始数据源包含不同的数据类型,数据也会转换为其中一种数据类型。 公式生成的值也使用这些数据类型。

Excel 中的数据类型 DAX 中的数据类型 说明
整数 整数值 1,2) 8 字节的 64 位 (8 字节 没有小数位数的数字。 整数可以是正数或负数,但必须是介于 -9,223,372,036,854,775,808 (-2^63) 和 9,223,372,036,854,775,807 (2^63-1) 之间的整数。
十进制数 实数 1,2) 8 字节的 64 位 (8 字节 实数是可以有小数位数的数字。 实数涵盖范围很广:
-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 之间的值,小数点后四位数字为固定精度。
不适用 空白 空白是 DAX 中表示和替换 SQL 空值的数据类型。 可以使用 BLANK 函数创建空白,并使用逻辑函数 ISBLANK 测试空白。

1 DAX 公式不支持小于表中列出的数据类型。

2 如果尝试导入具有非常大数值的数据,导入可能会失败,并出现以下错误:

内存中数据库错误:“表名>”表的<“<列名>”列包含值“1.7976931348623157e+308”,不受支持。 操作已取消。

出现此错误的原因是 Power Pivot 使用该值来表示空值。 以下列表中的值是 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”) ,返回 “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 中,空值、空白值、空单元格或缺失值都由相同的新值类型(BLANK)表示。 还可以使用 BLANK 函数生成空白,或使用 ISBLANK 函数测试空白。

在运算(如加法或串联法)中如何处理空白取决于单个函数。 下表总结了 DAX 和 Microsoft Excel 公式之间在处理空白的方式上的差异。

Expression DAX Excel
空白 + 空白 空白 0(零)
空白 +5 5 5
空白 * 5 空白 0(零)
5/空白 无穷 错误
0/空白 NaN 错误
空白/空白 空白 错误
FALSE 或空白 FALSE FALSE
FALSE 和空白 FALSE FALSE
真或空 TRUE TRUE
TRUE 和空白 FALSE TRUE
空白或空白 空白 错误
空白和空白 空白 错误

有关特定函数或运算符如何处理空白的详细信息,请参阅 DAX 函数参考部分中每个 DAX 函数的各个主题。

返回页首