2

현재 숫자 세트를 평균하려고하지만 특정 조건이 있습니다.SSRS 평균 함수는 예상과 다른 결과를 반환합니다.

avg() 내에 iif()을 사용하고 올바른 결과를 반환 할 수 있습니까?

게다가 지금까지 계산 한 결과로 소수점이 반환됩니다 (8.9267 .... E -05).

조건부 합계를 사용하여 조건부 합계를 수행 한 다음 조건부 개수로 나눠서이 기능을 우회하려고했지만 동일한 결과가 나타납니다.

누군가가 반환 된 이유를 설명하고 도움을 줄 수 있습니까?

현재 내가 가진 : 특정 조건이 충족되는 경우
=avg(iif((This_case) AND (That_case) AND (This_conditional) 
    , Fields!ResponseRate.Value 
    , 0)) 

는 기본적으로 나는 평균 ResponseRate를 원한다.

sum 함수는 조건에 대해 정상적으로 작동하지만 평균은 아닙니다.

+2

'Avg '에서'IIf'를 사용하여 정확한 결과를 얻을 수 있습니다. 데이터가 없으면 특별한 경우에 무슨 일이 일어나고 있는지 말할 수 없습니다. 반복 가능한 테스트 케이스에서 문제를 설명하는 몇 줄의 데이터 세트를 제공 할 수 있습니까? –

+0

@IanPreston 그건 내가 생각한 것이지만, 내가 언급 한 결과를 얻고있다.현재 나는 평균 = (This_case) AND (That_case) AND (This_conditional), Fields! ResponseRate.Value, 0)) 특정 조건이 충족되면 본질적으로 평균 ResponseRate를 원합니다. (나는 SSRS에 대해 비교적 새로운 편이어서 오해 할 수도 있습니다.) sum 함수는 조건에 대해 잘 작동하지만 평균은 아닙니다. – Ryan

+0

'False' 값을 계산에서 완전히 제외 시키시겠습니까? 위와 같이 여전히 그들을 포함하고 있습니다. 단지 '0'으로 설정하여 계산에 포함시킵니다. 이것은 예기치 않은 결과를 설명 할 수 있습니다. 그것들을 제외 시키려면'0' 대신'Nothing'을 사용하십시오. 위와 같이 이것은 여전히 ​​가정 사항입니다. 샘플 데이터 세트로 문제를 복제하고이를 질문에 추가 할 수 있습니까? –

답변

5

IIfAvg에 올바르게 사용하고 올바른 결과를 얻을 수 있습니다.

False 값을 계산에서 완전히 제외 하시겠습니까?

예제에는 여전히 포함되어 있습니다. 단지 0으로 설정하여 계산에 포함시키는 것뿐입니다. 이것은 예기치 않은 결과를 설명 할 수 있습니다.

완전히 제외 시키려면 0 대신 Nothing을 사용하십시오.

편집 주석

후 중첩 할 수 있습니다 다른IIf 문에 표현과 IsNothing를 사용하여 NULL 값을 확인합니다.

은 당신의 상태 평균 표현은 말 :

=IIf(IsNothing(Avg(IIf(Fields!ID.Value > 5, Fields!value.Value, Nothing))) 
    , 0.0 
    , Avg(IIf(Fields!ID.Value > 5, Fields!value.Value, Nothing))) 
+0

후속 질문 - 0 개 항목을 평균화하려고 시도하면 숫자가 반환되지 않습니다. 내 보고서가 융통성을 갖기를 원하면 문제가됩니다. 대부분의 경우 숫자를 평균화하지만 인스턴스가 0 인 경우가 있습니다. 변환 함수로이 문제를 해결할 수 있습니까? – Ryan

+1

당신은'avf' 표현식을'IIf' 표현식에 래핑하고 당신의 엣지 케이스를 검사함으로써 이러한 경우들을 처리 할 추가 검사를 추가 할 수 있습니다; 위의 예를 참조하십시오. –

+1

당신을 좋아하는 사람들은 내가이 사이트를 좋아하는 이유입니다. 당신은 매우 도움이되었습니다. 다시 한번 감사드립니다. – Ryan

0
나는이 일에 내 두 센트를 추가 할

, A :

=Avg(IIf(Fields!ID.Value > 5, Fields!value.Value, Nothing)) 

당신이 좋아하는 뭔가 NULL 값을 0을 반환 할 수 있습니다 조금 늦었지만 귀중한 것입니다. 위의 코드를 사용하여 다른 레코드가 X 번 표시되면 데이터를 평균화 할 수있었습니다.

=AVG(IIF(Count(Fields!AcctNo.Value, "AcctNo1") = 2, Fields!Limit.Value, Nothing)) 

따라서 acctno 필드가 1 회 표시되면 해당 행 그룹의 제한 필드를 사용하십시오. 이안의 예제는 매우 도움이되었습니다.