2016-11-08 48 views
-3

我需要使用自定义代码才能在不同的级别4描述上进行总结,并在级别4描述中显示总计。这是一个矩阵报告。Reporting Services - 动态总计,包含多条使用矩阵的行

这里报告

Report Image click here

enter image description 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 
+0

那么,你有一些代码了吗? – Hespen

+0

很抱歉忘了补充一点。 –

+0

@RobertThompson,3级和4级是矩阵中的组?你如何调用函数,它的期望行为是什么?在设计窗口中添加矩阵屏幕截图。 –

回答

0

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

enter image description here

注意总计行和最后总有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) 

它应该产生:

enter image description here

让我知道,如果这有助于。

+0

感谢Alejandro提供快速响应。我对你在下面的意见有点混淆。 **“在任何组的范围之外添加三行,并在每个组中加上描述。”**。你是说创建3行并隐藏它们来进行计算。 –

+0

@RobertThompson,我的意思是你必须在Total行下面插入三个合计行来计算每个Level 4描述的总数。 –

+0

好的。我刚刚在5分钟前发现了这个链接。这做到了这一点。 https://sqlserverreportingservices.wordpress.com/2012/11/29/adding-a-group-to-a-matrix-to-create-subtotals/ –