SSRS 2008 SUM使用范围和递归选项来汇总值

时间:2016-10-19 13:17:42

标签: sql-server recursion reporting-services ssrs-2008

考虑这些数据(现在是6行和1列)

;with cols as
(
 SELECT 1 colID, 'C1' col
 --UNION SELECT 2, 'C2' 
)
, rows as
(
 SELECT 1 RowID, 'R1' row, null ParentID
 UNION SELECT 2, 'R2', 1
 UNION SELECT 3, 'R3', 2 
 UNION SELECT 4, 'R4', 2 
 UNION SELECT 5, 'R5', 1 
 UNION SELECT 6, 'R6', 1 
)
,data
AS
(
 SELECT 3 RowID, 1 as Amount
 UNION SELECT 4 RowID, 2 as Amount
)
SELECT r.RowID, r.row, c.colID, c.col, d.Amount, r.ParentID
FROM rows r 
CROSS JOIN cols c
LEFT JOIN data d on d.RowID = r.RowID

enter image description here

我使用以下布局将其应用于矩阵控件,并获得如图所示的输出。请注意金额未汇总到父行的方式。现在可以了。

enter image description here

现在,为了获得值,我可以使用表达式(由msdn,博客等详细记录)

=Sum(Fields!Amount.Value, "RowGroup", recursive)

现在这正是我想要的东西,价值滚动到他们的父行:

enter image description here

但是,我的数据集有动态列和行,但是当引入第二个(或第三个,第四个等)列时,递归总和不能像我期望的那样工作。它不是保留在当前列的范围内,而是对所有列进行求和,然后将这些值滚动到父行。如图所示:

enter image description here

我希望这些值仅在给定行和列的当前范围内汇总。

任何指导都会非常感激,因为这让我很难过。

由于

1 个答案:

答案 0 :(得分:1)

由于需要同时查看行组范围和列组范围,这实际上是不可能的。

我花了很长时间寻找答案..对于其他人来说。以下是其他论坛的一些更好的解释:

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/55c55aad-4755-4da5-afce-94d16c9e201d/cannot-perform-a-correct-recursive-sum-in-a-tablix?forum=sqlreportingservices

  

不幸的是,到目前为止(2008年和2005年)都不支持您描述的场景,因为它不能在矩阵的两个范围内执行递归求和。如果用SUM(Fields!Amount.Value," NAME",Recursive)替换表达式,您将获得递归总计,但tota将忽略monthindex组。实际上,你想要对NAME和MonthIndex这两个组进行递归求和,但是你不能写这样的表达式:SUM(Fields!Amount.Value," NAME"和MonthIndex,Recursive)。对?所以一般来说,在矩阵中,当您编写如下表达式时:SUM(Fields!Amount.Value)它将在两个groupsNAME和MonthIndex的范围内求和,如果要指定范围,则必须仅指定一个范围。遗憾的是,递归总和需要指定您描述的范围和方案,以指定两个范围

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/9d7f36bc-73d6-4f19-a306-0b84321e6feb/calculating-the-sum-on-a-hierarchy-with-multiple-grouping-columns?forum=sqlreportingservices