Power BI Desktop 中的數據類型

本文說明 Power BI Desktop 和數據分析表示式 (DAX) 支援的數據類型。

當 Power BI 載入資料時,它會嘗試將源數據行的數據類型轉換成數據類型,以支援更有效率的記憶體、計算和數據視覺效果。 例如,如果您從 Excel 匯入的值數據行沒有分數值,Power BI Desktop 會將數據行轉換成 神秘 個數位數據類型,這更適合儲存整數。

這個概念很重要,因為某些 DAX 函式具有特殊的數據類型需求。 在許多情況下,DAX 會隱含地轉換數據類型,但在某些情況下則不會。 例如,如果 DAX 函式需要 Date 數據類型,但數據行的數據類型為 Text,DAX 函式將無法正常運作。 因此,對數據行使用正確的數據類型相當重要且有用。

判斷並指定數據行的數據類型

在 Power BI Desktop 中,您可以在 Power Query 編輯器、數據檢視或報表檢視中決定並指定資料行的數據類型:

  • 在 Power Query 編輯器 中,選取數據行,然後在功能區的 [轉換] 群組中選取 [數據類型]。

    Screenshot of the Power Query Editor, showing the Data type dropdown selection.

  • 在 [數據檢視] 或 [報表檢視] 中,選取數據行,然後選取功能區 [數據行工具] 索引卷標上 [數據類型] 旁的下拉式箭號。

    Screenshot of Data View, showing the Data type dropdown selection.

Power Query 編輯器 中的 [數據類型] 下拉式清單選取專案有兩種數據類型,不存在於 [資料檢視] 或 [報表檢視]:[日期/時間/時區] 和 [持續時間]。 當您將具有這些數據類型的數據行載入 Power BI 模型時, Date/Time/Timezone 資料行會 轉換成日期/時間 數據類型,而 Duration 數據行會 轉換成十進位數 數據類型。

Power Query 編輯器 外部不支援 Binary 資料類型。 在 Power Query 編輯器 中,如果您在將二進位檔轉換成其他數據類型,然後再將它載入 Power BI 模型,則可以使用 Binary 數據類型。 基於舊版原因,[數據檢視] 和 [報表檢視] 功能表中有二進位選取專案存在,但如果您嘗試將二進位數據行載入 Power BI 模型,可能會發生錯誤。

數字類型

Power BI Desktop 支援三種數字類型:十進位數固定十進位數神秘 數

您可以使用表格式物件模型 (TOM) 資料行 DataType 屬性來指定 DataType 數字類型的列舉。 如需以程式設計方式修改Power BI 中對象的詳細資訊,請參閱 使用表格式物件模型設計Power BI語意模型

十進位數

十進位數 是最常見的數字類型,而且可以使用小數值和整數來處理數位。 十進位數代表 64 位 (八位元組) 浮點數,負值從 -1.79E +308 到 -2.23E -308、正值從 2.23E -3081.79E +3080。 34、34.0134.000367063數位是有效的十進制數。

十進位數類型可以表示的最高精確度是15位數。 小數分隔符可以在數位中的任何位置發生。 此類型對應至 Excel 儲存其數位的方式,而 TOM 會將此類型指定為 DataType.Double 列舉。

固定的小數位數

固定 十進位數 數據類型具有小數分隔符的固定位置。 小數分隔符的右邊一律有四位數,並允許 19 位數的顯著性。 固定十進位數可以表示的最大值為正數或負數 922,337,203,685,477.5807

固定 十進位數 類型在捨入可能會造成錯誤的情況下很有用。 具有小數值的數字有時會累積並強制數位稍微不準確。 固定 十進位數 類型可藉由截斷小數分隔符右邊四位數的值,協助您避免這類錯誤。

此數據類型對應至 SQL Server 的 十進位 (19,4)Analysis Services 中的 Currency 數據類型和 Excel 中的 Power Pivot。 TOM 將此類型指定為 DataType.Decimal 列舉。

整數

神秘 le 數位代表 64 位 (八位元組) 整數值。 因為它是整數,所以 神秘 le 數位在小數點右邊沒有位數。 此類型允許介於 -9,223,372,036,854,775,807-2^63+1 之間的 19 位數為正整數或負整數 ) 和 9,223,372,036,854,775,8062^63-2),因此可以代表數值數據類型的最大可能數位。

如同固定十進位類型,當您需要控制四捨五入時,神秘 le 數字類型很有用。 TOM 會將 神秘 le number 數據類型表示為 DataType.Int64 Enum。

注意

Power BI Desktop 數據模型支援 64 位整數值,但由於 JavaScript 限制,Power BI 視覺效果可以安全地表達的最大數目是 9,007,199,254,740,9912^53-1)。 如果您的數據模型具有較大的數位,您可以在將數據模型新增至視覺效果之前,透過計算來減少其大小。

數位類型計算的正確性

Decimal number 數據類型的數據行值會根據 IEEE 754 Standard 作為浮點數的近似數據類型來儲存 近似數據類型具有固有的有效位數限制,因為與其儲存確切的數位值,不如儲存非常接近或四捨五入的近似值。

如果浮點值無法可靠地量化浮點數,可能會發生精確度遺失或 不精確。 在某些報告案例中,不精確可能會顯示為非預期或不正確的計算結果。

十進位數位數據類型值之間的相等比較計算可能會傳回非預期的結果。 相等比較包括等於 =、大於 >、小於 <、大於或等於 >=,以及小於或等於 <=

當您在 DAX 運算式中使用 RANKX 函 式時,此問題最為明顯,它會計算結果兩次,因而產生稍微不同的數位。 報表使用者可能不會注意到這兩個數位之間的差異,但排名結果可能會明顯不正確。 若要避免非預期的結果,您可以將數據行數據類型從 Decimal number 變更為固定十進位數神秘 le 數位,或使用 ROUND 執行強制四捨五入。 固定 十進位數 數據類型的精確度更高,因為小數分隔符一律右邊有四位數。

很少會計算總和十進位數數據類型數據行的值,可能會傳回非預期的結果。 此結果最有可能是具有大量正數和負數的數據行。 總和結果會受到數據行中數據列值分佈的影響。

如果必要的計算會在加總大部分負數之前加總大部分正數,則開頭的大正部分總和可能會扭曲結果。 如果計算碰巧增加平衡的正數和負數,查詢會保留更精確的位數,因此會傳回更精確的結果。 若要避免非預期的結果,您可以將數據行數據類型從 Decimal number 變更為固定十進位數神秘 le 數位

日期/時間類型

Power BI Desktop 支援 Power Query 編輯器 中的五種日期/時間數據類型。 載入期間,日期/時間/時區持續時間都會轉換成 Power BI Desktop 數據模型。 此模型支援 Date/Time,或者您可以將值格式化為 [日期 ] 或 [時間 ]。

  • 日期/時間 同時代表日期和時間值。 基礎日期/時間值會儲存為十進位數類型,因此您可以在這兩種類型之間轉換。 時間部分會儲存為 1/300 秒 (3.33 毫秒) 的整數倍數。 數據類型支援介於 1900 年到 9999 年之間的日期。

  • Date 只代表沒有時間部分的日期。 Date 會轉換成模型做為分數值的日期/時間值。

  • 時間 只代表沒有日期部分的時間。 Time 會轉換成模型做為日期/時間值,且小數點左邊沒有數位。

  • 日期/時間/時區 代表具有時區位移的 UTC 日期/時間,並在載入模型時轉換成 日期/時間 。 Power BI 模型不會根據使用者的位置或地區設定來調整時區。 載入美國模型中的 09:00 值,會在開啟或檢視報表的位置顯示為 09:00。

  • Duration 代表時間長度,並在載入模型時轉換成 十進位數 類型。 在 [十進制數 ] 類型中,您可以使用正確的結果,從 日期/時間 值新增或減去值,並輕鬆地在顯示大小值的視覺效果中使用值。

文字類型

Text 資料類型是 Unicode 字元數據字串,可以是以文字格式表示的字母、數位或日期。 根據 Power BI 的基礎 Power Query 引擎,字串長度的實際最大限制約為 32,000 個 Unicode 字元,以及其文字數據類型長度的限制。 超出實際上限的文字數據類型可能會導致錯誤。

Power BI 儲存文字數據的方式可能會導致在某些情況下以不同的方式顯示數據。 下一節說明可能導致文字數據在查詢數據 Power Query 編輯器 和載入 Power BI 之間稍微變更外觀的常見情況。

區分大小寫

在 Power BI 中儲存和查詢資料的引擎不區分大小寫,並將字母大小寫視為相同的值。 “A” 等於 “a”。 不過,Power Query 會 區分大小寫,其中 “A” 與 “a” 不同。 區分大小寫的差異可能會導致文字數據在載入 Power BI 後似乎莫名其妙地變更大寫的情況。

下列範例顯示訂單數據:每個訂單唯一的 OrderNo 數據行,以及顯示訂單時間手動輸入之尋址者名稱的 Addressee 數據行。 Power Query 編輯器 顯示相同訂單的數個訂單以不同大小寫輸入系統中的被尋址者名稱。

Screenshot of textual data with various capitalizations in Power Query

Power BI 載入數據之後,[資料] 索引標籤中重複名稱的大寫會從原始專案變更為其中一個大寫變體。

Screenshot that shows the textual data with changed capitalization after loading into Power BI.

之所以發生這項變更,是因為 Power Query 編輯器 區分大小寫,因此它會顯示與儲存在來源系統中的數據完全相同。 在 Power BI 中儲存資料的引擎不區分大小寫,因此會將小寫和大寫版本的字元視為相同。 載入 Power BI 引擎的 Power Query 數據可能會隨之變更。

Power BI 引擎會在載入數據時個別評估每個數據列,從頂端開始。 針對每一個文字數據行,例如 Addressee,引擎會儲存唯一值的字典,以透過數據壓縮來改善效能。 引擎會將 Addressee 數據行中的前三個值視為唯一值,並將其儲存在字典中。 之後,因為引擎不區分大小寫,所以會將名稱評估為相同。

引擎會將 「Taina Hasu」 的名稱視為與 「TAINA HASU」 和 「Taina HASU」 相同的名稱,因此不會儲存這些變化,而是參考它儲存的第一個變化。 名稱 「MURALI DAS」 會以大寫字母顯示,因為這是引擎第一次從上到下載入數據時評估它的方式。

此影像說明評估程式:

Diagram that shows the data load process and mapping text values to a dictionary of unique values.

在上述範例中,Power BI 引擎會載入第一個數據列、建立 Addressee 字典,並將 Taina Hasu 新增至其中。 引擎也會在所載入數據表的 Addressee 資料行中加入該值的參考。 引擎對第二個和第三個數據列執行相同的動作,因為這些名稱在忽略大小寫時不等於其他名稱。

針對第四個數據列,引擎會比較值與字典中的名稱,並尋找名稱。 由於引擎不區分大小寫,因此“TAINA HASU” 和 “Taina Hasu” 是相同的。 引擎不會將新名稱新增至字典,但會參考現有的名稱。 其餘數據列會執行相同的程式。

注意

由於在Power BI 中儲存和查詢資料的引擎不區分大小寫,因此當您使用區分大小寫的來源在 DirectQuery 模式中工作時,請特別小心。 Power BI 假設來源已排除重複的數據列。 因為 Power BI 不區分大小寫,所以它會將兩個只有大小寫不同的值視為重複值,而來源可能不會將它們視為此類值。 在這種情況下,最終結果為未定義。

若要避免這種情況,如果您使用 DirectQuery 模式搭配區分大小寫的數據源,請將來源查詢或 Power Query 編輯器 中的大小寫正規化。

前置和尾端空格

Power BI 引擎會自動修剪任何追蹤文字數據的尾端空格,但不會移除數據前面的前置空格。 若要避免混淆,當您使用包含前置或尾端空格的數據時,您應該使用 Text.Trim 函式來移除文字開頭或結尾的空格。 如果您未移除前置空格,關聯性可能會因為重複值而無法建立,否則視覺效果可能會傳回非預期的結果。

下列範例顯示客戶的相關數據: 包含客戶名稱的 Name 數據行,以及每個專案唯一 的 Index 資料 行。 為了清楚起見,這些名稱會出現在引號內。 客戶名稱會重複四次,但每次都有不同的前置和尾端空格組合。 這些變化可能會隨著時間的手動數據輸入而發生。

Row 前置空間 尾端空間 名稱 索引 Text length
1 No No “迪倫·威廉姆斯” 1 14
2 No Yes “迪倫·威廉姆斯” 10 15
3 No “迪倫·威廉姆斯” 20 15
4 Yes Yes “迪倫·威廉姆斯” 40 16

在 Power Query 編輯器 中,產生的數據如下所示。

Screenshot of textual data with various leading and trailing spaces in Power Query Editor.

當您載入數據之後移至 Power BI 中的 [資料 ] 索引標籤時,相同的數據表看起來會像下圖一樣,其數據列數目與之前相同。

Screenshot of the same textual data after loading into Power BI returns the same number of rows as before.

不過,根據此數據的視覺效果只會傳回兩個數據列。

Screenshot of a table visual based on the same data returning just two lines of data.

在上圖中,第一個數據列的 Index 欄位總值為 60,因此視覺效果中的第一個數據列代表載入數據的最後兩個數據列。 總 Index 值為 11 的第二個數據列代表前兩個數據列。 視覺效果與數據表之間數據列數目的差異,是因為引擎會自動移除或修剪尾端空格,而不是前置空格。 因此,引擎會評估第一個和第二個數據列,第三個和第四個數據列相同,而視覺效果會傳回這些結果。

此行為也可能造成與關聯性相關的錯誤訊息,因為偵測到重複的值。 例如,視關聯性的組態而定,您可能會看到類似下圖的錯誤:

Screenshot of an error message about duplicate values.

在其他情況下,您可能無法建立多對一或一對一關聯性,因為偵測到重複的值。

Screenshot of the relationship dialog showing a 'the cardinality you selected isn't valid for this relationship' error, which is related to duplicate values being detected.

您可以將這些錯誤追蹤回前置或尾端空格,並使用 Text.Trim 或 Transform 下的 Trim 來解決這些錯誤,以移除 Power Query 編輯器 中的空格。

True/false 類型

True/false 數據類型是 TrueFalse布爾值。 為了獲得最佳且最一致的結果,當您將包含布爾值 true/false 資訊的數據行載入 Power BI 時,請將數據行類型設定為 True/False

在某些情況下,Power BI 會轉換和顯示數據的方式不同。 本節說明轉換布爾值的常見案例,以及如何解決在 Power BI 中建立非預期結果的轉換。

在此範例中,您會載入客戶是否已註冊電子報的數據。 TRUE表示客戶已註冊電子報,而 FALSE表示客戶尚未註冊。

不過,當您將報表發佈至 Power BI 服務 時,電子報註冊狀態數據行會顯示 0 和 -1,而不是 TRUE 或 FALSE 的預期值。 下列步驟說明此轉換的發生方式,以及如何防止轉換。

此資料表的簡化查詢會出現在下圖中:

Screenshot that shows columns set to Boolean.

[訂閱電子報] 數據行的數據類型會設定為 [任何],因此,Power BI 會將數據載入模型中做為 Text

Screenshot showing the data loaded into Power BI.

當您新增顯示每位客戶詳細資訊的簡單視覺效果時,數據會顯示在視覺效果中,如預期般出現在Power BI Desktop中,以及發佈至 Power BI 服務。

Screenshot of a visual that shows the data appearing as expected.

不過,當您在 Power BI 服務 中重新整理語意模型時,視覺效果中的 [訂閱通訊] 數據行會將值顯示為 -10,而不是將它們顯示為 TRUEFALSE

Screenshot of a visual that shows data appearing in an unexpected format after refresh.

如果您從 Power BI Desktop 重新發布報表,[訂閱的電子報] 資料行會如預期般再次顯示 TRUEFALSE,但一旦重新整理出現在 Power BI 服務 中,值會再次變更為顯示 -10

防止這種情況的解決方案是在 Power BI Desktop 中將任何布爾數據行設定為輸入 True/False ,然後重新發布報表。

Screenshot of changing the data type of the column to True/False.

當您進行變更時,視覺效果會顯示 [ 訂閱電子報 ] 數據行中的值稍微不同。 與表格中輸入的所有大寫字母文字相反,只有第一個字母會大寫。 這項變更是變更數據行數據類型的其中一個結果。

Screenshot of values appearing differently when you change the data type.

當您變更數據類型之後,重新發佈至 Power BI 服務,然後重新整理就會發生,報表會將值顯示為 TrueFalse,如預期般顯示。

Screenshot that shows true or false values that use the True/false data type appear as expected after refresh.

總而言之,在 Power BI 中使用布爾值數據時,請確定數據行已設定為 Power BI Desktop 中的 True/False 數據類型。

空白類型

空白 是代表和取代 SQL Null 的 DAX 數據類型。 您可以使用 BLANK 函式建立空白,並使用 ISBLANK 邏輯函式測試空白

二進位類型

您可以使用 Binary 資料類型來表示任何具有二進位格式的數據。 在 Power Query 編輯器 中,如果您在將二進位檔轉換成其他數據類型,然後再將它載入 Power BI 模型,則可以在載入二進位檔時使用此數據類型。

Power BI 數據模型中不支援二進位數據行。 由於舊版原因,[ 數據檢視] 和 [報表檢視] 功能表中存在二進位選取範圍,但如果您嘗試將二進位 數據行載入 Power BI 模型,可能會發生錯誤。

注意

如果二進位數據行位於查詢步驟的輸出中,嘗試透過閘道重新整理資料可能會導致錯誤。 建議您明確地移除任何二進位數據行作為查詢的最後一個步驟。

資料表類型

DAX 在許多函式中使用數據表數據類型,例如匯總和時間智能計算。 某些函式需要數據表的參考。 其他函式會傳回數據表,您接著可以使用做為其他函式的輸入。

在某些需要數據表做為輸入的函式中,您可以指定評估為數據表的運算式。 某些函式需要基表的參考。 如需特定函式需求的相關信息,請參閱 DAX 函式參考

隱含和明確的數據類型轉換

每個 DAX 函式都有要當做輸入和輸出使用之數據類型的特定需求。 例如,某些函式需要某些自變數的整數,而其他自變數則為日期。 其他函式需要文字或表格。

如果您指定為自變數的數據行中的數據與函式所需的數據類型不相容,DAX 可能會傳回錯誤。 不過,在可能的情況下,DAX 會嘗試隱含地將數據轉換成必要的數據類型。

例如:

  • 如果您輸入日期做為字串,DAX 會剖析字串,並嘗試將它轉換成其中一個 Windows 日期和時間格式。
  • 您可以新增 TRUE + 1 並取得結果 2,因為 DAX 會隱含地將 TRUE 轉換為數位 1,並執行作業 1+1
  • 如果您在兩個數據行中新增值,其中一個值以文字表示(“12”),另一個則表示為數位(12),DAX 會隱含地將字元串轉換成數位,然後對數值結果執行加法。 表達式 = “22” + 22 會傳 回 44
  • 如果您嘗試串連兩個數位,DAX 會將它們呈現為字串,然後串連。 表達式 = 12 和 34 會傳回 “1234”。

隱含數據轉換的數據表

運算符會藉由轉換所需的值來判斷 DAX 的轉換類型,然後再執行要求的作業。 下表列出運算符,而當 DAX 與交集數據格中的數據類型配對時,其轉換 DAX 會在每個數據類型上執行。

注意

這些數據表不包含 Text 資料類型。 當數位以文字格式表示時,在某些情況下,Power BI 會嘗試判斷數字類型,並將數據表示為數位。

加法 (+)

INTEGER CURRENCY REAL 日期時間
INTEGER INTEGER CURRENCY REAL 日期時間
CURRENCY CURRENCY CURRENCY REAL 日期時間
REAL REAL REAL REAL 日期時間
日期/時間 日期時間 日期時間 日期時間 日期時間

例如,如果加法運算搭配貨幣數據使用實數,DAX 會將兩個值轉換成 REAL,並以 REAL 傳回結果。

減法 (-)

在下表中,數據列標頭是minuend (左方),而數據行標頭是subtrahend(右側)。

INTEGER CURRENCY REAL 日期時間
INTEGER INTEGER CURRENCY REAL REAL
CURRENCY CURRENCY CURRENCY REAL REAL
REAL REAL REAL REAL REAL
日期/時間 日期時間 日期時間 日期時間 日期時間

例如,如果減法運算使用具有任何其他數據類型的日期,DAX 會將這兩個值轉換成日期,而傳回值也是日期。

注意

數據模型支援一元運算符 - (負數),但此運算符不會變更操作數的數據類型。

乘法 (*)

INTEGER CURRENCY REAL 日期時間
INTEGER INTEGER CURRENCY REAL INTEGER
CURRENCY CURRENCY REAL CURRENCY CURRENCY
REAL REAL CURRENCY REAL REAL

例如,如果乘法運算結合整數與實數,DAX 會將這兩個數位轉換成實數,而傳回值也是 REAL。

除法 (/)

在下表中,數據列標頭是 numerator,而數據行標頭則是分母。

INTEGER CURRENCY REAL 日期時間
INTEGER REAL CURRENCY REAL REAL
CURRENCY CURRENCY REAL CURRENCY REAL
REAL REAL REAL REAL REAL
日期/時間 REAL REAL REAL REAL

例如,如果除法運算結合整數與貨幣值,DAX 會將這兩個值轉換成實數,而結果也是實數。

比較運算子

在比較表達式中,DAX 會將布爾值視為大於字串值,以及大於數值或日期/時間值的字串值。 數位和日期/時間值具有相同的等級。

DAX 不會對布爾值或字串值進行任何隱含轉換。 BLANK 或空白值會根據其他比較值的數據類型, 轉換成 0False

下列 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 is true", "Expression is false") 會傳回 「Expression is false」。。

DAX 會針對數值或日期/時間類型執行隱含轉換,如下表所述:

比較
運算子
INTEGER CURRENCY REAL 日期時間
INTEGER INTEGER CURRENCY REAL REAL
CURRENCY CURRENCY CURRENCY REAL REAL
REAL REAL REAL REAL REAL
日期/時間 REAL REAL REAL 日期/時間

空白、空字串和零值

DAX 代表 Null、空白值、空白儲存格或相同新實值類型的遺漏值空白。 您也可以使用 BLANK 函式產生空白,或使用 ISBLANK 函式測試空白。

新增或串連等作業如何處理空白,取決於個別函式。 下表摘要說明 DAX 與 Microsoft Excel 公式如何處理空白之間的差異。

運算式 DAX Excel
空白 + 空白 BLANK 0 (zero)
空白 + 5 5 5
空白 * 5 BLANK 0 (zero)
5/空白 Infinity 錯誤
0/空白 NaN 錯誤
空白/空白 空白 錯誤
FALSE 或空白 FALSE FALSE
FALSE 和空白 FALSE FALSE
TRUE 或空白 TRUE TRUE
TRUE 和 BLANK FALSE TRUE
空白或空白 空白 錯誤
空白和空白 空白 錯誤

您可以使用 Power BI Desktop 和數據來執行各種工作。 如需 Power BI 功能的詳細資訊,請參閱下列資源: