1

SSRS에서 필드를 소수점 이하 자릿수로 반올림하는 방법을 찾으려고합니다. 나는 그것을 동적으로 포맷 할 수 있다는 것을 알고 있으며 결국에는 그렇게 될지 모르지만 많은 사용자들이이 보고서를 Excel로 직접 가져 와서 실제 숫자 필드를 원할 것입니다.SSRS에서 소수점 이하의 가변 개수로 반올림

내 T-SQL 코드는이 선언 된 변수를 포함

 NumLong01     DECIMAL(23,8) 
    , NumLongDP01    INTEGER 

이 테이블의 항목의 첫 번째 세트는 헤더와 반올림 매개 변수입니다. 다음

NULL 
,4 

나는대로 실제 테이블 값을 추가 : 그래서 두 이들에 대한 값을 추가 나는 테이블에 숫자의 전체 시리즈를 넣을 수 있습니다

987654321.87654321 
,NULL 

그 방법하지만 그들은 모두가 같은 방식으로 서식을 지정해야합니다.

실행이 쿼리 수율 :

enter image description here

내가 보고서 작성 도구로 이동, 내 필드는이 표현이 있습니다

=Fields!NumLong01.Value

내가 소수점 이하 자릿수의 특정 숫자를 포맷하려면 , 나는 이것을 할 수 있습니다 :

=Round(Fields!NumLong01.Value,2) 또는 일부. 내가 할 노력은 무엇하지만, 그것은 동적 만드는 것이었다 :

=Round(Fields!NumLong01.Value,First(Fields!NumLongDP01.Value, "DataSet1"))

이 0 소수점 반올림 끝났다. 나는 이후에 - 내 필드에서 후반부를 사용함으로써 - 이것이 NULL 값이라는 것을 알게되었습니다. 그래서 나는 단지 대신에 합계를 시도했는데, 단지 내 분야에서 - 그리고 내가 예상했던 4 점을 얻었다. 좋아, 그래서 지금은 내 번호가 있고, 난 그냥 내 반올림으로 그것을 넣어 :

=Round(Fields!NumLong01.Value,Sum(Fields!NumLongDP01.Value, "DataSet1"))

만 문제가이 오류를 얻을 수 있습니다. 다음으로 나는 어떤 이유로이 숫자를 숫자로 보지 않는지 스스로에게 물었다. 그래서 저는 그것을 제 분야에 추가했습니다. 아무 문제 없습니다. 그래서 나는 정말로 그것이 무엇을하는지 모른다. 이 필드가 너무 길어서 불법적 인 소수 자리로 반올림 될 수 있다고 생각합니까?

=IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 8,Round(Fields!NumLong01.Value,8),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 7,Round(Fields!NumLong01.Value,7),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 6,Round(Fields!NumLong01.Value,6),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 5,Round(Fields!NumLong01.Value,5),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 4,Round(Fields!NumLong01.Value,4),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 3,Round(Fields!NumLong01.Value,3),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 2,Round(Fields!NumLong01.Value,2),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 1,Round(Fields!NumLong01.Value,1),Round(Fields!NumLong01.Value,0))))))))) 

을 ... 그리고 그 작동 :

지금, 나는이 작업을 수행 할 수 있습니다. 그러나 그것은 그것에 관해가는 그런 우스운 길과 같게 보인다.

t-SQL에서 반올림 한 숫자 만 전달하는 것도 편안합니다. 그러나 숫자 형식에서 소수점 이하 자릿수를 사용할 수 없기 때문에 보고서에 소수점 이하 자리 만 표시하는 문제가 발생합니다.

모든 아이디어를 얻을 수 있습니다.

+0

이후, 나는 서식으로 "N4"을 사용했는데, 실제로 I로 지금까지 Excel에서 근무 :

이 작업을 수행하려면, 표현과 데이터 집합에 계산 필드를 추가 말할 수있다.이전에는 다른 보고서를 수정할 때 항상 그런 것은 아니지만 그 이유는 모르겠습니다. 그래서 내가 그렇게 작동하게 만들 수 있다면 나는 만족한다. 그러나 나는 내가 기대했던 것처럼 내 초기 반올림 접근 방식이 왜 작동하지 않는지 여전히 알고 싶다. – DaveX

+0

새로운 업데이트 : 이전에도 Excel에서 동일한 문제가 발생했습니다. 단 한 줄로 추가 할 것이 없었으므로 이제 4와 같은 고정 숫자를 추가하면 합계가 생깁니다. 따라서 Excel의 숫자 필드 여야합니다. 잘못된. 여러 줄을 할 때, 오른쪽 아래 구석에 셀 수 (합계가 아닙니다)가 생기고 제 숫자의 합이 0이됩니다. 그래서 저는 제 IIf의 제 정신을 잃었습니다. – DaveX

+0

몇 가지 간단한 질문이 있기 전에 해결책을 제안하십시오. 소수 자릿수를 데이터 집합의 첫 번째 행으로 지정해야하며 테이블 구조를 변경할 수 있습니까? 마지막으로 왜 왜 소수점 자리수가 가변적 인 (동적) 숫자가 필요합니까? 0 패딩을 피하는 것입니까? –

답변

1

보고서에서 사용자 지정 코드를 사용하거나 데이터 집합의 SQL 쿼리를 적용하여 동적 반올림 또는 숫자 서식을 수행하는 데 필요한 모든 방법을 나열하지는 않습니다.라운딩 사용

:

이 테이블 엔트리의 제 1 세트는 헤더 및 라운딩 파라미터이다. 그렇게하면 일련의 숫자를 모두 표에 넣을 수 있지만 모두 동일한 방식으로 형식을 지정해야합니다.

First 등과 Sum하고 다음 제거해야 빈 행을 생성, 단지 모든 행에 대해 소수 자릿수를 입력하는 대신 헤더 행 사용을 고려 집계 함수를 필요로 보고서에 건물 식을 피하려면 . 비용 (저장 및 표현 평가)은 중복되는 것처럼 보일지라도 낮습니다. =Round(Fields!NumLong01.Value,First(Fields!NumLongDP01.Value, "DataSet1")) 당신은 어느 쪽 표현 또는 데이터 세트가 호출되는 계산 필드 DataSet1 또는 무엇이든으로 =Round(Fields!NumLong01.Value,Fields!NumLongDP01.Value)를 사용할 수 있습니다

이 대신 사용하는 것을 의미한다.

를하지만 그때의 동적 수를 허용하지 않습니다를 포맷 때문에 수의 보고서에 소수의 특정 번호를 보여주는 문제로 실행 :

하는 번호 서식을 사용하여 어떤 이유로 소수점 이하 자릿수.

보고서에서 NumLong01 필드에 대한 사용자 지정 서식을 정의하고 식을 사용하여 사용자 지정 서식 지정 문자열을 작성하여 동적으로 만들 수 있습니다.

  1. 열기 텍스트 상자 NumLong01 텍스트 상자 또는 테이블 릭스 필드
  2. 열기 숫자 탭의 속성과 범주 목록
  3. 에서 사용자 선택은 다음 식을 외환 버튼을 클릭하고 사용 ="0." + StrDup(First(Fields!NumLongDP01.Value, "DataSet1"), "0")

예제 데이터를 사용하면이 표현식은987654321.87654321을987654321.8765로 변경하는 사용자 정의 형식화 문자열 0.0000을 생성합니다. 귀하의 정보에 대해 StrDup은 지정된 문자열 X 횟수를 복제합니다.

숫자의 소수 부분이 필요한 소수 정밀도보다 작은 경우이 서식 지정 문자열에 0으로 채워집니다. 원하는 경우 복제 할 문자열을 "#" (StrDup(First(Fields!NumLongDP01.Value, "DataSet1"), "#"))으로 변경하십시오.

또한 계산 필드 데이터 집합의하지만 머리글 행을 제거하고 앞서 언급 한 바와 같이 모든 행에 대한 소수점 이하 자릿수를 입력하는 경우에만으로이 방법을 사용할 수 있습니다. 계산 된 필드 식에서 집계 함수를 사용할 수 없기 때문입니다. =Format(Fields!NumLong01.Value, "0." + StrDup(Fields!NumLongDP01.Value, "0"))이 게시물에