共用方式為


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 編輯器中,選取數據行,然後在功能區 轉換 群組中選取 [數據類型]

    Power Query 編輯器的螢幕快照,顯示 [資料類型] 下拉式清單的選項。

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

    顯示「資料類型」下拉式選單的「表格檢視」螢幕截圖。

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

Power Query 編輯器之外不支援 二進位 數據類型。 在 Power Query 編輯器中,如果您在將二進位檔轉換成其他數據類型,再將二進位檔載入 Power BI 模型之前,可以使用 二進位 數據類型。 二進位 選項在舊版數據表檢視和報表檢視的功能表中存在,但如果您嘗試將 二進位 數據行載入 Power BI 模型中,可能會遇到錯誤。

數字類型

Power BI Desktop 支援三種數位類型:十進位數固定十進位數,以及 整數

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

十進位數

十進位數 是最常見的數字類型,而且可以使用小數值和整數來處理數位。 十進制數 代表 64 位(八位元節)浮點數,具有從 -1.79E +308-2.23E -308的負值、從 2.23E -3081.79E +308的正值,以及 03434.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 Enum。

整數

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

如同 固定的小數 類型,當您需要控制四捨五入時,整數 類型很有用。 TOM 將整數 數據類型 表示為 Enum DataType.Int64

註解

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

數字類型計算的正確性

根據 IEEE 754 標準,十進位 數據類型的欄位值會儲存為近似的 數據類型。 近似數據類型具有固有的精度限制,因為它們不是儲存確切的數值,而是儲存非常接近或經過四捨五入的近似值。

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

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

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

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

如果必要的計算會在加總大部分負數之前加總大部分正數,則開頭的大正部分總和可能會扭曲結果。 如果在計算中碰巧加入能夠互相抵銷的正數和負數,查詢會保留更多精確性,因此返回更準確的結果。 若要避免非預期的結果,您可以將資料行資料類型從 十進位數 變更為 固定十進位數整數

日期/時間類型

Power BI Desktop 在 Power Query 編輯器中支援五個 日期/時間 資料類型。 在載入到 Power BI Desktop 數據模型時,Date/Time/TimezoneDuration 會進行轉換。 此模型支援 日期/時間,或者您可以將值格式化為 DateTime

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

  • Date 僅表示日期,不包含時間部分。 Date 會轉換成模型,做為 Date/Time 值,而分數值則為零。

  • 時間 只代表沒有日期部分的時間。 時間 會在模型中被轉換,做為 日期/時間 值,其小數點左邊沒有數字。

  • Date/Time/Timezone 代表具有時區位移的 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 欄位,以及一個 收件人 欄位,該欄位會顯示在下單時手動輸入的收件人名稱。 Power Query 編輯器會顯示數個訂單,其中具有相同 Addressee 名稱輸入到系統中,且大小寫不同。

Power Query 中具有各種大寫的文字數據的螢幕快照

Power BI 載入數據之後,數據 索引標籤中重複名稱的大小寫會從原始輸入項變更為不同的大寫形式之一。

螢幕快照,顯示載入 Power BI 之後變更大寫的文字數據。

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

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

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

此影像說明評估程式:

顯示數據載入流程以及將文字值映射到唯一值字典的圖表。

在上述範例中,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 欄。 為了清楚起見,這些名稱會出現在引號內。 客戶名稱會重複四次,但每次都有不同的前置和尾端空格組合。 這些變化可能會隨著時間由手動輸入數據而發生。

前置空間 尾端空間 名字 索引 文字長度
1 “迪倫·威廉姆斯” 1 14
2 是的 “迪倫·威廉姆斯” 10 15
3 是的 “迪倫·威廉姆斯” 20 15
4 是的 是的 “迪倫·威廉姆斯” 40 16

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

Power Query 編輯器中具有各種前置和尾端空格的文字數據的螢幕快照。

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

載入 Power BI 之後,相同文字數據的螢幕快照會傳回與之前相同的數據列數。

不過,根據此數據的圖表只返回兩列。

一個根據相同數據返回僅兩行數據的表格視覺效果的螢幕快照。

在上圖中,第一行的總值為 60 對應 Index 欄位,因此圖表中的第一行代表載入的數據的最後兩行。 第二列中,總 Index 值為 11 的數據代表了前兩列的數據。 視覺效果與數據表之間數據行數目的差異,是因為引擎會自動移除或修剪尾端空格,但不會刪除開頭空格。 因此,引擎會評估第一行和第二行,以及第三行和第四行,並將它們視為相同,然後返回這些結果。

此行為也可能造成與關聯性相關的錯誤訊息,因為偵測到重複的值。 例如,根據您關聯性設定的不同,您可能會看到類似於下圖的錯誤:

有關重複值之錯誤訊息的螢幕快照。

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

關聯性對話框的螢幕快照,其中顯示與偵測到重複值相關的「此關聯性無效基數」錯誤。

您可以將這些錯誤追溯至前置或尾端空格,並使用 Text.Trim或在 Transform下使用 Format>Trim ,在 Power Query 編輯器中移除空格。

真/假類型

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

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

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

不過,當您將報表發佈至 Power BI 服務時,新聞信註冊狀態欄會顯示 0-1,而不是預期的值 TRUEFALSE。 下列步驟說明此轉換的發生方式,以及如何防止轉換。

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

顯示數據行設定為布爾值的螢幕快照。

訂閱通訊 資料行的資料類型被設定為 Any,因此,Power BI 將資料作為 Text載入模型。

顯示載入 Power BI 資料的螢幕快照。

當您新增顯示每位客戶詳細資訊的簡單可視化時,資料會如預期般顯示在可視化中,無論是在 Power BI Desktop 還是當其發佈至 Power BI 服務時。

視覺效果的螢幕快照,其中數據顯示如預期。

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

顯示重新整理后以非預期格式顯示數據的視覺效果螢幕快照。

如果您從 Power BI Desktop 重新發佈報表,訂閱電子報 欄位會再次顯示 TRUEFALSE,如您所期望。但在 Power BI 服務中重新整理後,這些值會再次變更為顯示 -10

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

將數據行的數據類型變更為 True/False 的螢幕快照。

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

變更數據類型時,值以不同方式顯示的螢幕快照。

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

截圖顯示使用 True/False 資料類型的真或假值會在重新整理後如預期般顯示。

總而言之,在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 會嘗試判斷數字類型,並將數據表示為數位。

加法 (+)

整數 貨幣 真正 日期/時間
整數 整數 貨幣 真正 日期/時間
貨幣 貨幣 貨幣 真實 日期/時間
REAL 真正 真正 真正 日期/時間
日期/時間 日期/時間 日期/時間 日期/時間 日期/時間

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

減法 (-)

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

整數 貨幣 真正 日期/時間
整數 整數 貨幣 真實 真正
貨幣 貨幣 貨幣 真正 真實的
REAL 真實 真正 真正 真正
日期/時間 日期/時間 日期/時間 日期/時間 日期/時間

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

注意

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

乘法 \

整數 貨幣 真正 日期/時間
整數 整數 貨幣 真正 整數
貨幣 貨幣 真正 貨幣 貨幣
真實 真正 貨幣 真實 真實

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

除法 (/)

在下表中,行標題是分子,而列標題是分母。

整數 貨幣 真正 日期/時間
INTEGER 真正 貨幣 真正 真實
貨幣 貨幣 真實的 貨幣 真正
REAL 真正 真實 真實 真實
日期/時間 真正 真正 真正 真正

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

比較運算子

在比較運算式中,DAX 將布林值視為大於字串值,而字串值又大於數值或日期/時間值。 數位和日期/時間值具有相同的等級。

DAX 不會對布爾值或字串值進行任何隱含轉換。 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") 傳回「表達式為真」。

  • =IF("12"=12,"Expression is true", "Expression is false") 會傳回「表達式為假」。

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

比較
算子
整數 貨幣 真正 日期/時間
整數 整數 貨幣 真正 真正
貨幣 貨幣 貨幣 真正 真正
REAL 真正 真正 真實 真實
日期/時間 真正 真實 真正 日期/時間

空白、空字串和零值

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

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

表達 DAX 德國股市指數 Excel
空白 + 空白 空白 0 (零)
空白 + 5 5 5
空白 * 5 空白 0 (零)
5/空白 無限 錯誤
0/空白 錯誤
空白/空白 空白 錯誤
FALSE 或空白
FALSE 與空白
真或空白 真實 正確
TRUE 和 BLANK
留空或空白 空白 錯誤
空白和空白 空白 錯誤

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