我有一个SQL服务器结果集,我需要使用SSRS rdl显示。 结果集ID如下:
SpeakerId Product Topic
16 a A
16 a B
16 b C
16 a D
17 b B
17 c C
17 c E
18 a B
18 c A
19 c C
我需要根据产品在excel的不同标签中显示此信息。 每个发言者只有一行,主题将根据字母顺序以不同的方式显示。 当我试图在rdl中实现这个动态页面和列时,我面临以下问题: 如果该选项卡中的产品和扬声器没有其他产品和扬声器(在其他选项卡中)所具有的主题,我将获得主题的空白列。
请建议任何解决方法。 我尝试使用Rank但这个概念在这种情况下没有帮助,因为我们在excel中有多个页面。
谢谢。
答案 0 :(得分:0)
在这种情况下,您需要确保为所有发言人返回所有必需的主题,以便SSRS知道显示主题。
执行此操作的一种方法是使用PIVOT
查询,例如:
select SpeakerId
, [A],[B],[C],[D],[E]
from ResultSet
pivot
(
max(Product)
for Topic in ([A],[B],[C],[D],[E])
) p
您可以在此处看到,每个发言者都有一个列,用于结果中的每个主题。
这意味着在报告中,您可以使用表格而不是矩阵来显示数据。
主题数量未知?
如果您在编写报告查询之前不知道所需主题,则可能仍会遇到问题 - 在这种情况下,我建议您确保在主题表中包含OUTER JOIN
。
这显然取决于您的数据。但这很有用,因为这意味着每个主持人每个主题都有一行,这就是你需要的......在这里你将使用矩阵在报告中显示结果。
无论您使用何种方法,目标都是获取包含每个可能的扬声器/主题组合的SSRS DataSet,即使主题的实际值为NULL
,因此报告始终显示相同的主题列每个演讲者。