在資料模型中,每個欄位都有一個相關的資料型態,用以指定欄位可容納的資料類型:整數、十進位數、文字、貨幣資料、日期與時間等等。 資料型態也決定了你可以對欄位執行哪些操作,以及儲存欄位值所需的記憶體容量。
如果你使用 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位小數。 |
| 正確/錯誤 | 布林值 | 要麼是真值,要麼是假值。 |
| 文字 | 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 使用該值來表示空值。 以下列表中的值為零值的同義詞:
| 值 |
|---|
| 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 | 日期/時間 |
| 日期/時間 | 日期/時間 | 日期/時間 | 日期/時間 | 日期/時間 |
例如,若在加法運算中使用實數與貨幣資料,兩個值都會轉換為實數,結果則以實數回傳。
減法 ( )
在下表中,列標頭是左邊 (最小) ,欄標頭是右邊 () 的子字。
| 操作員 ( ) | 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 |
例如,若整數與實數在乘法運算中結合,兩個數字都會轉換成實數,且回傳值也是實數。
(/)
在下表中,列標頭為分子,欄標頭為分母。
| 操作員 (/) (列/欄) |
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 表達式說明此行為:
=若 (FALSE () >「真」,則「表達式為真」、「表達式為假」) 回傳「表達式為真」
=IF (“12”>12,「表達式為真」、「表達式為假」) ,回傳「表達式為真」。
=如果 (“12”=12,「表達式為真」、「表達式為假」) ,回傳「表達式為假」
數字或日期/時間類型會隱含進行轉換,詳見下表:
| 比較運算子 | 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/空白 | Infinity | 錯誤 |
| 0/空白 | NaN | 錯誤 |
| 空白/空白 | 空白 | 錯誤 |
| 錯誤或空白 | FALSE | FALSE |
| 虛假且空白 | FALSE | FALSE |
| 真或空 | TRUE | TRUE |
| 真與空白 | FALSE | TRUE |
| 空白還是空白 | 空白 | 錯誤 |
| 空白,空白 | 空白 | 錯誤 |
關於特定函式或運算子如何處理空白的詳細資訊,請參閱「 DAX 函數參考」章節中每個 DAX 函式的個別主題。