소수 자릿수를 조정할 경우 숫자가 잘못 반올림되거나 반내림되어 나타날 수 있습니다. 예를 들어 소수 자릿수 0개를 표시하도록 서식이 변경되면 40.5로 표시되던 숫자가 40으로 변경될 수 있습니다.
또한 STR() 함수 내에서 ROUND()를 사용하면 추출에 연결 시 잘못 반올림될 수 있습니다. 예: STR(ROUND(SUM[Sales]),2)
환경
Tableau Desktop
해결 방법
옵션 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은 소수 자릿수 1이 지정되면 40.5로 올바로 반올림되지만 소수 자릿수 0이 지정되면 40이 됩니다.
원인
Tableau Desktop(Tableau Prep)은 데이터베이스의 원래 값을 기반으로 "절반에서 반올림" 규칙에 따라 숫자를 반올림합니다.
추가 정보
이 동작은 Tableau Desktop에만 한정되지 않습니다. 근본적으로 컴퓨터가 데이터를 저장하는 방법, 특히 "소수" 값과 관련이 있습니다. 정수는 정수를 더하거나 빼는 것만으로 쉽게 얻을 수 있으며, 이진 데이터로도 동일한 작업을 수행할 수 있습니다.
십진수: 4 + 1 = 5
이진수: 100 + 1 = 101
하지만 소수 값에서는 이러한 고유 값을 이진 표현으로 변환할 경우 간단한 소수 표현이 이진으로 완벽하게 변환되지 않는 경우가 있습니다.
예를 들어 .1은 십진수에서는 간단하지만 이 값을 이진수로 표현하는 숫자는 .0999999999999999와 .1000000000000001 및 그 사이의 모든 숫자를 동시에 나타내야 합니다. (각 숫자의 소수 자릿수는 정확히 16자입니다.) 이러한 변환은 표시 계층에 숫자 값을 표시할 때 처리되지만 값을 계산하거나 값을 문자열로 변환하면 기초 값이 표시되고 이 동작은 데이터베이스를 비롯한 많은 요소에 따라 변합니다.
다음은 이 문제가 언어별로 나타나는 방식을 설명하고 이 문제가 컴퓨터 과학의 근본적인 문제라는 것을 보여 주는 몇 가지 예와 문서입니다.