类型和类型转换

Power Query M 使用类型对值进行分类,以便具有更结构化的数据集。 本文介绍最常用的 M 类型以及如何将一种类型转换为另一种类型。

常用类型

数据类型是指用于阐明特定数据结构的任何类型。 最常用的数据类型是基元类型。 这些类型包括:

  • type any,用于对任何值进行分类。
  • type null 可以对 null 值进行分类。
  • type logical 可以将值 true 和 false 进行分类。
  • type number 可以对数字值进行分类。
  • type time 可以对时间值进行分类。
  • type date 可以对日期值进行分类。
  • type datetime 可以对日期/时间值进行分类。
  • type datetimezone 可以对时区值进行分类。
  • type duration 可以对持续时间值进行分类。
  • type text 可以对文本值进行分类。
  • type binary 可以对二进制值进行分类。
  • type type 可以对类型值进行分类。
  • type list 可以对列表值进行分类。
  • type record 可以对记录值进行分类。
  • type table 可以对表值进行分类。
  • type function 可以对函数值进行分类。
  • type anynonnull 可以对 null 以外的所有值进行分类。
  • type none 不对任何值进行分类。

有关这些类型的详细信息,请转到 “类型”。

除了这些常见的数据类型,还有一组使用格式 *.Type的数据类型。 此格式最常用的数据类型为:

  • Byte.Type,它对 8 位数字值进行分类。
  • Int8.Type,它对 8 位数字值进行分类。
  • Int16.Type,它对 16 位数字值进行分类。
  • Int32.Type,它对 32 位数字值进行分类。
  • Int64.Type,它对 64 位数字值进行分类。
  • Single.Type,它对 9 位浮点数值进行分类。
  • Double.Type,它对 17 位浮点数值进行分类。
  • Decimal.Type,它对 15 位浮点数值进行分类。
  • Currency.Type,它用“.”分隔符右侧的四位数字对 19 位数字值进行分类。
  • Percentage.Type,它使用掩码对 15 位数字值进行分类,以将值的格式设置为百分比。
  • Guid.Type,它对 GUID 文本值进行分类。

基元类型也可以采用 *.Type 格式编写。 因此,可以按如下record所述编写numberNumber.TypeRecord.Type

使用上述任一类型时,请注意,与所有 M 代码一样,这些类型区分大小写。

下表包含有关每种类型的详细信息。

数据类型 说明
any 当值没有显式数据类型定义时,数据类型 any 是给定的状态。 类型 any 是对所有值进行分类的数据类型。
binary 数据类型 binary 可用于表示具有二进制格式的任何其他数据。
type 对其他值进行分类的值。 有关详细信息,请转到 “类型”。
null 表示缺少值或不确定或未知状态的值。
anynonnull 表示不可为空的任何类型。
date 仅表示日期(无时间部分)。
time 表示时间(无日期部分)。
datetime 表示日期和时间值。 日期的时间部分存储为 1/300 秒(3.33 毫秒)的整数倍数。 支持 1900 年至 9999 年之间的日期。
datetimezone 表示具有时区偏移量的 UTC 日期和时间。
duration 表示时间长度。 可以添加或减去具有正确结果的 datetime 字段。 有关详细信息,请转到 “持续时间”。
text Unicode 字符数据字符串。 可以是文本格式表示的字符串、数字或日期。 最大字符串长度为 268,435,456 个 Unicode 字符(其中每个 Unicode 字符为两个字节)或 536,870,912 个字节。
logical 或 . 的truefalse布尔值。
list 一个值,该值在枚举时生成值序列。 有关详细信息,请转到列表类型和列表值
record 字段的有序序列。 每个字段都包含一个字段名称和字段值。 有关详细信息,请转到 “记录类型 ”和 “记录”值
table 划分为列的行的有序序列。 有关详细信息,请转到表类型和表值
function 一个值,该值将一组参数映射到单个值。 有关详细信息,请转到 函数函数类型
number 表示用于数值和算术运算的任何数字。 有关详细信息,请转到 数字
Decimal.Type 表示 64 位(八字节)浮点数。 它是最常见的数字类型,与通常想到的数字相对应。 虽然设计为处理带小数值的数值,但它也处理整数。 它可以 Decimal.Type 处理从 –1.79E +308 到 –2.23E –308、0 和正值,从 2.23E –308 到 1.79E + 308。 例如,34、34.01 和 34.000367063 等数字是有效的十进制数。 可以在 15 位数字中 Decimal.Type 表示的最大精度。 小数分隔符可以在数字中的任何位置发生。 对应于 Decimal.Type Excel 如何存储其数字。 请注意,二进制浮点数不能表示其支持范围内具有 100% 准确性的所有数字。 因此,表示某些十进制数时,精度的细微差异可能会发生。
Currency.Type 此数据类型具有小数分隔符的固定位置。 小数分隔符始终右侧有四位数字,允许 19 位重要数字。 它可以表示的最大值是 922,337,203,685,477.5807(正或负)。 与这一点不同 Decimal.Type,始终 Currency.Type 精确,因此在浮点表示法不精确可能会导致错误的情况下非常有用。
Percentage.Type 从根本上讲,它与 a Decimal.Type相同,但它有一个掩码,用于将值的格式设置为百分比值。
Int8.Type 表示一个 8 位(一字节)带符号整数值。 因为它是整数,所以小数点右侧没有数字。 它允许 3 位数字;介于 –128 和 127 之间的正整数或负整数。 与上述 Currency.Type情况一样, Int8.Type 在需要控制舍入的情况下,这非常有用。
Int16.Type 表示 16 位(双字节)带符号整数值。 因为它是整数,所以小数点右侧没有数字。 它允许 6 位数字;介于 –32,768(–2^15)和 32,767(2^15-1)之间的正整数或负整数。 与上述 Currency.Type情况一样, Int16.Type 在需要控制舍入的情况下,这非常有用。
Int32.Type 表示 32 位(四字节)有符号整数值。 因为它是整数,所以小数点右侧没有数字。 它允许 10 位数字;介于 –2,147,483,648(–2^31)和 2,147,483,647(2^31–1)之间的正整数或负整数。 与上述 Currency.Type情况一样, Int32.Type 在需要控制舍入的情况下,这非常有用。
Int64.Type 表示 64 位(八字节)有符号整数值。 因为它是整数,所以小数点右侧没有数字。 它允许 19 位数字;介于 –9,223,372,036,854,775,808(–2^63)和 9,223,372,036,854,775,807(2^63–1)之间的正整数或负整数。 它可以表示各种数值数据类型的最大可能精度。 与上述 Currency.Type情况一样, Int64.Type 在需要控制舍入的情况下,这非常有用。
Byte.Type 表示 8 位(一字节)无符号整数值。 因为它是无符号整数,因此它没有小数点右侧的数字,并且只能包含正值。 它允许 3 位数字;介于 0 和 255 之间的正数。
Single.Type 表示单精度浮点数。 它的大致范围为 –3.99 X 1038 到 3.99 X 1038 ,支持大约 9 位数的精度。 它还可以表示正和负无穷大,以及 NaN (不是数字)。
Double.Type 表示双精度浮点数。 它的大致范围为 –1.7976931348623158 X 10307 到 1.7976931348623158 X 10307 ,支持大约 17 位数的精度。 它还可以表示正和负无穷大,以及 NaN (不是数字)。
Guid.Type 表示一个包含 32 个十六进制值的 128 位文本值,其外形规格<为 8 十六进制值>-<4 十六进制值>-4 十六进制值>-<<4 十六进制值>-<12 十六进制值>,构成 GUID 值。
none 不对值进行分类的数据类型。

唯一常用的 *.Type 值是枚举。 有关详细信息,请转到 枚举

类型转换

Power Query M 公式语言包含用于在类型之间进行转换的公式。 下面是 M 中转换公式的汇总。

数字

类型转换 说明
Number.FromText(文本为文本) 从文本值返回一个数值。
Number.ToText(数字为数字) 从数值返回一个文本值。
Number.From(值任意) 从某个值返回一个数字。
Byte.From(值任意) 从给定的值返回一个 8 位整数值。
Int8.From(值任意) 从给定的值返回一个 8 位整数值。
Int16.From(值任意) 从给定的值返回一个 16 位整数值。
Int32.From(值任意) 从给定的值返回一个 32 位整数值。
Int64.From(值任意) 从给定的值返回一个 64 位整数值。
Single.From(值任意) 从给定的值返回单个数值。
Double.From(值任意) 从给定的值返回一个双精度数值。
Decimal.From(值任意) 从给定的值返回一个十进制数值。
Currency.From(值任意) 从给定的值返回货币数值。
Percentage.From(值任意) 返回给定值的百分比数字值。

文本

类型转换 说明
Text.From(值任意) 返回数字、日期、时间、日期时间、datetimezone、逻辑、持续时间或二进制值的文本表示形式。
Guid.From(作为文本的值) 返回指定文本的 GUID 表示形式。

逻辑

类型转换 说明
Logical.FromText(文本作为文本) 作为逻辑 从文本值返回逻辑值 true 或 false。
Logical.ToText(逻辑为逻辑) 作为文本 从逻辑值返回文本值。
Logical.From(值任意) 作为逻辑 从某个值返回逻辑值。

Date、Time、DateTime 和 DateTimeZone

类型转换 说明
.FromText(text as text),作为 Date、Time、DateTime 和 DateTimeZone 从一组日期格式和区域性值返回 date、time、datetime 和 datetimezone 值。
.ToText(date、time、dateTime 或 dateTimeZone 作为 date、time、datetime 或 datetimezone)作为文本 从 date、time、datetime 或 datetimezone 值返回文本值。
.From(值与任意值一样) 从某个值返回 date、time、datetime 或 datetimezone 值。
.ToRecord(date、time、dateTime 或 dateTimeZone 作为 date、time、datetime 或 datetimezone) 返回包含 date、time、datetime 或 datetimezone 值的各个部分的记录。