ナレッジベース

数値形式の調整により数字を間違って丸めているように見える


発行: 15 Oct 2015
最終修正日: 10 Nov 2023

問題

数字に表される小数点の桁数を調整すると、数字が間違って切り上げまたは切り下げられているように表示されます。たとえば、小数点以下 0 桁を表示するように形式を変更すると、40.5 と表される数字が 40 に変換される場合があります。

さらに、STR() 関数内で ROUND() を使用すると、抽出に接続したときに正しく丸められないことがあります。例: STR(ROUND(SUM[Sales]),2)

環境

Tableau Desktop

解決策

オプション 1

ROUND() 関数を使用することで、Tableau Desktop で正しく丸めることができます。ただし、計算を入力するときに集計を考慮する必要があります。これは、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 である場合、指定された小数点以下の桁数が 1 なら 40.5、桁数が 0 なら 40 が正しく丸められた数値です。

原因

Tableau Desktop (Tableau Prep) では、"次の 0.5 まで切り上げ" 規則に従い、データベースの元の数値に基づいて数字を丸めます。 

詳細情報

この動作は Tableau Desktop 固有のものではなく、コンピューターがデータ (とりわけ "10 進値") を保存する方法の基本的な部分に関係しています。整数の加減法は整数のみで解決できるので簡単です。バイナリ データでも同様に行うことができます。 
  • 10 進数形式: 4 + 1 = 5 
  • バイナリ形式: 100 + 1 = 101 
しかし、10 進値の場合、10 進値に特有の値 (ときには単純な形式の値) を完全にバイナリ表示に変換することは難しい場合があります。

たとえば、.1 は10 進値で簡単に表せますが、同じ値をバイナリ形式で表す場合、.0999999999999999、.1000000000000001 およびその間の数を同時に表す可能性があります (それぞれの数字は小数点以下 16 桁に固定されていることに注目)。 これは表示レイヤーで数値を表示するときに処理できますが、数値を計算に使ったり文字列に変換したりすると、元の数値が表示され、データ ベースを含むいくつかの要素を基に動作が変化します。 

以下には、問題が言語全体に表れ、コンピューター サイエンスの基本的な問題であることを示すいくつかの例や記事が挙げられています。 
このトピックのディスカッションおよび Tableau Desktop での考えられる回避策については、コミュニティ フォーラムのスレッド「丸めて文字列に変換する」(英語) を参照してください。 

ROUND() 関数の詳細については、Tableau ヘルプ ドキュメント「数値関数」を参照してください。


この記事で問題は解決しましたか?