2013-02-12 31 views
3

有沒有辦法創建一個表/數據矩陣,其中行&列組是從一個單獨的查詢/數據集驅動比主報表數據?查詢驅動的SSRS矩陣行和列

舉個例子來說,「人」與列的結構: - 姓名 - 性別 - 婚姻狀況

我想矩陣的列始終包含所有的「性別」,而行總是包含所有「婚姻狀態」,而不管查詢的標準如何,並且行/列的交集是記錄的總計數。

例如,查詢可能是select * from person where name = 'aaron'

返回的所有記錄都是「男性」,但我還是希望包括「女性」(這裏的「女性」列中的所有罪名將是列0 )

我希望輸出的樣子:

Marital Status: ~ Male ~ Female 
Single ~ 5 ~ 0 
Married ~ 8 ~ 0 
Defacto ~ 2 ~ 0 
... 

我不想要做一個假查詢,例如:

select 'male' as gender, null as name, null as marital_status 
union all 
select 'female' as gender, null as name, null as marital_status 
union all 
select * from person where [ ... criteria] 

這將是細以具有3個數據集驅動矩陣,如果可能的話...

  • 「RowData」 含有select distinct marital_status from person
  • 「ColumnData」 含有select distinct gender from person,和
  • 「MainData」 含有` select * from person where [... criteria]

有沒有什麼辦法讓Matrix控制對行/列組使用不同的查詢?

+0

是否有3個數據集,即您的數據是否存在於3個獨立的服務器或數據庫中,還是可以將所有數據合併爲一個整齊的SQL? – glh 2013-02-13 07:49:45

+1

看起來,在表達式中有一點創造力,我可以將它捲成1個查詢,並對所有可能的值進行交叉連接 – AndrewP 2013-02-13 22:07:16

回答

3

爲什麼這麼難?想象的更容易... 在SQL因爲這創建查詢:

WITH 
Gender AS 
(
    SELECT 1 AS GenderID, 'Male' AS GenderName 
    UNION ALL 
    SELECT 2 AS GenderID, 'Female' AS GenderName 
), 
MartialStatus AS 
(
    SELECT 1 AS MartialStatusID, 'Single' AS MStatus 
    UNION 
    SELECT 2 AS MartialStatusID, 'Married' AS MStatus 
), 
Persons AS 
(
    SELECT 1 AS PersonID, 'John' AS Name, 1 AS GenderID, 2 AS MartialStatusID 
    UNION ALL 
    SELECT 2 AS PersonID, 'Linda' AS Name, 2 AS GenderID, 1 AS MartialStatusID 
    UNION ALL 
    SELECT 3 AS PersonID, 'Mike' AS Name, 1 AS GenderID, 1 AS MartialStatusID 
    UNION ALL 
    SELECT 4 AS PersonID, 'Jenna' AS Name, 2 AS GenderID, 1 AS MartialStatusID 
) 
SELECT Gender.GenderName, MartialStatus.MStatus, Persons.PersonID, Persons.Name 
FROM Gender 
CROSS JOIN MartialStatus 
LEFT JOIN Persons ON Persons.GenderID = Gender.GenderID AND 
        Persons.MartialStatusID = MartialStatus.MartialStatusID 

其產生的結果:

Male Single 3  Mike 
Female Single 2  Linda 
Female Single 4  Jenna 
Male Married 1  John 
Female Married NULL NULL 
在你的矩陣圖BIDS列和行

然後: enter image description here

表達如果我們沒有人,打印0這裏是=IIF(Sum(Fields!PersonID.Value) IS Nothing, 0, Sum(Fields!PersonID.Value))。 ,你會得到你想要的結果:

enter image description here

它會更容易獲得更好的性能。

+0

嗨,我沒有想過使用交叉連接來選擇可能的矩陣值。我認爲在<>,它需要是一個計數而不是總數,並且計數不應該包含空值,或者可能使用a = SUM(iif(fields!PersonID)。價值沒有什麼,0,1),但這應該讓我走上正軌,謝謝! – AndrewP 2013-02-13 22:06:28