表格式模型中支持的數據類型
適用於: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium
本文描述可用於表格式模型中的數據類型,並討論在數據分析表達式 (DAX) 公式中計算或使用數據時,數據類型的隱含轉換。
表格式模型中所使用的數據類型
當您匯入數據或使用公式中的值時,即使原始數據源包含不同的數據類型,數據也會轉換成下列其中一個數據類型。 公式所產生的值也會使用這些數據類型。
一般而言,這些數據類型會實作,以在匯出數據行中啟用精確的計算,而且為了一致性,相同的限制會套用至模型中的其餘數據。
用於數位、貨幣、日期和時間的格式應遵循用戶端上用來處理模型數據的地區設定格式。 您可以使用模型中的格式設定選項來控制顯示值的方式。
模型中的數據類型 | DAX 中的數據類型 | 描述 |
---|---|---|
整數 | 64 位 (八位元組) 整數值* 注意: DAX 公式不支援太小而無法保存描述中所列最小值的數據類型。 |
沒有小數位數的數位。 整數可以是正數或負數,但必須是介於 -9,223,372,036,854,775,807 (-2^63+1) 和 9,223,372,036,854,775,806 (2^63-2) 之間的整數。 |
十進位數 | 64 位 (八位元組) 實數* 注意: DAX 公式不支援太小而無法保存描述中所列最小值的數據類型。 |
實數是可以有小數位數的數位。 實數涵蓋廣泛的值: 從 -1.79E +308 到 -2.23E 的負值 -308 零 2.23E 到 1.79E + 308 的正值 -308 不過,有效位數限製為15個十進位數。 |
布爾 | 布爾 | True 或 False 值。 |
發簡訊 | 字串 | Unicode 字元數據字串。 可以是以文字格式表示的字串、數位或日期。 |
日期 | 日期/時間 | 接受日期時間表示中的日期和時間。 有效日期都是 1900 年 3 月 1 日之後的所有日期。 |
貨幣 | 貨幣 | 貨幣數據類型允許介於 -922,337,203,685,477.5807 到 922,337,203,685,477.5806 之間的值,具有四個固定精確度的小數位數。 |
N/A | 空白 | 空白是 DAX 中的數據類型,代表和取代 SQL Null。 您可以使用 BLANK 函式建立空白,並使用邏輯函式 ISBLANK 測試空白。 |
* 如果您試著匯入具有大型數值的數據,匯入可能會失敗,並出現下列錯誤:
記憶體內部資料庫錯誤:『<數據行名稱><』 資料表名稱>' 資料表的 ' 資料行包含值 '1.7976931348623157e+308',不受支援。 作業已取消。
之所以發生此錯誤,是因為模型設計工具使用該值來表示 Null。 下列清單中的值與先前提及的 Null 值同義:
價值 |
---|
9223372036854775807 |
-9223372036854775808 |
1.7976931348623158e+308 |
-1.7976931348623158e+308 |
從您的數據中移除值,然後再次嘗試匯入。
注意
您無法從包含超過 131,072 個字元的字串長度的 varchar(max) 資料行匯入。
數據表數據類型
此外,DAX 會使用 數據表 數據類型。 DAX 會在許多函式中使用這個數據類型,例如匯總和時間智能計算。 某些函式需要數據表的參考;其他函式會傳回數據表,然後做為其他函式的輸入。 在某些需要數據表做為輸入的函式中,您可以指定評估為數據表的表達式;對於某些函式,需要基表的參考。 如需特定函式需求的相關信息,請參閱 DAX 函式參考。
DAX 公式中的隱含和明確數據類型轉換
每個 DAX 函式都有做為輸入和輸出之數據類型的特定需求。 例如,某些函式需要某些自變數的整數,而其他函式需要日期;其他函式需要文字或數據表。
如果您指定為自變數的數據行中的數據與函式所需的數據類型不相容,則在許多情況下,DAX 會傳回錯誤。 不過,在可能的情況下,DAX 會嘗試隱含地將數據轉換成必要的數據類型。 例如:
您可以輸入數位,例如 「123」作為字串。 DAX 會剖析字串,並嘗試將其指定為數位數據類型。
您可以新增 TRUE + 1 並取得結果 2,因為 TRUE 會隱含轉換成數位 1 並執行作業 1+1。
如果您在兩個數據行中新增值,而一個值會以文字表示(“12”),另一個值會以數位表示,DAX 會隱含地將字元串轉換成數位,然後對數值結果執行加法。 下列表達式會傳回 44: = “22” + 22
如果您嘗試串連兩個數位,它們會顯示為字串,然後串連。 下列表達式會傳回 “1234”: = 12 & 34
下表摘要說明公式中執行的隱含數據類型轉換。 一般而言,語意模型設計工具的行為就像Microsoft Excel,並在指定作業需要時盡可能執行隱含轉換。
隱含數據轉換的數據表
執行的轉換類型是由運算符所決定,它會在執行要求的作業之前,轉換所需的值。 這些數據表會列出運算符,並指出與交集數據列中的數據類型配對時,數據行中每個數據類型所執行的轉換。
注意
這些數據表中不包含文字數據類型。 當數位以文字格式表示時,在某些情況下,模型設計工具會嘗試判斷數字類型,並將其表示為數位。
加法 (+)
整數 | 貨幣 | 真正 | 日期/時間 | |
---|---|---|---|---|
INTEGER | 整數 | 貨幣 | 真正 | 日期/時間 |
貨幣 | 貨幣 | 貨幣 | 真正 | 日期/時間 |
REAL | 真正 | 真正 | 真正 | 日期/時間 |
日期/時間 | 日期/時間 | 日期/時間 | 日期/時間 | 日期/時間 |
例如,如果在加法運算中搭配貨幣數據使用實數,則這兩個值都會轉換成 REAL,並將結果傳回為 REAL。
減法 (-)
在下表中,數據列標頭是minuend (左側),而數據行標頭是subtrahend (右側):
整數 | 貨幣 | 真正 | 日期/時間 | |
---|---|---|---|---|
INTEGER | 整數 | 貨幣 | 真正 | 真正 |
貨幣 | 貨幣 | 貨幣 | 真正 | 真正 |
REAL | 真正 | 真正 | 真正 | 真正 |
日期/時間 | 日期/時間 | 日期/時間 | 日期/時間 | 日期/時間 |
例如,如果在減法運算中使用日期與任何其他數據類型,則這兩個值都會轉換成日期,而且傳回值也是日期。
注意
表格式模型也支援一元運算符 - (負數),但此運算符不會變更操作數的數據類型。
乘法 \
整數 | 貨幣 | 真正 | 日期/時間 | |
---|---|---|---|---|
INTEGER | 整數 | 貨幣 | 真正 | 整數 |
貨幣 | 貨幣 | 真正 | 貨幣 | 貨幣 |
REAL | 真正 | 貨幣 | 真正 | 真正 |
例如,如果整數與乘法運算中的實數結合,則這兩個數位都會轉換成實數,而傳回值也是 REAL。
除法 (/)
在下表中,數據列標頭是 numerator,而數據行標頭是分母:(Row/Column)
整數 | 貨幣 | 真正 | 日期/時間 | |
---|---|---|---|---|
INTEGER | 真正 | 貨幣 | 真正 | 真正 |
貨幣 | 貨幣 | 真正 | 貨幣 | 真正 |
REAL | 真正 | 真正 | 真正 | 真正 |
日期/時間 | 真正 | 真正 | 真正 | 真正 |
例如,如果整數與除法運算中的貨幣值結合,則這兩個值都會轉換成實數,而結果也是實數。
比較運算子
只支持比較作業的一組有限混合數據類型組合。 若要深入瞭解,請參閱 DAX 運算符參考。
處理空白、空字串和零值
下表摘要說明 DAX 與 Microsoft Excel 之間的差異,其處理方式為空白:
表達 | DAX | 勝過 |
---|---|---|
空白 + 空白 | 空白 | 0 (零) |
空白 +5 | 5 | 5 |
空白 * 5 | 空白 | 0 (零) |
5/空白 | 無限 | 錯誤 |
0/空白 | 南 | 錯誤 |
空白/空白 | 空白 | 錯誤 |
FALSE 或空白 | 假 | 假 |
FALSE 和空白 | 假 | 假 |
TRUE 或空白 | 真 | 真 |
TRUE 和 BLANK | 假 | 真 |
空白或空白 | 空白 | 錯誤 |
空白和空白 | 空白 | 錯誤 |
如需特定函式或運算符如何處理空白的詳細資訊,請參閱 DAX 函式 DAX 函式參考一節中的個別主題。