ssrs 列组从以前的值中减去

ssrs column group subtraction from previous value

我正在使用 Microsoft 报表生成器。 我在按周分组的列组中有列。此范围的字段之一应该是从当前周减去另一周的列值减去一列值。这在ssrs中可能吗?

粗略数据集:

Create table #Test
(
JobNum [nvarchar](20) 
,YearNumber int
,WeekNumber int
,Column1 int
)

insert into #Test 
VALUES
('job1',2022,1,10),
('job2',2022,1,50),
('job1',2022,2,15),
('job2',2022,2,60),
('job1',2022,3,20),
('job2',2022,3,70)

select * from #Test

drop table #Test

和构建器中的组

老实说,我不知道这是否可行(我认为不可能访问“上一个组”的范围),但也许您可以使用此解决方法。

0。开始数据集

我是从这个数据集开始的,有点类似于你的

这是 tablix 对象

1.在您的数据集上创建计算字段

在您的数据集中创建一个新的简单文件,让每个星期的编号都包含前一周的编号

=Fields!Week.Value - 1

2。添加自定义函数以对 LookupSet

的结果求和

按照 this guide 将此自定义函数添加到报表中,使我们能够对 LookupSet 函数的结果求和(非常感谢作者!)。我们将在下一点中使用它。

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

列添加一个 costum 表达式
= 
Sum(Fields!Value.Value) -
Code.SumLookup(LookupSet(Fields!PreviousWeekNumber.Value,Fields!Week.Value,Fields!Value.Value, "DataSet1"))

LookupSet 函数检索所选 table/scope(示例中的数据集 1)中的 值集,其周数等于先前的周数(在我们的默认范围内,即列组范围)。自定义函数“SumLookup”使我们能够对 LookupSet 函数返回的 VariantArray(如果没有匹配则为 Nothing)求和。

4。结果

这是结果:

如果第一周需要不同的结果,只需在第 2 列的自定义表达式中添加条件即可

编辑

如果你也有这样的行组:

您可以将前面的表达式修改为:

= 

Sum(Fields!Value.Value) -
Code.SumLookup(LookupSet(Fields!JobNum.Value & Fields!PreviousWeekNumber.Value,Fields!JobNum.Value & Fields!Week.Value,Fields!Value.Value, "DataSet1"))

根据多个条件实现 LookupSet。