SSRS 矩阵显示动态列组之间的差异
SSRS Matrix show difference between dynamic column groups
==根据答案编辑==
所提供的两个答案只是以不同的方式给出了所需的结果。
@Hannover_Fist 的答案显示效果更好,但在设计上更严格一些,目前它适用于周六到周六的报告,但如果重复日期跨度发生变化,则需要对每个报告进行编辑
@niktrs 的答案显示不那么干净,即使顶行非常非常小,但具有更大的灵活性,并且与最新的负 1 列相比显示了最新的列,具有更多的灵活性
==根据答案编辑==
我有一个 SSRS 矩阵,它可以动态地从数据库中提取值列表。该矩阵将每个值表示为一行,日期戳周期表示为不同的列。
数据库 table 由一个存储过程填充,该存储过程每周运行大量查询并将其快照到静态 table。
报表显示每一行每个日期戳的记录总和,并按顺序排列,以便最新的日期戳显示为最新记录。即
Report
03/04/21
27/03/21
20/03/2021
Report1
1000
990
800
Report2
100
2000
2500
我想添加一个显示在矩阵元素左侧的计算列,该列显示最新日期戳和最新(负 1)日期戳之间的差异,如下所示:
Report
Change
03/04/21
27/03/21
20/03/2021
Report1
+10
1000
990
800
Report2
-1900
100
2000
2500
这个日期戳列每周都会动态变化,因此每 7 天就会比较不同的列,即
与 2021 年 3 月 27 日相比,第 1 周为 2021 年 3 月 4 日
第 2 周为 10/04/2021 与 03/04/2021
第 3 周为 17/04/2021 与 10/04/2021
我查看了以下选项,但这些选项要么允许我查看矩阵的第一列和最后一列,要么假设分组在较长时间内 static/remain 是静态的我的 7 天。
how to subtract adjacent columns in an ssrs matrix
find the difference between two columns in an ssrs matrix
我一直无法找到满足比较动态列组要求的解决方案,该组会定期更改
实际上,您不需要使用列分组,您可以为每个报告使用整个数据集,然后过滤最近一周和前一周。
如果我们确定u我认为上周六是最后一个日期,前一周是要比较的日期,您可以使用像
这样的表达式
=SUM(IIF(Fields.DateStamp.Value = TODAY.AddDays(0 - TODAY.DayOfWeek - 1), Fields.COUNT_FIELD.Value, 0)) -
SUM(IIF(Fields.DateStamp.Value = TODAY.AddDays(0 - TODAY.DayOfWeek - 8), Fields.COUNT_FIELD.Value, 0))
这会将记录的 COUNT_FIELD 与上周六的 DATE_STAMP 相加,并减去记录的 COUNT_FIELD 与上周六的 DATE_STAMP 的总和星期六。
您可以使用自定义代码获取前两列的值和差异。
我创建了 2 个函数:
SetVariance 将字段值作为参数。它在内部计算列号并将前两个值存储在相关变量中。
GetVariance returns 值并重置变量
Public Dim column_num As Integer
Public Dim value1 As Integer
Public Dim value2 As Integer
Public Function SetVariance (v As Integer)
column_num = column_num + 1
If column_num = 1 Then value1 = v
If column_num = 2 Then value2 = v
End Function
Public Function GetVariance() As Integer
Dim var As Integer
var = value1 - value2
column_num = 0
value1 = 0
value2 = 0
Return var
End Function
为了使 SetVariance 起作用,您必须在组值(橙色)之前添加一行并调用表达式中的函数
=Code.SetVariance(Sum(Fields!Val.Value))
行高尽量小(不能隐藏否则计算不出来)
对于变化值(黄色单元格)调用 GetVariance 函数
Code.GetVariance()
==根据答案编辑==
所提供的两个答案只是以不同的方式给出了所需的结果。
@Hannover_Fist 的答案显示效果更好,但在设计上更严格一些,目前它适用于周六到周六的报告,但如果重复日期跨度发生变化,则需要对每个报告进行编辑
@niktrs 的答案显示不那么干净,即使顶行非常非常小,但具有更大的灵活性,并且与最新的负 1 列相比显示了最新的列,具有更多的灵活性
==根据答案编辑==
我有一个 SSRS 矩阵,它可以动态地从数据库中提取值列表。该矩阵将每个值表示为一行,日期戳周期表示为不同的列。 数据库 table 由一个存储过程填充,该存储过程每周运行大量查询并将其快照到静态 table。
报表显示每一行每个日期戳的记录总和,并按顺序排列,以便最新的日期戳显示为最新记录。即
Report | 03/04/21 | 27/03/21 | 20/03/2021 |
---|---|---|---|
Report1 | 1000 | 990 | 800 |
Report2 | 100 | 2000 | 2500 |
我想添加一个显示在矩阵元素左侧的计算列,该列显示最新日期戳和最新(负 1)日期戳之间的差异,如下所示:
Report | Change | 03/04/21 | 27/03/21 | 20/03/2021 |
---|---|---|---|---|
Report1 | +10 | 1000 | 990 | 800 |
Report2 | -1900 | 100 | 2000 | 2500 |
这个日期戳列每周都会动态变化,因此每 7 天就会比较不同的列,即
与 2021 年 3 月 27 日相比,第 1 周为 2021 年 3 月 4 日
第 2 周为 10/04/2021 与 03/04/2021
第 3 周为 17/04/2021 与 10/04/2021
我查看了以下选项,但这些选项要么允许我查看矩阵的第一列和最后一列,要么假设分组在较长时间内 static/remain 是静态的我的 7 天。
how to subtract adjacent columns in an ssrs matrix
find the difference between two columns in an ssrs matrix
我一直无法找到满足比较动态列组要求的解决方案,该组会定期更改
实际上,您不需要使用列分组,您可以为每个报告使用整个数据集,然后过滤最近一周和前一周。
如果我们确定u我认为上周六是最后一个日期,前一周是要比较的日期,您可以使用像
这样的表达式=SUM(IIF(Fields.DateStamp.Value = TODAY.AddDays(0 - TODAY.DayOfWeek - 1), Fields.COUNT_FIELD.Value, 0)) -
SUM(IIF(Fields.DateStamp.Value = TODAY.AddDays(0 - TODAY.DayOfWeek - 8), Fields.COUNT_FIELD.Value, 0))
这会将记录的 COUNT_FIELD 与上周六的 DATE_STAMP 相加,并减去记录的 COUNT_FIELD 与上周六的 DATE_STAMP 的总和星期六。
您可以使用自定义代码获取前两列的值和差异。
我创建了 2 个函数:
SetVariance 将字段值作为参数。它在内部计算列号并将前两个值存储在相关变量中。
GetVariance returns 值并重置变量
Public Dim column_num As Integer
Public Dim value1 As Integer
Public Dim value2 As Integer
Public Function SetVariance (v As Integer)
column_num = column_num + 1
If column_num = 1 Then value1 = v
If column_num = 2 Then value2 = v
End Function
Public Function GetVariance() As Integer
Dim var As Integer
var = value1 - value2
column_num = 0
value1 = 0
value2 = 0
Return var
End Function
为了使 SetVariance 起作用,您必须在组值(橙色)之前添加一行并调用表达式中的函数
=Code.SetVariance(Sum(Fields!Val.Value))
行高尽量小(不能隐藏否则计算不出来)
对于变化值(黄色单元格)调用 GetVariance 函数
Code.GetVariance()