SSRS 2012动态列号

时间:2016-10-21 17:08:15

标签: reporting-services

我在使用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控件用于一个“连接”情况,但是这可以将多个数据集“连接”到一个结局吗?

2 个答案:

答案 0 :(得分:1)

您的解决方案是使用Matrix报表项 - 它允许按行和列执行数据分组。从数据库返回的数据应该是您拥有的这两个数据集的聚合 - 它应该是格式化的行集(StuId,StuName,StuSubject)。 然后,您可以通过StuId添加行分组(并通过StuName进行子行分组,但这不是必需的),并通过StuSubject添加列分组。详细信息单元格将只输出StuSubject。

enter image description here

请注意,尽管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")

没有测试过,但它应该可以工作。