在數據模型中,每一欄都有相關聯的數據類型,指定欄可以保存的數據類型:整數、小數、文字、金額數據、日期和時間等等。 數據類型也會決定您可以在欄上執行的作業類型,以及儲存欄中值所需的內存量。
如果您使用 Power Pivot 載入宏,您可以變更欄的數據類型。 如果日期數據行是以字串的形式匯入,但您需要它做其他專案,您可能需要執行此動作。 如需詳細資訊,請參閱在 Power Pivot中 設定數據行的數據類型 。
本文內容
數據類型的摘要
下表列出數據模型中支持的數據類型。 當您匯入數據或在公式中使用值時,即使原始數據源包含不同的數據類型,數據也會轉換成其中一種數據類型。 公式產生的值也會使用這些數據類型。
Excel 中的數據類型 |
DAX 中的數據類型 |
描述 |
---|---|---|
整數 |
64 位 (8 位元組) 整數值 1、2 |
沒有小數位數的數位。 整數可以是正數或負數,但必須是介於 -9,223,372,036,854,775,808 之間的整數 (-2^2) 和 9,223,372,036,854,775,807 (2^63-1) 。 |
小數 |
64 位 (8 位元組) 實數 1、2 |
實數是可以有小數位數的數位。 實數涵蓋各種值: 從 -1.79E +308 到 -2.23E -308 的負值 零 從 2.23E -308 到 1.79E + 308 的正數 不過,有效位數的個數限制為15個小數字數。 |
TRUE/FALSE |
布林值 |
True 或 False 值。 |
文字 |
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 Nulls 的數據類型。 您可以使用 BLANK 函數建立空白,並使用邏輯函數 ISBLANK 來測試空白。 |
1 個 DAX 公式不支援小於表格中所列的數據類型。
2 如果您嘗試匯入的數值非常大的數據,匯入可能會失敗,並出現下列錯誤:
記憶體資料庫錯誤:「<數據表名稱>」數據表的「<欄名稱>」數據行包含不支援的值「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”,“Expression is true”, “Expression is false”) , 傳回 “Expression is true”
=IF (“12”>12,“Expression is true”, “Expression is false”) , 傳回 “Expression is true”。
=IF (“12”=12,“Expression 為 true”, “Expression is false”) , 傳回 “Expression is 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 |
---|---|---|
BLANK + BLANK |
空白 |
0 (零) |
BLANK +5 |
5 |
5 |
BLANK * 5 |
空白 |
0 (零) |
5/BLANK |
Infinity |
錯誤 |
0/BLANK |
南 |
錯誤 |
BLANK/BLANK |
空白 |
錯誤 |
FALSE 或 BLANK |
FALSE |
FALSE |
FALSE 和空白 |
FALSE |
FALSE |
TRUE 或 BLANK |
TRUE |
TRUE |
TRUE 和空白 |
FALSE |
TRUE |
空白或空白 |
空白 |
錯誤 |
空白和空白 |
空白 |
錯誤 |
如需特定函數或運算符如何處理空白的詳細數據,請參閱 DAX 函數參考一節中每個 DAX 函數的個別主題。