Reporting services 查询驱动的SSRS矩阵行和列

Reporting services 查询驱动的SSRS矩阵行和列,reporting-services,matrix,group-by,Reporting Services,Matrix,Group By,是否有一种方法可以创建数据表/矩阵,从而行和列组由独立的查询/数据集驱动,而不是由主报表数据驱动 例如,“Person”的构造有列: -名字 -性别 -婚姻状况 我希望矩阵的列始终包含所有“性别”,行始终包含所有“婚姻状况”,而不管查询的条件如何,行/列的交点是记录的聚合计数 例如,查询可能是select*fromPerson,其中name='aaron' 返回的所有记录都是“男性”,但我仍然希望包含“女性”列(其中“女性”列中的所有计数都是0) 我希望输出结果如下所示: Marital Sta

是否有一种方法可以创建数据表/矩阵,从而行和列组由独立的查询/数据集驱动,而不是由主报表数据驱动

例如,“Person”的构造有列: -名字 -性别 -婚姻状况

我希望矩阵的列始终包含所有“性别”,行始终包含所有“婚姻状况”,而不管查询的条件如何,行/列的交点是记录的聚合计数

例如,查询可能是
select*fromPerson,其中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个数据集来驱动矩阵

  • “行数据”包含
    从个人中选择不同的婚姻状况
  • 包含
    的“ColumnData”选择与人不同的性别
    ,以及
  • “主数据”包含“从人员中选择*”,其中[…标准]

有没有办法让矩阵控件对行/列组使用单独的查询?

为什么这么难?想得容易些。。。 在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中:

这里的表达式是
=IIF(Sum(Fields!PersonID.Value)为Nothing,0,Sum(Fields!PersonID.Value))
,用于在没有人员的情况下打印0。 你得到了你想要的结果:


这将更简单,性能更好。

有3个数据集,即您的数据存在于3个独立的服务器或数据库上,这是否合适,或者您可以将所有数据组合成一个整洁的SQL?看起来,通过表达式中的一点创新,我可以将其汇总到一个查询中,该查询具有针对所有可能值的交叉连接,我没有想过使用交叉连接来选择可能的矩阵值。我认为,它应该是一个计数,而不是一个和,并且计数不应该包括null,或者使用a=sum(iif(fields!PersonID.Value为nothing,0,1),但这应该让我走上正确的轨道,谢谢!