類型和類型轉換
Power Query M 會使用類型來分類值,以擁有更結構化的數據集。 本文說明最常用的 M 類型,以及如何將某個類型轉換成另一個類型。
常用的類型
數據類型是指用來釐清特定數據結構的任何類型。 最常使用的資料類型是基本類型。 這些類型包括:
-
type any
,它會分類任何值。 -
type null
,其用來分類空值。 -
type logical
,它會將值分類為 true 和 false。 -
type number
,它會分類數位值。 -
type time
,其會分類時間值。 -
type date
,其會分類日期值。 -
type datetime
,會分類日期時間值。 -
type datetimezone
,它會分類 datetimezone 值。 -
type duration
,其會分類持續時間值。 -
type text
,它會將文字值分類。 -
type binary
,它會分類二進位值。 -
type type
,它會分類類型值。 -
type list
,它會分類清單值。 -
type record
,它會分類記錄值。 -
type table
,它會分類數據表值。 -
type function
,其會分類函式值。 -
type anynonnull
,它會分類排除 null 的所有值。 -
type none
,其不會分類任何值。
如需這些類型的詳細資訊,請移至 Types。
除了這些常見的資料類型之外,還有一組使用*.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
格式撰寫。 因此,您可以將 number
寫入為 Number.Type
、record
Record.Type
等等。
當您使用上述任何類型時,請注意,就像所有 M 程式代碼一樣,這些類型會區分大小寫。
下表包含這些類型的詳細資訊。
數據類型 | 描述 |
---|---|
any |
當值沒有明確的數據類型定義時,any 數據類型是指定的狀態。
any 類型是分類所有值的數據類型。 |
binary |
binary 數據類型可用來表示具有二進位格式的任何其他數據。 |
type |
可用來分類其他值的值。 如需詳細資訊,請前往 Types。 |
null |
表示沒有值,或不確定或未知狀態的值。 |
anynonnull |
表示不可為 Null 的任何類型。 |
date |
只代表日期(沒有時間部分)。 |
time |
僅表示時間(不包括日期部分)。 |
datetime |
表示日期和時間值。 日期的時間部分會以 1/300 秒(3.33 毫秒)的倍數分數形式儲存。 支援 1900 年至 9999 年之間的日期。 |
datetimezone |
表示具有時區位移的UTC日期和時間。 |
duration |
表示時間長度。 此類型可以從具有正確結果的 datetime 欄位新增或減去。 如需詳細資訊,請移至 Duration。 |
text |
Unicode 字元數據字串。 可以是以文字格式表示的字串、數位或日期。 字串長度上限為 268,435,456 個 Unicode 字元(其中每個 Unicode 字元都是兩個字節),或 536,870,912 個字節。 |
logical |
布林值為 true 或 false 。 |
list |
在列舉時能產生一系列值的值。 如需詳細資訊,請移至 清單類型 和 清單值。 |
record |
已排序的欄位序列。 每個欄位都包含欄位名稱和欄位值。 如需詳細資訊,請移至 記錄類型 和 記錄值。 |
table |
已排序的數據列序列,分割成數據行。 如需詳細資訊,請移至 資料表類型 和 資料表值。 |
function |
一個將一組參數映射到單一值的值。 如需詳細資訊,請移至 Functions 和 函式類型。 |
number |
表示用於數值和算術運算的任何數位。 如需詳細資訊,請前往 。 |
Decimal.Type |
表示 64 位 (八位元組) 浮點數。 這是最常見的數字類型,且與您通常想像的數字相對應。 雖然設計用來處理分數值的數位,但它也會處理整數。
Decimal.Type 可以處理從 –1.79E +308 到 –2.23E –308、0 和 2.23E –308 到 1.79E + 308 的負值。 例如,34、34.01 和 34.000367063 等數位是有效的十進位數。
Decimal.Type 中可表示的最大精度是 15 位數。 小數分隔符可以在數位中的任何位置發生。
Decimal.Type 對應至 Excel 儲存其數位的方式。 請注意,二進位浮點數不能代表其支援範圍內具有100% 精確度的所有數位。 因此,代表特定十進位數時,可能會發生精確度的次要差異。 |
Currency.Type |
此數據類型具有小數分隔符的固定位置。 小數分隔符的右邊一律有四位數,並允許 19 位數的顯著性。 它可以表示的最大值為 922,337,203,685,477.5807(正數或負數)。 不同於 Decimal.Type ,Currency.Type 一律精確,因此在浮點表示法不精確可能會造成錯誤的情況下很有用。 |
Percentage.Type |
基本上與 Decimal.Type 相同,但它具有遮罩,將值格式化為百分比值。 |
Int8.Type |
表示一個8位元(1位元組)的有符號整數值。 因為它是整數,所以在小數點右邊沒有數字。 它允許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
類型轉換 | 描述 |
---|---|
Text.From(任何值) 作為文字 | 傳回數字、日期、時間、日期時間、日期時區、邏輯、持續時間或二進位值的文字表示。 |
Guid.From(文字值) 作為文字 | 傳回指定文字的 GUID 表示。 |
邏輯
類型轉換 | 描述 |
---|---|
Logical.FromText(文字作為文本) 邏輯處理 | 從文字值傳回 true 或 false 的邏輯值。 |
Logical.ToText(作為邏輯來看) 作為文字 | 從邏輯值傳回文字值。 |
Logical.From(任何值)作為邏輯運算 | 從值傳回邏輯值。 |
日期、時間、日期時間和日期時區
類型轉換 | 描述 |
---|---|
.FromText(text as text) as date、time、datetime 或 datetimezone | 從一組日期格式和文化特性值傳回日期、時間、日期時間或日期時區值。 |
.ToText(date、time、dateTime 或 dateTimeZone as date、time、datetime 或 datetimezone) 作為文字 | 從日期、時間、日期時間或日期時區值傳回文字值。 |
.From(value as any) | 從值傳回日期、時間、日期時間或日期時區值。 |
.ToRecord(date、time、dateTime 或 dateTimeZone as date、time、datetime 或 datetimezone) | 傳回記錄,其包含日期、時間、日期時間或日期時區值的部分。 |