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。
我正在使用 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。