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()