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.Type。Record.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 值的各个部分的记录。 |