2016-10-19 26 views
1

SSRS 2008 SUMが

;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

(6行と今の1列)、このデータを検討値Iは、次のレイアウトを使用してマトリックス制御にこれを適用すると図示のように出力を取得します。金額が親行にどのようにロールアップされていないかに注目してください。これは今は大丈夫です。今

enter image description here

、私は(まあ、MSDN、ブログで文書化、など)の発現を使用することができますロールアップするための値を取得するために

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

これは今では、私がしたい正確に何を私に与えます値は、親行にロールアップ:

enter image description here

をしかし、私のデータセットは動的な列だけでなく、行を持っていますが、 2番目(または3番目など)の列が導入されると、再帰的な合計は期待どおりに機能しません。現在の列の範囲内にとどまるのではなく、すべての列を合計し、それらの値を親行までロールします。示すように:

enter image description here

私は値が与えられただけの行と列の現在の範囲内でロールアップを取得します。

これは私を困惑させたので、どんな指針も大変ありがたいです。

おかげ

答えて

1

これが原因行グループのスコープと列グループのスコープの両方を見る必要に実際に可能ではない..です

私は誰のために...その答えを探して長い時間を過ごしましたそれ以外は探している。ここでは他のフォーラムからいくつかのより良い説明がある:それは、マトリクス状に2つのスコープに再帰合計を行うことができないため

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はmonthインデックスグループを無視します。実際には、NAMEとMonthIndexの両方のグループの再帰的な合計が必要ですが、SUM(Fields!Amount.Value、 "NAME"、およびMonthIndex、Recursive)のような式を書くことはできません。右?だから一般的に言えば、行列の中で、次のような式を書くと:SUM(Fields!Amount.Value)これは2つのグループNAMEとMonthIndexのスコープで合計されます。スコープを指定する場合は、 1つのスコープ。そして残念ながら、再帰的な和は2つのスコープ

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

を指定するために、あなたが必要性を説明した範囲とシナリオを指定する必要があります