2011-05-05 111 views
0

我在SSRS 2005中有一個矩陣報表,並且這些行有特定的部分。想象一下沿着左邊一系列的在SSRS 2005中顯示/隱藏沒有小計的行組?

1 $100 
2 $400 
3 $150 
4 $650 
5 $500 
6 $400 
7 $900 

而且我想要一些行可以隱藏。例如,第7行是第5行和第6行的總和,所以我希望在第7行的+/-旁邊顯示/隱藏第5行和第6行。(請注意,我不計算這些總計,它們已完成由會計師,重要的是我使用數據庫中的值,並不自己計算總數)。

現在我在數據庫中有這個「父/子」關係,我可以將它添加爲該行

 4 1 $100 
     4 2 $400 
     4 3 $150 
    - 4 4 $650 
     7 5 $500 
     7 6 $400 
    - 7 7 $900 

然後我可以在切換添加到第一列,但我不希望當他們捲起進行小計值組。我只想讓第5/6行消失,只顯示第7行。對於SSRS來說,這是一種新的方式,所以任何建議都會很棒。

因此,與一組切換:

+ 4 4 $650 
     7 5 $500 
     7 6 $400 
    - 7 7 $900 

其他gorup切換:

+ 4 4 $650 
    + 7 7 $900 

等等

 4 1 $100 
     4 2 $400 
     4 3 $150 
    - 4 4 $650 
    + 7 7 $900 

我怎麼能做到這一點,例如,我不重新計算父行(在這個例子中是第4行和第7行)?

如果有一個免費的網頁控件可以在ASP.NET中實現這一點,我很樂意聽到它。我有一種下沉的感覺,我將不得不自己編寫一些AJAX來完成這個任務。我有點想知道是否有一些黑客將一些javascript嵌入到可以實現這一目標的報告中。

回答

1

有效地就有兩個問題:

  1. 報告彙總的是來自數據庫,不計算
  2. 動態隱藏和暴露明細行

你可以用一個標準表格報告做到這一點如下:

  1. 報告數據庫小計

可以在普通的SQL做到這一點(d是詳細信息表和G是組表):

SELECT D.ParentId, D.ChildId, 
D.Description as DetailDescription, D.Amount AS DetailAmount, 
G.GroupDescription, G.GroupAmount 
FROM MyTable D INNER JOIN 
    (SELECT ChildId AS GroupId, Max(Description) as GroupDescription, MAX(Amount) AS GroupAmount 
    FROM MyTable 
    GROUP BY ChildId 
    WHERE ChildId IN (SELECT DISTINCT ParentId FROM MyTable)) G ON GroupId = D.ParentId 
WHERE D.ChildId NOT IN (SELECT DISTINCT ParentId FROM MyTable) 

所以我們正在做的是讓所有不屬於小計的行(即是ChildId不是ParentId的行),並且在嵌套select中,我們也將小計放在每個細節行上。現在,在表格中的Group中,我們可以簡單地從我們的數據集中報告GroupTotal字段,而不是實際的小計。

  1. 動態隱藏和暴露行

創建您的表中的一組。這裏是您將GroupTotal報告爲字段的位置,而不是總數(儘管如果您願意,您可以將MAX或MIN值報告)。

右鍵單擊詳細信息組,然後單擊編輯。在「可見性」選項卡上,選中「可見性可以被其他報告項目切換」複選框,然後選擇上面組中第一個文本框的文本框名稱。根據需要將初始可見性設置爲可見或隱藏。

關閉我的頭頂,未經測試,但你應該明白了。

編輯解釋佈局更好(注:上面的SQL編輯也展現描述)

我有一張桌子在這裏工作,而不是一個矩陣。

佈局會是什麼樣子如下(第一欄顯示你是在哪個組):

Table Header     Parent Id    Child Id Description             Amount 
Group1 Header =Fields!ParentId.Value       =Last(Fields!GroupDescription.Value) =Max(Fields!GroupAmount.Value) 
Details Group =Fields!ParentId.Value =Fields!ChildId.Value =Fields!DetailDescription.Value   =Fields!DetailAmount.Value 

組別設置爲組的ParentId,只顯示標題(無尾)和的ParentId文本框上該組稱爲ParentIdGroup。詳細信息組已選中「可見性可以被其他項目切換」,並且「報告項目」設置爲ParentIdGroup。

我現在已經嘲笑了這份報告,它按照你的描述工作 - 看起來小計實際上是數據庫字段,描述顯示在組行上。

+0

剛上第一讀取和尋找查詢我想你可能誤解了的事情是,總計總是可見的(如果你看到以上項目4的例子和7總是可見)。但是我認爲我明白了,並且會嘗試這種方式,並在我需要的時候回覆upvote/accept。謝謝。 – AaronLS 2011-05-06 17:07:55

+0

我可能不明白,但是如果我添加一個新的組來顯示Group Total,佈局是錯誤的。它將與其他訂單項的值分開。我需要它像一張資產負債表,其中所有的值和小計都在同一列中。 – AaronLS 2011-05-06 17:41:35

+0

是否有某種方法可以放入顯示值的文本框,某些表達式會根據另一個項目的可見性來更改值?類似於= If(Child is visible)then Fields!Amount ELSE Fields!GroupAmount so hat如果他們摺疊該部分,它會在同一列顯示GroupAmount – AaronLS 2011-05-06 17:43:31

0

我能夠通過設置表達式來完成這項數據字段值到最後,因爲在我的情況下,小計總是行系列的最後一排。每當行被展開時,Last將顯示每一行的值,因爲每行都是它自己的組。然後,無論何時使用PatenLineNumber開關摺疊,Last都會顯示該父行的值,因爲它顯示爲組中的最後一行。

所以我的矩陣報告是這樣的:

          Amount 
ParentLineNumber  ChildLineNumber  =Last(Fields!Amount.Value) 

我仍然有一個單獨的問題,但是這是一個單獨的問題。