我有一份关于SSRS的报告,其数据集包含以下3个字段:
Fields!MyFirstField.Value
Fields!MySecondField.Value
Fields!MyThirdField.Value
该报告分为一组: 在我的Row文件中我有
MyPrimaryGroup
MySeconday Group
我拥有制作每个小组的Field:
Fields!Group.Value
这个想法是积累每个领域的每个组的第一个元素。
我做的是以下内容:
Dim Acum as Double
Dim ActualGroup = ""
Function Accumulator(ByVal MyGroup as String, ByVal value as Double) As Double
If ActualGroup <> MyGroup
Acum= Acum + value
ActualGroup = MyGroup
Return Acum
value=0
End If
End Function
在此之后我做了一个像这样的计算字段:
=Code.Accumulator(Fields!Group.Value,Fields!MyFirstField.Value)
并将它放在我的主要组中的一排,事实是,它只是累积前两个,例如:
在此图中我们有一个图形示例,代码正在执行的是保存每个组的第一个元素,因此在这种情况下,累计值应为10+11+12=33
,但代码正在给我21
,不保存第三个值]
这是问题的一部分,另一个问题是我不能使这个累加器使用具有运行值表达式的字段,例如:
FormatNumber(RunningValue(Fields!MySecondField.Value, Sum,"MyDataset"), 2)
有没有办法对每个组的第一个元素求和并积累其值,与实际上是一个运行值的字段相同?
在你看到蓝色圆圈的地方,在我想要放置代码的组中的那些字段中,MyField3是运行值,这些是组:
所以代码应该:
If MERCH308 <> "" then
0 = 0 + 6,80
"" = MERCH308
End If
在下一组中应该这样做:
If MERCH314 <> MERCH308
6,80 = 6,80 + 22,28
MERCH308 = MERCH314
End If
到下一个:
If MERCH314 <> MERCH314
//It does not enter the if
直到它看到一个与MERCH314不同的新组,问题是,代码正常运行的唯一方法(我进一步调查)是在tablix中取消标记分页并标记&#34;维护如果可能的话,在一页中的所有内容&#34;。
我试图用runningvalue问题说的是:
MyFields3是一个运行值:
=FormatNumber(RunningValue(Fields!MyFields3.Value, Sum,"MyDataset",2)
但我无法申请:
Code.Accumulator(Fields!MyGroup.Value,RunningValue(Fields!MyFields3.Value,Sum,"Mydataset")
正如它所说&#34;有一个错误的数字作为函数RunningValue的参数&#34;
因此,我们的想法是将每个累加器组的第一个元素累积为&#34; RunningValue&#34;事实上,这是一个累加器,所以我的想法是总结(对于我的第三列)6,80 + 29,08。但请记住,29,08是运行值的结果。
答案 0 :(得分:0)
我可以帮助您解决问题的第一部分,所以我的回答是部分原因我不会因为运行价值字段而遇到问题,所以我想猜测你需要什么。
您必须转到report / report properties / code
标签并添加以下代码:
Dim public total as Integer
Dim public prevgroup as String = ""
Public Function AddTotal(ByVal group as String,ByVal value AS Integer ) AS Integer
If (group <> prevgroup) Then
total = total + value
prevgroup = group
return total
End If
return 0
End Function
Public Function GetTotal()
return total
End Function
这是对您的数据安排的猜测。
使用此表达式获取每个不同组的第一个值的总和:
=Code.GetTotal()
使用此项获取运行值:
=Code.AddTotal(Fields!Group.Value,Fields!Value.Value)
它将预览:
红色矩形表示我的数据集,其他数据由表达式添加。
更新:根据用户规范运行第一个值。
如果这有用,请告诉我。
您可以通过向数据集查询添加行号来实现此目的。
select
ROW_NUMBER() OVER (Order by (select 1)) as row_num,
*
from CTE
注意我只是添加行号并从CTE中选择所有字段。 这是我的数据集:
修改AddTotal
功能,如下所示
Dim public total as Integer
Dim public prevgroup as String = ""
Public Function AddTotal(ByVal group as String,ByVal value AS Integer, ByVal nextGroup As String ) AS Integer
If (group <> prevgroup) Then
total = total + value
prevgroup = group
End If
If (group <> nextGroup) Then
return total
End If
return 0
End Function
配置您的Tablix如下:
在表达式中设置以下代码:
=Code.AddTotal(Fields!Group.Value,Fields!Value.Value,
lookup(Fields!row_num.Value + 1,Fields!row_num.Value,Fields!Group.Value,"DataSet5")
)
选择表达式行并使用以下代码设置Row visibility
设置:
=Iif(Code.AddTotal(Fields!Group.Value,Fields!Value.Value,
lookup(Fields!row_num.Value + 1,Fields!row_num.Value,Fields!Group.Value,"DataSet5")
)=0,True,False)
这将预览以下Tablix: