我在使用SSRS报告服务时收到了客户的请求。我是SSRS的新手。希望有人可以帮我解决下面的问题。
我使用一个常见的例子来说明问题。
在SSRS数据集1中,数据如下
StuId StuSubject
--------------------------------
1 "Math"
1 "Geography"
2 "Science"
3 "Math"
3 "History"
3 "Music"
在SSRS数据集2中,数据就像这样
StuId StuName
------------------------
1 "Tom"
2 "Joseph"
3 "Linda"
在SSRS DataSet3中,它就像
StuId StuInt
--------------------------
1 "Swim"
2 "Chess"
2 "Swim"
2 "Running"
3 "Game"
我想在SSRS报告中想要的就是这个
StuId StuName StuSubject StuSubject StuSubject StuInt StuInt StuInt
1“Tom”“Math”“Geography”NULL“Swim”NULL NULL
2“约瑟夫”“科学”NULL NULL“国际象棋”“游泳”“跑步”
3“Linda”“Math”“History”“Music”“Game”NULL NULL
棘手的部分是我不知道所有这些学生的最大StuSubject数是多少,或者更确切地说,我不想设置'StuSubject'列的限制,因为可能有数百列在实际情况中。我想到了LookupSet函数,但似乎使用LookupSet,你只能在一个单元格中用“,”连接多个StuSubjects值。
任何建议/建议都会非常感谢并提前致谢
编辑:我可以将Matrix控件用于一个“连接”情况,但是这可以将多个数据集“连接”到一个结局吗?
答案 0 :(得分:1)
您的解决方案是使用Matrix报表项 - 它允许按行和列执行数据分组。从数据库返回的数据应该是您拥有的这两个数据集的聚合 - 它应该是格式化的行集(StuId,StuName,StuSubject)。 然后,您可以通过StuId添加行分组(并通过StuName进行子行分组,但这不是必需的),并通过StuSubject添加列分组。详细信息单元格将只输出StuSubject。
请注意,尽管Lookup *函数允许您在处理报表时执行连接数据,但它们在通过SSRS处理报表时运行,因此效率肯定较低(根据我的经验表达式,几乎总是对报表性能产生非常糟糕的影响)。此外,连接whikle处理报告不是开发报告的规范方式,也不是使用SSRS引擎的最佳方式,当您需要简单分组或根本不需要分组时,SSRS引擎很有效。最好的方法是尽可能地生成与您想要显示的内容相近的SQL结果,同时考虑到报告的上下文和常识。
答案 1 :(得分:0)
按照以下步骤操作:
使用矩阵中的DataSet1
作为LINK建议的方法。
您的查询类似于以下内容:
Select StuId,StuSubject
'StuSubject' + Cast(row_number() over (partition by id order by score) as INT) StuSubjectVal
from table
您应该得到如下结果(使用矩阵后)。
StuId StuSubject1 StuSubject2 StuSubject3......
在矩阵中添加一列,并使用LookSet from DataSet1 to DataSet2。
=Lookup(Fields!StuId.Value, Fields!StuId.Value, Fields!StuName.Value, "DataSet2")
没有测试过,但它应该可以工作。