【问题标题】:Remove the dynamically generated blank columns from rdl从 rdl 中删除动态生成的空白列
【发布时间】:2013-07-05 10:26:30
【问题描述】:

我有一个需要使用 SSRS rdl 显示的 SQL 服务器结果集。 结果集 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 中有多个页面。

谢谢。

【问题讨论】:

    标签: sql reporting-services sql-server-2008-r2 rdl ssrs-grouping


    【解决方案1】:

    在这种情况下,您需要确保为所有发言者返回所有必需的主题,以便 SSRS 知道要显示这些主题。

    一种方法是使用PIVOT 查询,例如:

    select SpeakerId
      , [A],[B],[C],[D],[E]
    from ResultSet
    pivot
    (
      max(Product)
      for Topic in ([A],[B],[C],[D],[E])
    ) p
    

    SQL Fiddle with demo.

    您可以在此处看到每个演讲者在结果中的每个主题都有一个列。

    这意味着在报表中,您可以使用表格而不是矩阵来显示数据。

    未知数量的主题?

    如果您在编写报告查询之前不知道所需的主题,您可能仍然会遇到问题 - 在这种情况下,我建议您确保在主题表中包含 OUTER JOIN

    显然,这取决于您的数据。但这很有用,因为这意味着每个演讲者的每个主题都会有一行,这是您需要的...在这里您将使用矩阵在报告中显示结果。

    无论您使用什么方法,目标都是为 SSRS 获取一个包含所有可能的演讲者/主题组合的数据集,即使主题的实际值为 NULL,因此报告始终为每个主题显示相同的主题列演讲者。

    【讨论】:

    • 谢谢伊恩。但实际上在我的情况下,主题与产品有关。有些产品会有一些主题,而另一些产品会有一些其他主题。因此,我们不能在所有产品选项卡中拥有所有主题。如果您对此案有任何意见,请提出建议。
    猜你喜欢
    • 2011-10-27
    • 2011-07-22
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多