Question

J'ai des données regroupées dans une table selon un certain critère et pour chaque groupe, elle est calculée comme une moyenne - eh bien, le cas réel est un peu plus compliqué - des valeurs de chacune des lignes de détail appartenant à celle-ci. groupe. Cette moyenne est indiquée dans les lignes de chaque pied de groupe. Voyons cet exemple simple:

Tableau de rapport

Ce que je veux maintenant, c’est afficher un total général dans le pied de page du tableau . Le total général doit être calculé en ajoutant la moyenne de chaque groupe (par exemple, dans cet exemple, le total général doit être de 20 + 15 = 35). Cependant, je ne peux pas imbriquer de fonctions d'agrégat. Comment puis-je faire?

Était-ce utile?

La solution

Reporting Services (2005, peut-être 2008 également) ne prend pas directement en charge les agrégats d'agrégats.

Utilisez un assemblage de rapport personnalisé, des références de code et des objets nommés (Propriétés du rapport, Références) qui vous permettent d'agréger les valeurs vous-même.

Votre code pourrait ressembler à ceci:

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

Nommez-vous par exemple DoubleAggregator. Remplacez ensuite les expressions de groupe par "Code.DoubleAggregator.Aggregate (Avg (Fields! Column2.Value))" " et l'expression de Total avec "Code.DoubleAggregator.Sum ()".

Autres conseils

Vous devez simplement ajouter la fonction SUM () dans le pied de table, qui est la portée extérieure des deux groupes et qui les additionnera tous. Si vous faites la somme sur une condition, vous devrez peut-être la mentionner également.

Malheureusement, je suis loin de ma boîte de développement de rapports pour le moment, mais c'est soit:
= (sum (Fields! Column1 + sum (Champs! Column2)))

OU
= SOMME (somme (Champs! Colonne1) + somme (Champs! Colonne2))

Je suis presque sûr que c'est le premier des 2.

Vous ne pouvez pas vraiment, mais vous pouvez tromper. J'ai bloogué une solution à ceci ici: http://dataqueen.unlimitedviz.com/2011/05/ssrs-aggregate-last-ytd-or-last-child-value-in-an-ssas-query/

vous pouvez simplement faire comme suit: Sum (CInt (Fields! TestValue.Value))  ou Sum (CInt (Fields! DollarAmountOfCheck.Value), "DataSet1") Parfois, lorsque les données arrivent via WCF, il n’accepte pas la fonction Sum (). mais cela fonctionne bien dans ce cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top