考虑这些数据(现在是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
我使用以下布局将其应用于矩阵控件,并获得如图所示的输出。请注意金额未汇总到父行的方式。现在可以了。
现在,为了获得值,我可以使用表达式(由msdn,博客等详细记录)
=Sum(Fields!Amount.Value, "RowGroup", recursive)
现在这正是我想要的东西,价值滚动到他们的父行:
但是,我的数据集有动态列和行,但是当引入第二个(或第三个,第四个等)列时,递归总和不能像我期望的那样工作。它不是保留在当前列的范围内,而是对所有列进行求和,然后将这些值滚动到父行。如图所示:
我希望这些值仅在给定行和列的当前范围内汇总。
任何指导都会非常感激,因为这让我很难过。
由于
答案 0 :(得分:1)
由于需要同时查看行组范围和列组范围,这实际上是不可能的。
我花了很长时间寻找答案..对于其他人来说。以下是其他论坛的一些更好的解释:
不幸的是,到目前为止(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的范围内求和,如果要指定范围,则必须仅指定一个范围。遗憾的是,递归总和需要指定您描述的范围和方案,以指定两个范围