Pergunta

Eu tenho alguns dados agrupados em uma tabela por um determinado critério, e para cada grupo é calculado um -bem média, o caso real é um pouco mais tricky- dos valores de cada uma das linhas de detalhes que pertencem a esse grupo. Esta média é mostrado em cada linhas de rodapé de grupo. Vamos ver este exemplo simples:

Relatório de mesa

O que eu quero agora é mostrar um total geral no mesa de rodapé . O total deve ser calculado por adicionando de cada grupo a média (por exemplo, neste exemplo o total deve ser de 20 + 15 = 35). No entanto, não pode funções agregadas ninho. Como eu posso fazer?

Foi útil?

Solução

O Reporting Services (2005, talvez 2008, também) não suportam agregados de agregados diretamente.

Use um relatório personalizado assembly, referências de código e objetos nomeados (Propriedades do relatório, referências) que permitem agregar os valores si mesmo.

Seu código poderia ser assim:

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

Nome você faz referência, por exemplo DoubleAggregator. Em seguida, substitua as expressões de grupo com "Code.DoubleAggregator.Aggregate (Avg (Fields! Column2.Value))" ea expressão de total com "Code.DoubleAggregator.Sum ()".

Outras dicas

Você só precisa adicionar a função SUM () no rodapé da tabela que é o escopo externo de ambos os grupos e somá-los todos juntos. Se você está somando em uma condição, você pode precisar colocar isso lá também.

Infelizmente eu estou longe da minha caixa de desenvolvimento de relatórios no momento, mas ela quer:
= (Soma (Fields! Column1 + soma (! Column2 Fields))
OR
= SUM (soma (Fields! Column1) + soma (Fields! Column2))

Eu tenho certeza que é o primeiro da 2.

Você não pode realmente, mas você pode enganá-lo. I blooged uma solução para este aqui: http://dataqueen.unlimitedviz.com/2011/05/ssrs-aggregate-last-ytd-or-last-child-value-in-an-ssas-query/

você pode simplesmente fazer o seguinte: Sum (CInt (Fields! TestValue.Value)) ou Sum (CInt (Fields! DollarAmountOfCheck.Value), "DataSet1") em algum momento quando os dados está vindo através WCF, ele não aceita a função Sum (). mas esta multa funciona nesse caso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top