2014-12-16 3 views
4

매우 간단한 마진 계산 보고서가 있습니다. 나는 SSRS에 IIF의 단락이 없다는 것을 이해합니다. 이 질문은 수식에서 필드 값을 사용하는 것과 직접 값 사이에 동작 차이가있는 이유에 초점을 맞 춥니 다. #errorSales.Value = 0이 수식에서 값이 0 인 필드가 0이 아닌 이유는 무엇입니까?

=IIF(SUM(Fields!Sales.Value) = 0, "N/A", 1 - SUM(Fields!Cost.Value)/SUM(Fields!Sales.Value)) 

이 수식 결과. 나는 다음에 수식을 변경하는 경우에는 : 돼있처럼

=IIF(SUM(Fields!Sales.Value) = 0, "N/A", 1 - 1/0) 

"N/A" 발생합니다. 따라서 1 -/0 = -infinity이지만 값이 0 인 필드로 나누면 오류가 발생합니다.

여기에서 동작이 다른 이유는 무엇입니까?

편집 : 조금 더 명확히하겠습니다. 이의 IIF 측면을 무시하는 것은 내가 할 경우 :

= 1 - 1/0 

내가 -infinity를 얻을. 내가 (여기서 Sales.Value = 0) 할 경우

= 1 -1/Fields!Sales.Value 

을 나는 #error를 얻을.

답변

4

VB documentation을 기준으로 을 던지지 않는 유일한 데이터 형식은 Double입니다. 하지만 두 개의 Int을 분명히 사용 했으므로 여기서 다른 작업이 진행 중입니다. 내가 좋은 설명을 가지고 관련 있지만 다른 나누기 0으로 질문에 this answer을 발견 된 일부 검색 후

:

VB.NET는 다르게에게 조금을한다; 정수 나누기는 / 연산자를 사용하여 자동으로 부동 소수점 값을 생성합니다. 이 개발자는 쓰기, 예를 들어, 표현 1/2, 그리고 몇 가지 고려해야 할 0.5로 평가해야 할 수 있도록하는 것입니다 직관적

TL; DR Fields!Sales.Value 가능성이 분주 제로의 결과 Decimal로 해석됩니다 예제의 데이터 형식은 Double이고 결과는 infinity입니다.

+0

아무리 좋은 설명 이군요. http://blogs.msdn.com/b/ericlippert/archive/2009/10/15/as-timeless-as-infinity.aspx를 참조하십시오. –

관련 문제