3

特定の基準でテーブルにグループ化されたデータがあり、グループごとに、そのグループに属する各詳細行の値の平均 (実際のケースはもう少しトリッキーです) が計算されます。この平均は、各グループのフッター行に表示されます。この簡単な例を見てみましょう:

レポート テーブル

私が今欲しいのは、テーブルのフッターに総計を表示することです。総計は、各グループの平均を加算して計算する必要があります (たとえば、この例では、総計は 20 + 15 = 35 になります)。ただし、集計関数をネストすることはできません。どのようにできるのか?

4

5 に答える 5

3

両方のグループの外側のスコープであるテーブル フッターに SUM() 関数を追加するだけで、それらをすべて合計できます。条件を合計している場合は、それもそこに入れる必要があるかもしれません。

于 2008-11-20T15:46:16.493 に答える
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()」に置き換えます。

于 2008-11-20T15:54:28.427 に答える
1

残念ながら、現時点ではレポート開発ボックスから離れていますが、次のいずれかです:
=(sum(Fields!Column1 + sum(Fields!Column2))
OR
=SUM(sum(Fields!Column1) + sum(Fields!Column2))

私はそれが2の最初であることを確信しています。

于 2008-10-20T02:09:18.437 に答える
1

実際にはできませんが、だますことはできます。私はこれに対する解決策をここにブログしました: http://dataqueen.unlimitedviz.com/2011/05/ssrs-aggregate-last-ytd-or-last-child-value-in-an-ssas-query/

于 2011-06-05T13:35:43.080 に答える