2013-06-27 19 views
1

我正在嘗試在SSRS中創建一個報告,其中有一個矩陣,它具有作爲列標題的性別以及特定定義的年齡組作爲行。報告按日期排序(即顯示的記錄由modifedAt值過濾)。我的問題是,我希望顯示所有的年齡段類別,即使數據集沒有返回該行的任何數據。所以,例如,如果我將日期設置爲沒有db行的地方,那裏有age5-16的孩子 - 我仍然想顯示類別名稱,但只是將單元格與該單元格相關聯行顯示'0'。相反,報告只會丟棄整行,因爲顯然查詢不會返回任何數據。當SSRS中的數據不存在時填充爲'0'

是否有一個單獨的數據集的解決方案,該數據集將帶回整個類別列表,然後以某種方式將它們組合在一起?我卡在這裏,所以任何幫助表示讚賞!

回答

3

我能想到的幾個方法可以做到這一點:

集級別

而不是僅僅返回在DataSet中的基礎數據相關的數據,包括所有你想要顯示的類別在所有情況下。

例如對於數據庫查詢可能是從類似的去和innerleft join,即區別:

select * 
from AgeGroup 
    inner join MyData on ... 

到:

select * 
from AgeGroup 
    left join MyData on ... 

因此,報告總是有所有年齡組中顯示。哪裏有NULL的值,只顯示0.

我認爲這是最好的選擇,如果你有控制DataSet - 你不必更新你的報告,幸運的是實際的DataSet更改應該是最小化,仍然只有一個DataSet調用,並且這是迄今爲止最簡單的維護。

硬碼組到報告

在這裏,您包括您要顯示的每個組的表頭行,所以這些總是在所有情況下顯示。

這裏有一些條件表達式來顯示值,例如:對於每個組一行將針對該組:

=Sum(IIf(Fields!AgeGroup.Value = "5-16", Fields!Amount.Value, Nothing) 

這是不是太靈活,因爲你改變組將需要更新,而沒有用於佈局的許多選項。仍然只有一個DataSet調用,所以這是一個優點。

子報表

您可以顯示一行對各年齡組父數據集,然後顯示要用於該行的數據每行中嵌入一個報表。

這使您可以靈活地進行佈局,但會增加報表的複雜性,並且意味着您可以使用其他選項避免的大量DataSet調用。

2

我知道這是舊的,但我想詳細說明伊恩的第1節上面使用數據集級別的聯接。 (他的回答是超級有助於我報告我的工作。)

每個操作:

是有一個單獨的數據集帶回類別的整個列表,然後以某種方式適合他們的解決一起?

這就是我已經成功處理它的方式,但是您可以通過使用公用表表達式(或臨時表)實際創建單獨的數據集來實現。

對於這些例子表:

 AGE_Table 
    ID Group  Group_Desc Toys 
    1 A   00-10  Teddy Bear 
    2 B   11-20  Video Game 
    3 C   21-30  Sports Car 
    4 D   31-40  Mansion 
    5 E   41-50  Jewelry 

       People_Table (filtered for whatever date) 
    ID Name   Age Gender Age_Group 
    1  Ariel   07  F  A 
    2  Brandon  23  M  C 
    3  Chelsea  27  F  C 
    4  Derek   06  M  A 

你希望看到2個成績爲00-10排,2爲21-30行,然後還看到了其他年齡組行,即使有沒有任何結果。

我們希望創建一個包含所有不同年齡段的數據集,然後加入它。使用公共表表達式看哪一個解決方案:

​​

這將返回:

ID  Name  Age  Gender  Age_Group 
    1  Ariel  7  F   A 
    4  Derek  6  M   A 
    NULL NULL  NULL NULL  B 
    2  Brandon  23  M   C 
    3  Chelsea  27  F   C 
    NULL NULL  NULL NULL  D 
    NULL NULL  NULL NULL  E 

一旦你在你的數據集,您可以在報表生成器側改變NULL值設置爲0 - 我認爲在2008R2中,默認值只是空白。