2008-10-17 5 views
3

일부 데이터는 특정 기준에 따라 테이블에 그룹화되어 있으며 각 그룹에 대해 평균으로 계산됩니다. 실제 사례는 다음과 같은 값보다 약간 까다 롭습니다. 해당 그룹에 속하는 각 세부 행 이 평균은 각 그룹 바닥 글 행에 표시됩니다. 의이 간단한 예를 들어 보자 :Reporting Services의 그룹 합계에서 총계 계산

Report table

내가 지금 원하는 것은 테이블 바닥 글에 총합계를 표시하는 것입니다. 총계는 으로 계산되어야하며 각 그룹의 평균은입니다 (예 :이 예에서는 총계가 20 + 15 = 35 여야합니다). 그러나 집계 함수를 중첩 할 수는 없습니다. 어떻게해야합니까?

답변

2

Reporting Services (2005, 아마도 2008)도 집계의 집계를 직접 지원하지 않습니다.

값을 직접 집계 할 수있는 사용자 지정 보고서 어셈블리, 코드 참조 및 명명 된 개체 (보고서 속성, 참조)를 사용하십시오.

코드는 다음과 같을 수 있습니다 :

Public Sub New() 

    m_valueTable = New DataTable(tableName:="DoubleValueList") 

    'Type reference to System.Double 
    Dim doubleType = Type.GetType(typeName:="System.Double") 

    ' Add a single Double column to hold values 
    m_valueTable.Columns.Add(columnName:="Value", type:=doubleType) 

    ' Add aggregation column 
    m_sumColumn = m_valueTable.Columns.Add(columnName:="Sum", type:=doubleType, expression:="Sum(Value)") 
End Sub 
Public Function Aggregate(ByVal value As Double) As Double 

    ' Appends a row using a 1-element object array. 
    ' If there will be more than 1 column, more values need to be supplied respectively. 
    m_valueTable.Rows.Add(value) 

    Aggregate = value 
End Function 
Public ReadOnly Property Sum() As Double 
    Get 

     If 0 = m_valueTable.Rows.Count Then 
      Sum = 0 
     Else 
      Sum = CDbl(m_valueTable.Rows(0)(m_sumColumn)) 
     End If 
    End Get 
End Property 

이름은 예를 DoubleAggregator에 대한 참조. 그런 다음 그룹 식을 "Code.DoubleAggregator.Aggregate (Avg (Fields! Column2.Value))"로 바꾸고 Total의 식을 "Code.DoubleAggregator.Sum()"으로 바꿉니다.

+0

테스트를 해보지 않았지만 재미있을 수 있습니다. 귀하의 답변을 주셔서 감사합니다, 나는 더 나은 솔루션이 나타날 때까지 권장대로 넣어. – Auron

+0

요약 계산은 표가 처리되기 전에 정적으로 계산되므로 요약 계산을 표 바닥 글에 배치 할 수 없습니다. 요약을위한 정적 행만있는 유사한 스타일의 다른 테이블을 사용하는 것이 좋습니다. – user33675

+0

@henbo -이 방법이 효과가 있습니까? 아마도 나는 당신의 의견을 이해하지 못합니다. – NTDLS

1

불행하게도 나는 순간에 떨어져 내보고 개발 상자에서 해요하지만 중 하나입니다!!
= (SUM (필드 열 1 + 합계 (필드 열 2))
또는
= SUM (합계 (필드! 열 1) + 합계 (필드! 열 2))

나는 당신이 단지의 외부 범위 인 테이블 바닥 글에 SUM() 함수를 추가해야합니다 2.

+1

관심을 가져 주셔서 감사합니다. 그러나 간단한 예제는 열만 참조합니다. 이상적인 솔루션은 Sum (Avg (Fields! Column.Value, "Group"))처럼 보일 것입니다. – Auron

3

의 첫 번째의 확신 두 그룹 모두 합쳐서 합계를 계산할 수 있습니다. 조건을 합산하는 경우 해당 조건을 합산해야합니다.

1

: :이 여기에 대한 해결책을 blooged 합계 (!에 CInt (필드 TestValue.Value)) 또는 합계 (!에 CInt (필드 DollarAmountOfCheck.Value) "을 DataSet1") 때때로 데이터가 WCF를 통해 들어 오면 Sum() 함수를 사용할 수 없습니다. 하지만이 경우에는 정상적으로 작동합니다.