在資料模型中,每一欄都有相關聯的資料類型,可指定欄可以容納的資料類型:整數、十進位、文字、貨幣資料、日期和時間等。 資料類型也決定您可以在欄上執行哪些類型的作業,以及將值儲存在欄中所需的記憶體量。
如果您使用的是 Power Pivot 增益集,您可以變更欄的資料類型。 如果日期資料行是匯入為字串,但您需要執行此動作,但您需要它是其他項目。 如需詳細資訊,請參閱設定 Power Pivot 中的 資料行資料類型 。
本文內容
資料類型摘要
下表列出資料模型中支援的資料類型。 當您匯入資料或在公式中使用值時,即使原始資料來源包含不同的資料類型,資料也會轉換成其中一種資料類型。 公式產生的值也會使用這些資料類型。
| Excel 中的資料類型 | DAX 中的資料類型 | 描述 |
|---|---|---|
| 整數 | 64 位元 (8 位元組) 整數值 1、2 | 沒有小數位數的數字。 整數可以是正數或負數,但整數必須介於 -9,223,372,036,854,775,808 (-2^63) 和 9,223,372,036,854,775,807 (2^63-1) 。 |
| 十進位數字 | 實數 1、2 的 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 個 mega 字元,即 536,870,912 位元組。 |
| 日期 | 日期/時間 | 接受的日期 - 時間表示法中的日期和時間。 有效日期為 1900 年 1 月 1 日之後的所有日期。 |
| 貨幣 | 貨幣 | 貨幣資料類型允許介於 -922,337,203,685,477.5808 到 922,337,203,685,477.5807 之間的值,並具有固定精確度的四位小數。 |
| 不適用 | 空白 | 空白是 DAX 中代表並取代 SQL Null 的資料類型。 您可以使用 BLANK 函數建立空白,並使用邏輯函數 ISBLANK 測試空白。 |
1 DAX 公式不支援小於表格中所列資料類型的資料類型。
2 如果您嘗試匯入含有非常大數值的資料,匯入可能會失敗並出現下列錯誤:
記憶體內部資料庫錯誤: '<table name>' 資料表的 '<column name>' 欄包含不支援的值 '1.7976931348623157e+308'。 此作業已取消。
之所以發生這個錯誤,是因為 Power Pivot 是使用該值來表示 Null。 下列清單中的值是 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”,“運算式為 true”,“運算式為 false”) ,傳回 “運算式為 true”
=IF (“12”>12,“運算式為 true”, “運算式為 false”) ,傳回 “運算式為 true”。
=IF (“12”=12,“運算式為 true”, “運算式為 false”) ,傳回 “運算式為 false”
系統會針對數字或日期/時間類型隱含執行轉換,如下表所述:
| 比較運算子 | INTEGER | CURRENCY | REAL | 日期/時間 |
|---|---|---|---|---|
| INTEGER | INTEGER | CURRENCY | REAL | REAL |
| CURRENCY | CURRENCY | CURRENCY | REAL | REAL |
| REAL | REAL | REAL | REAL | REAL |
| 日期/時間 | REAL | REAL | REAL | 日期/時間 |
處理空白、空字串和零值
在 DAX 中,Null、空白值、空白儲存格或遺失值都會以相同的新值類型 BLANK 來表示。 您也可以使用 BLANK 函數產生空白,或使用 ISBLANK 函數測試空白。
在運算中如何處理空白,例如加法或串連,取決於個別函數。 下表摘要說明 DAX 和 Microsoft Excel 公式在處理空白的方式上的差異。
| Expression | DAX | Excel |
|---|---|---|
| 空白 + 空白 | 空白 | 0 (零) |
| 空白 +5 | 5 | 5 |
| 空白 * 5 | 空白 | 0 (零) |
| 5/空白 | Infinity | 錯誤 |
| 0/空白 | NaN | 錯誤 |
| 空白/空白 | 空白 | 錯誤 |
| FALSE 或空白 | FALSE | FALSE |
| FALSE 和空白 | FALSE | FALSE |
| TRUE 或空白 | TRUE | TRUE |
| TRUE 和空白 | FALSE | TRUE |
| 空白或空白 | 空白 | 錯誤 |
| 空白和空白 | 空白 | 錯誤 |
如需特定函數或運算子如何處理空白的詳細資訊,請參閱 DAX 函數參考一節中的每個 DAX 函數個別主題。