在 SSRS 中的任何列上添加 LookupSet 表达式,在结果中添加重复行

问题描述 投票:0回答:1

我的报告中有这些数据。

然后我想将 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

在 E 列中添加此表达式后,我得到的结果如下。

虽然我正确地得到了每行的总和,但第 3 行被删除,第 2 行作为重复项出现。 我无法理解这种行为。

我有 rdlc 文件,但与 SSRS 看到的行为相同。

#rdlc #ssrs

我看到与使用我用来调试的 Join 函数相同的行为。

Join(LookupSet(Fields!B.Value,Fields!B.Value,Fields!D.Value,"dsData"),",")

我期待的结果是

我可以使用“输入数据”数据源在报告生成器中模拟这一点,我在其中添加了此静态数据。

请帮助我理解为什么会发生这种情况以及如何在 rdl 中达到预期结果。

reporting-services rdlc ssrs-tablix
1个回答
0
投票

虽然您在第一张图像中采样的数据(请将来将数据作为文本发布)与下面的图像不匹配,但我已经复制了该问题。实际上,我在极少数情况下见过这种情况,在非常特定的情况下,上面的行中的值会重复,但是,我从未见过发布的解决方案。

但就您的情况而言,您可能根本不需要使用 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”,即我们行组的名称。

最终输出看起来像这样...

© www.soinside.com 2019 - 2024. All rights reserved.