使用此数据集:
Category | Amount
A | 5
A | 3
B | 6
B | 2
B | 1
C | 7
我想在类别上创建一个tablix分组,显示总金额的百分比:
Category | Percentage
A | 33%
B | 38%
C | 29%
这应该是一个简单的计算:
Category | Percentage
A | ((Sum of Amount within group / Sum of Amount across groups) * 100)%
B | ((Sum of Amount within group / Sum of Amount across groups) * 100)%
C | ((Sum of Amount within group / Sum of Amount across groups) * 100)%
但我无法弄清楚如何在报表设计器(SSRS)中执行此操作 - 每当我在Category
上创建行分组时,我都可以使用=Sum(Fields!Amount.Value)
获取组内的总和。但是如何从组内的单元格中获取组之间的总和?
答案 0 :(得分:26)
我会回答我自己的问题。
在任何表达式中,都可以在所有数据集中执行查找。通过这种方式,我们将获得数据:
LookupSet(SourceFieldToCompare, TargetFieldToCompare, ResultField, DataSet)
现在,让我们提高问题的标准并说数据分组在另一个维度,几个月 - 就像这样:
Category | January | February | March
A | 33% | 37% | 35%
B | 38% | 36% | 37%
C | 29% | 27% | 28%
假设问题中提到的数据集名为“类别”。现在,请致电LookupSet
函数(Reference):
LookupSet(Fields!Month.Value, Fields!Month.Value, Fields!Amount.Value, "categories")
(请记住,第一个“月”链接到Tablix中的数据集,第二个参数中的第二个“月”是“类别”数据集中的“月”!)
还有一个问题:LookupSet返回Object
类型,Sum
不会吃。您需要使用自定义聚合(在“报告属性”中添加自定义代码):( Source)
Function SumLookup(ByVal items As Object()) As Decimal
If items Is Nothing Then
Return Nothing
End If
Dim suma As Decimal = New Decimal()
suma = 0
For Each item As Object In items
suma += Convert.ToDecimal(item)
Next
Return suma
End Function
现在,通过在Code.SumLookup
函数上调用LookupSet
,计算所有字段的总和。
答案 1 :(得分:2)
您可以使用范围描述符来标识要对其运行SUM的组:
分组金额:[总和(金额)]
数据集总计:SUM(字段!Amount.Value,“DataSet1”)
百分比:SUM(字段!Amount.Value,“类别”)/SUM(Fields!Amount.Value,“DataSet1”)