我的报告中有这些数据。
然后我想将 D 列中每个 B 列值的所有值相加(按 B 列分组)。 我有这个表情。
Code.SumLookup(LookupSet(Fields!B.Value,Fields!B.Value,Fields!D.Value,"dsData"))
我在报告代码中有这个自定义函数,可以根据键对值进行分组并求和。
Function SumLookup(ByVal items As Object()) As Decimal
If items Is Nothing Then
Return Nothing
End If
Dim suma As Decimal = New Decimal()
Dim ct as Integer = New Integer()
suma = 0
ct = 0
For Each item As Object In items
suma += Convert.ToDecimal(item)
ct += 1
Next
If (ct = 0) Then return 0 else return suma
End Function
虽然我正确地得到了每行的总和,但第 3 行被删除,第 2 行作为重复项出现。 我无法理解这种行为。
我有 rdlc 文件,但与 SSRS 看到的行为相同。
#rdlc #ssrs
我看到与使用我用来调试的 Join 函数相同的行为。
Join(LookupSet(Fields!B.Value,Fields!B.Value,Fields!D.Value,"dsData"),",")
我期待的结果是
我可以使用“输入数据”数据源在报告生成器中模拟这一点,我在其中添加了此静态数据。
请帮助我理解为什么会发生这种情况以及如何在 rdl 中达到预期结果。
虽然您在第一张图像中采样的数据(请将来将数据作为文本发布)与下面的图像不匹配,但我已经复制了该问题。实际上,我在极少数情况下见过这种情况,在非常特定的情况下,上面的行中的值会重复,但是,我从未见过发布的解决方案。
但就您的情况而言,您可能根本不需要使用 VB 函数。这假设数据相当简单,您可以添加一个组(即使它实际上没有显示)。
首先,我重新创建了您的示例数据(或进一步匹配您的预期结果的版本)。这是我使用的数据集查询。我添加了更多数据来演示在多于一组记录中的这种工作方式。
declare @t table (A int, B int, C int, D decimal(10,2))
insert into @t values
(1234, 412, 1, 6523.58),
(1234, 412, 2, 6583.58),
(1234, 412, 3, 4038.64),
(1234, 999, 1, 3000),
(1234, 999, 2, 4000),
(1234, 999, 3, 5000)
SELECT * FROM @t
接下来我添加了一个表格并删除了其中的 4 列,最后我添加了第五列,我们将用它来表达我们的表达式。
现在我们有了带有默认行组的报告 (
Details
)。我右键单击 Details
行组并选择“添加组”==>“父组”,然后选择字段“B”作为分组依据。我将该组重命名为“myBGroup”。添加组后,会自动在表格左侧插入一个新列,删除该列,然后在出现提示时选择“仅删除列”。
您的报告设计应如下所示(我手动将“E”添加到标题行)
请注意,表行上有详细信息和组图标,行组窗格中有“详细信息”和“myBGroup”行组,以及当前为空白的附加列。
现在我们要做的就是在最后一栏中使用以下表达式。
=SUM(Fields!D.Value, "myBGroup")
这只是对所述上下文中的数据进行求和,在本例中是“myBGroup”,即我们行组的名称。
最终输出看起来像这样...