【问题标题】:Reporting Services - Dynamic grand total with multiple lines using MatrixReporting Services - 使用矩阵的多行动态总计
【发布时间】:2016-11-08 16:06:37
【问题描述】:

我需要能够使用自定义代码来允许对不同的 4 级描述求和,并显示 4 级描述的总计。这是一份矩阵报告。

报告在这里

Report Image click here

Level 3      Level 4          2016-009    2016-010   2016-011
Arcadia      Personnel Rel     100          120        11
Arcadia      Other Expenses    100           10         1 
Arcadia      Shipping Rel      100           20         2

             Total             300          150        14

Chicago      Personnel Rel     1             30        10 
Chicago      Other Expenses    2             10        10
Chicago      Shipping Rel      100           10        10

             Total             103           50        30

Grand Total  Personnel Rel     101          150        21
             Other Expenses    102           20        11
             Shipping Rel      200           30        12

Final Total                    403          200        44                                

我开始使用这样的自定义代码,但我需要进行某种类型的收集,以存储每个时期的正确总数的描述。

在细节行上使用这个表达式

=Code.AddTotal(Sum(Fields!Activity_Amt.Value), Field!Period_Nbr.Value, Field!Level4.Value)

此代码应跟踪 4 级描述总数

自定义代码

 Public Shared detailTotal as New Collection

Public Function AddTotal(ByVal value as Double, ByVal period as String, ByVal level4 as String) as Object

Dim subtotal as Double
Dim combineStr = period & "" &level4

if  not detailTotal.Contains(combineStr) Then
   detailTotal.Add(value, combineStr)
   subtotal = detailTotal.item(combineStr)
   return subtotal
end if

subtotal = detailTotal.item(combineStr) + value
detailTotal.remove(combineStr)
detailTotal.add(subtotal,combineStr)
return detailTotal.item(combineStr)
end function

【问题讨论】:

  • 那么你已经有一些代码了吗?
  • 抱歉忘记添加了。
  • @RobertThompson,第 3 级和第 4 级是您矩阵中的组吗?您如何调用该函数以及它的预期行为是什么?在“设计”窗口中添加矩阵的屏幕截图。
  • 我添加了更多信息

标签: c# vba reporting-services


【解决方案1】:

即使您将描述存储在集合中,也不能使用它在 tablix 中生成行。我认为你有两个选择。首先是在矩阵中的一个单元格中嵌入一个 tablix,以计算每个描述的总数;第二个选项(我推荐)是在任何组的范围之外添加三行,并在每一行中硬编码描述。

请注意,总计行和最终总计超出了 3 级和 4 级行组的范围,这就是诀窍。另请注意,单元格中的每个描述都是硬编码的,因此您必须在数据集中为每个描述手动添加一行。

然后,为了计算每一行(绿色)中的Grand Total,请使用如下特定表达式。对于Personnel Rel 的总使用量:

=SUM(IIF(Fields!Level_4.Value="Personnel Rel",Fields!Activity_Amt.Value,0))

对于Other Expenses 使用:

=SUM(IIF(Fields!Level_4.Value="Other Expenses",Fields!Activity_Amt.Value,0))

对于Shipping Rel 使用:

=SUM(IIF(Fields!Level_4.Value="Shipping Rel",Fields!Activity_Amt.Value,0))

Final Total 行中使用:

=SUM(Fields!Activity_Amt.Value)

它应该产生:

如果这有帮助,请告诉我。

【讨论】:

  • 感谢亚历杭德罗的快速回复。我对你在下面所说的话有点困惑。 **“在任何组的范围之外添加三行,并对每一行中的描述进行硬编码。”**。您是说创建 3 行并隐藏它们以进行计算。
  • @RobertThompson,我的意思是你必须在总行下方插入三个附加行来计算每个级别 4 描述的总数。
  • 好的。我 5 分钟前才找到这个链接。这完成了这项工作。 sqlserverreportingservices.wordpress.com/2012/11/29/…
【解决方案2】:

我能够找到此链接来帮助解决我的问题。

https://sqlserverreportingservices.wordpress.com/2012/11/29/adding-a-group-to-a-matrix-to-create-subtotals/

我在小计上右键单击添加组 => 在下方相邻

Click this link to review the report

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多