Power BI Desktop 中的資料類型
本文描述 Power BI Desktop 與 Data Analysis Expressions (DAX) 支援的資料類型。
當 Power BI 載入資料時,它會嘗試將來源資料行的資料類型轉換成可支援更有效率的儲存體、計算和資料視覺效果的資料類型。 例如,如果您從 Excel 匯入的資料行值沒有小數值,Power BI Desktop 會將資料行轉換成比較適合儲存整數的 [整數] 資料類型。
由於某些 DAX 函式具有特殊的資料類型需求,所以這個觀念很重要。 在許多情況下,DAX 會隱含地轉換資料類型,但在某些情況下則不會。 例如,如果 DAX 函式需要 [日期] 資料類型,但您資料行的資料類型為 [文字],DAX 函式將無法正常運作。 因此,對資料行使用正確的資料類型相當重要且有用。
判斷並指定資料行的資料類型
在 Power BI Desktop 中,您可以判斷並指定 Power Query 編輯器、資料檢視或報表檢視中資料行的資料類型:
在 Power Query 編輯器中,選取資料行,然後在功能區的 [轉換] 群組中選取 [資料類型]。
在 [資料檢視] 或 [報表檢視] 中,選取資料行,然後選取功能區 [資料行工具] 索引標籤上 [資料類型] 旁的下拉式箭號。
Power Query 編輯器中的 [資料類型] 下拉式清單選取項目,有不存在於 [資料檢視] 或 [報表檢視] 的兩個資料類型:[日期/時間/時區] 和 [持續期間]。 當您將具有這些資料類型的資料行載入 Power BI 模型時,[日期/時間/時區] 資料行會轉換成 [日期/時間] 資料類型,而 [持續期間] 資料行會轉換成 [十進位數字] 資料類型。
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 -308 到 1.79E +308 和 0。 34、34.01 和 34.000367063 等數字都是有效的十進位數字。
[十進位數字] 類型可以呈現的最高精確度是 15 位數。 小數分隔符號可出現在數字中的任何位置。 此類型對應至 Excel 儲存其數字的方式,而 TOM 會將此類型指定為 DataType.Double
列舉。
固定的小數位數
[位數固定的小數] 資料類型的小數分隔符號有固定位置。 小數分隔符號右邊一律為 4 位數,並允許 19 位數的有效位數。 [位數固定的小數] 可以呈現的最大值為正數或負數 922,337,203,685,477.5807。
[位數固定的小數] 類型在進位可能導致誤差的情況下會很有用。 小數值很小的數字有時會累積,並強制使得數字稍微不準確。 [位數固定的小數] 類型可協助您避免這類誤差,方法是將超過小數分隔符號右邊 4 位數的值截斷。
此資料類型對應至 SQL Server 的 [十進位 (19,4)] 或 Analysis Services 和 Excel 中的 Power Pivot 中的 [貨幣] 資料類型。 TOM 將此類型指定為 DataType.Decimal
列舉。
整數
[整數] 會呈現 64 位元 (8 位元組) 整數值。 由於它是整數,[整數] 的小數位右邊沒有數字。 此類型允許介於 -9,223,372,036,854,775,807 (-2^63+1) 與 9,223,372,036,854,775,806 (2^63-2) 之間的 19 位數正整數或負整數,因此可以呈現數值資料類型的最大可能數字。
如同 [固定十進位數] 類型,[整數] 類型在需要控制進位的情況下會很有用。 TOM 會將 [整數] 資料類型呈現為 DataType.Int64
列舉。
注意
Power BI Desktop 資料模型支援 64 位元的整數值,但由於 JavaScript 的限制,Power BI 視覺效果可以安全表達的最大數字為 9,007,199,254,740,991 (2^53-1)。 如果您的資料模型具有較大的數字,您可以先透過計算來減少數字的大小,再將其新增至視覺效果。
數字類型計算的正確性
[十進位數字] 資料類型的資料行值會根據浮點數的 IEEE 754 標準,儲存為 [近似] 資料類型。 近似資料類型具有固有的精確度限制,因為與其儲存確切的數字值,不如儲存非常接近或四捨五入的近似值。
如果浮點值無法可靠地量化浮點數,可能會發生精確度損失或不精確。 在某些報表案例中,不精確可能會顯示為非預期或不正確的計算結果。
[十進位數字] 資料類型值之間的等式比較計算可能會傳回非預期的結果。 等式比較包括等於 =
、大於 >
、小於 <
、大於或等於 >=
,以及小於或等於 <=
。
當您在 DAX 運算式中使用 RANKX 函式 時,此問題最為明顯,它會計算結果兩次,因而產生稍微不同的數字。 報表使用者可能不會注意到這兩個數字之間的差異,但排名結果可能會明顯不正確。 若要避免非預期的結果,您可以將資料行資料類型從 [十進位數字] 變更為 [位數固定的小數] 或 [整數],或使用 ROUND 執行強制四捨五入。 [位數固定的小數] 資料類型的精確度較高,因為小數分隔符號右邊一律會有四位數。
在極少見的情況下,加總 [十進位數字] 資料類型資料行值的計算可能傳回非預期的結果。 此結果最有可能發生在同時具有大量正數和負數的資料行。 加總結果會受到資料行中資料列值分佈的影響。
如果必要的計算會在加總大部分負數之前加總大部分正數,則開頭的大正數部分加總可能會扭曲結果。 如果計算剛好加上平衡的正數和負數,查詢會保留更精確的位數,因此會傳回更精確的結果。 若要避免非預期的結果,您可以將資料行資料類型從 [十進位數字] 變更為 [位數固定的小數] 或 [整數]。
日期/時間類型
Power BI Desktop 支援 Power Query 編輯器中的五個 [日期/時間] 資料類型。 [日期/時間/時區] 和 [持續期間] 都會在載入 Power BI Desktop 資料模型期間轉換。 模型支援 [日期/時間],或者您可以獨立地將值格式化為 [日期] 或 [時間]。
[日期/時間] 會同時呈現日期和時間值。 基礎 [日期/時間] 值會儲存為 [十進位數字] 類型,因此您可以在這兩個類型之間轉換。 時間部分會儲存為整倍數的分數 1/300 秒 (3.33 毫秒)。 資料類型支援介於 1900 到 9999 之間的日期。
[日期] 只會呈現日期而沒有時間部分。 [日期] 會轉換至模型做為小數值為零的 [日期/時間] 值。
[時間] 只會呈現時間而沒有日期部分。 [時間] 會轉換成模型作為 [日期/時間] 值,且小數點左邊沒有數字。
[日期/時間/時區] 會呈現 UTC 日期/時間並具有時區位移,在載入模型時轉換成 [日期/時間]。 Power BI 模型不會根據使用者的位置或地區設定來調整時區。 將 09:00 的值載入美國的模型,會在任何開啟或檢視報表的位置顯示為 09:00。
[持續期間] 會呈現時間長度,並在載入模型時轉換成 [十進位數字] 類型。 作為 [十進位數字] 類型,您可以從 [日期/時間] 值加上或減去值來得出正確的結果,並輕鬆地在顯示大小的視覺效果中使用值。
文字類型
[文字] 資料類型是 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 編輯器顯示數個訂單,其中在系統中輸入了相同的 Addressee 名稱,且大寫不同。
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 資料行。 為了清楚起見,這些名稱會出現在引號內。 客戶名稱會重複四次,但每個都有不同的前置和尾端空格組合。 這些變化可能會隨著時間的手動資料輸入而發生。
資料列 | 前置空格 | 尾端空格 | 名稱 | 索引 | Text length |
---|---|---|---|---|---|
1 | No | No | "Dylan Williams" | 1 | 14 |
2 | No | Yes | "Dylan Williams " | 10 | 15 |
3 | 是 | No | " Dylan Williams" | 20 | 15 |
4 | Yes | Yes | " Dylan Williams " | 40 | 16 |
在 Power Query 編輯器中,產生的資料如下所示。
載入資料之後移至 Power BI 中的 [資料] 索引標籤時,相同的資料表看起來會類似下圖,其資料列數目與之前相同。
不過,根據此資料的視覺效果只傳回兩個資料列。
在上圖中,第一個資料列的 Index 欄位值總計為 60,因此視覺效果中的第一個資料列代表所載入資料的最後兩個資料列。 總計 Index 值為 11 的第二個資料列代表前兩個資料列。 視覺效果與資料表之間資料列數目的差異,是因為引擎會自動移除或修剪尾端空格,而不是前置空格。 因此,引擎會將第一個和第二個資料列,與第三個和第四個資料列評估為相同,因此視覺效果會傳回這些結果。
此行為也可能造成與關聯性相關的錯誤訊息,因為偵測到重複的值。 例如,視關聯性的設定而定,您可能會看到類似下圖的錯誤:
在其他情況下,因為偵測到重複的值,您可能無法建立多對一或一對一關聯性。
您可以追蹤這些錯誤回溯至前置或尾端空格,並使用 Text.Trim 或 Transform 底下的 Trim 來解決這些錯誤,以在 Power Query 編輯器中移除空格。
True/False 類型
True/False 資料類型是 True 或 False 的布林值。 為了獲得最佳且最一致的結果,當您將包含布林值 True/False 資訊的資料行載入 Power BI 時,請將資料行類型設定為 True/False。
在某些情況下,Power BI 轉換和顯示資料的方式會不同。 本節描述轉換布林值的常見案例,以及如何解決在 Power BI 中建立非預期結果的轉換。
在此範例中,您會載入客戶是否已註冊電子報的相關資料。 TRUE 值指出客戶已註冊電子報,而 FALSE 值指出客戶尚未註冊。
不過,將報表發佈至 Power BI 服務時,電子報註冊狀態資料行會顯示 0 和 -1,而不是 TRUE 或 FALSE 的預期值。 下列步驟描述此轉換的發生方式,以及如何防止轉換。
下圖顯示此資料表的簡化查詢:
[訂閱電子報] 資料行的資料類型設定為 [任何],因此,Power BI 會以 [文字] 形式將資料載入模型。
新增會顯示每位客戶詳細資訊的簡單視覺效果時,資料會如預期顯示在視覺效果中,包括在 Power BI Desktop 中,以及在發佈至 Power BI 服務時。
不過,在 Power BI 服務中重新整理語意模型時,視覺效果中的 [訂閱電子報] 資料行會將值顯示為 -1 和 0,而不是將它們顯示為 TRUE 或 FALSE:
如果您從 Power BI Desktop 重新發佈報表,[訂閱電子報] 資料行會再次顯示 TRUE 或 FALSE,但一旦 Power BI 服務中發生重新整理,值會再次變更以顯示 -1 和 0。
防止此情況的解決方案是在 Power BI Desktop 中將任何布林值資料行設定為類型 True/False,然後重新發佈報表。
進行變更時,視覺效果會將 [訂閱電子報] 資料行中的值顯示地稍微不同。 在資料表中輸入的文字不會是全大寫字母,只有第一個字母為大寫。 此變更是變更資料行資料類型的其中一個結果。
變更資料類型之後,重新發佈至 Power BI 服務並發生重新整理,報表就會如預期般將值顯示為 True 或 False。
總而言之,在 Power BI 中處理布林值資料時,請確定資料行已在 Power BI Desktop 中設定為 True/False 資料類型。
空白類型
[空白] 是 DAX 資料類型,其會呈現和取代 SQL Null。 您可以使用 BLANK 函數來建立空白,並使用 ISBLANK 邏輯函數來測試空白。
二進位類型
您可以使用 [二進位] 資料類型來呈現任何具有二進位格式的資料。 在 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 與交集資料格中的資料類型配對時,會在每個資料類型上執行的轉換。
注意
這些資料表未包含 [文字] 資料類型。 當數字以文字格式呈現時,在某些情況下,Power BI 會嘗試判斷數字類型,並將資料以數字呈現。
加法 (+)
INTEGER | CURRENCY | REAL | 日期時間 | |
---|---|---|---|---|
INTEGER | INTEGER | CURRENCY | REAL | 日期時間 |
CURRENCY | CURRENCY | CURRENCY | REAL | 日期時間 |
REAL | REAL | REAL | REAL | 日期時間 |
日期/時間 | 日期時間 | 日期時間 | 日期時間 | 日期時間 |
例如,如果加法運算使用實數結合貨幣資料,DAX 會將這兩個值轉換成實數,並以實數傳回結果。
減法 (-)
在下表中,資料列標頭是被減數 (左側),而資料行標頭則是減數 (右側)。
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 會將這兩個數字轉換成實數,而傳回值也會是實數。
除法 (/)
在下表中,資料列標頭是分子,而資料行標頭則是分母。
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 或空白值會根據其他比較值的資料類型,轉換為 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 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 會以相同的新值類型 BLANK 來呈現 Null、空白值、空白儲存格或遺漏值。 您也可以使用 BLANK 函數來產生空白,或使用 ISBLANK 函數來測試空白。
加法或串連之類運算處理空白的方式取決於個別的函式。 下表摘要說明 DAX 與 Microsoft Excel 公式處理空白方式之間的差異。
運算式 | DAX | Excel |
---|---|---|
BLANK + BLANK | BLANK | 0 (zero) |
BLANK + 5 | 5 | 5 |
BLANK * 5 | BLANK | 0 (zero) |
5/BLANK | Infinity | 錯誤 |
0/BLANK | NaN | 錯誤 |
BLANK/BLANK | 空白 | 錯誤 |
FALSE OR BLANK | FALSE | FALSE |
FALSE AND BLANK | FALSE | FALSE |
TRUE OR BLANK | TRUE | TRUE |
TRUE AND BLANK | FALSE | TRUE |
BLANK OR BLANK | 空白 | 錯誤 |
BLANK AND BLANK | 空白 | 錯誤 |
相關內容
您可以使用 Power BI Desktop 和資料執行各種作業。 如需 Power BI 功能的詳細資訊,請參閱下列資源: