發佈時間 : 15 Oct 2015
上次修改日期 : 10 Nov 2023
問題
在調整針對數字顯示的小數位數時,數字可能會錯誤地進行四捨五入。例如,變更格式以顯示零位小數時,顯示為 40.5 的數字可能會變更為 40。
此外,您在 STR() 函數中使用 ROUND() 時,連線到資料擷取後四捨五入可能不正確。例如:STR(ROUND(SUM[Sales]),2)
解決方法
選項 1
四捨五入在 Tableau Desktop 中可以用 ROUND() 函數完成。但是,在編寫計算時必須考慮彙總,因為 Tableau 可能會解釋與所應用的彙總相關的計算。 例如,如果需要四捨五入的欄位是 SUM([Field]),且所需計算是 ROUND([Field]),則 Tableau 會將所述計算解釋為 SUM(Round([Field])。
為了修復此行為,請重寫以上的計算範例,如下所示:ROUND(SUM(Field))
要檢視詳細的範例,請參閱附加的工作簿,其名稱為 Round String.twbx。
選項 2
使用額外的字串修飾子(如 LEFT())以及其他捨入工具(如 CEILING())建立更精確的表示形式。
- 請注意,這樣的修改可能會建立一個很長但並不是非常高效的導出欄位:STR(ROUND(SUM[Sales]),2) = 319.147230000001
- 使用上述修改:LEFT(STR((CEILING(SUM([Sales])*100))/100),6) = 319.15
選項 3
檢視基本資料以驗證原始數字,進而確保針對數字格式正確進行四捨五入。例如,如果指定一位小數,則原始值 40.48 將正確地四捨五入為 40.5,如果指定了零位小數,則為 40。
原因
Tableau Desktop (Tableau Prep) 根據資料庫中的原始值按照「向上捨入」慣例對數字進行四捨五入。
其他資訊
由於此行為並非特定於 Tableau Desktop,因此電腦如何儲存資料就顯得更加重要,具體而言我們將哪些值視為 "小數" 值就顯得更加重要。整數很簡單,只要加上或減去一個整數,就可以對二進位資料執行同樣的動作:
- 以十進位表示:4 + 1 = 5
- 以二進位表示:100 + 1 = 101
但是,對於十進位值,如果將這些不同的值轉換為二進位表示形式,有時簡單的十進位表示形式不會完全轉換為二進位。
例如,.1 用十進位表示很簡單,但用二進位表示這個值的數字可能同時還表示 .0999999999999999 和 .1000000000000001 以及它們之間的所有數字。(請注意,每個數字正好都有 16 位小數。) 我們在顯示層中顯示數字值時,可以對其進行處理,但是對數值進行數學運算或將值轉換為字串時,將顯示基礎值,且此行為會根據包括資料庫在內的許多因素而異。
以下是一些範例/文章,說明如何在各種語言中讓人注意到這個問題,且此問題是電腦科學中的一個基本問題。
有關本主題和 Tableau Desktop 中可能的解決方法的討論,請參閱以下社群論壇主題:四捨五入,然後轉換為字串。
有關 ROUND() 函數的更多資訊,請參閱以下 Tableau 說明文件:數字函數。