【问题标题】:SSRS: How can I "continue" rows to a second "column" and avoid wasting empty space?SSRS:如何将行“继续”到第二个“列”并避免浪费空白空间?
【发布时间】:2023-04-02 01:58:01
【问题描述】:

我的 tablix 在其中一个列上分组,并且只需要为每一行输出一个时间戳列表。由于时间戳只有两列,因此会浪费大量空间。

这是当前布局的基本模型...

...这是所需的布局:

如图所示,理想情况下,报表会动态调整以在左侧“列”中显示组的一半行(如果不均匀,则包括额外的行)和右侧“列”中的剩余行。 SSRS 有可能吗?如果与描述的不符,您能否提出类似结果的建议?

【问题讨论】:

    标签: reporting-services ssrs-tablix ssrs-2014


    【解决方案1】:

    只要您的数据集可以更新以支持它,您就可以这样做。

    首先,我抓取了一些我拥有的示例日期时间数据并将其插入到名为@t 的表变量中。您只需将 @t 换成您的实际表名。这给了我以下

    然后我获取这些数据并检查数据应该位于的行和列。在这个例子中,我使用一个参数来定义我想要的列数。如果有帮助,您可以这样做并从您的报告中传递它,或者只是将其更改为静态值。不过我会用传入的参数来演示。

    这是查询(注意,如果您想从报告中传递此声明,则需要注释掉 @Columns 声明,但目前我们只是在 SSMS 或类似中进行测试。

    -- REPLACE @t with your actual tablename below
    DECLARE @Columns int = 2 -- <= comment this out when you copy into your dataset query
    
    SELECT 
        *
        , ColumnNum = ((SortOrder-1) % @Columns) + 1
        , RowNum = ROW_NUMBER() OVER(PARTITION BY GroupID, SortOrder % @Columns ORDER BY SortOrder)
        FROM(
            SELECT 
                    ROW_NUMBER() OVER(PARTITION BY GroupID ORDER BY dt) as SortOrder,
                    GroupID, dt
                FROM @t) x 
        ORDER BY GroupID, SortOrder
    

    这给了我们以下输出

    现在我们要做的就是在报表中使用矩阵控件来正确显示它。

    1. 创建新报告
    2. 添加数据源和数据集
    3. 如上设置您的数据集查询记住如果要对其进行参数化,请注释掉 DECLARE @Columns 行。
    4. 添加矩阵控件
    5. RowNum拖到“行”占位符,dt拖到“数据”占位符,最后在列占位符中选择ColNum

    矩阵应该是这样的(我们还没有完成......)

    1. 在行组面板中,将 GroupID 拖到现有行组上方(在我的示例中位于 rownum 上方),以便创建父组。
    2. 最后,通过右键单击 rownum 文本框并执行“插入行,组内 - 下方”,在 RowGroup 组内添加一个空白行。这只会让我们在组之间产生差距

    注意:我已经更改了 rownum 和 columnnum 文本框的颜色,因为我们可以在测试完成后删除它们。

    最终的设计应该是这样的。

    当我们运行报告并将参数设置为 2 时,我们得到了这个

    将它设置为 3,我们得到这个

    您现在可以删除顶行和中间列以去掉行号和列号。如果您想在示例中使用组标题。再次在组内添加一行,但这次在顶部,然后添加一个表达式以提供您想要的标题。

    【讨论】:

    • 您的详细回答超出了我的预期。当我问的时候我没有意识到这一点,但事实证明我需要一个额外的组(如果你愿意的话,子组)。我相应地调整了您的 SQL,并按照相同的逻辑调整了 tablix。这无疑帮助我提高了我的 SSRS 技能。谢谢艾伦!我仍然对组头有一些问题。本质上,我希望它跨越矩阵的所有列(可以说合并单元格)。我不得不将它放在左侧的专用列中,但可能发现了一个类似的问题。很快就会尝试。
    • 您可以在 GroupID 组中的其他行上方添加一行,您应该能够合并单元格,因为它们不在详细信息组中,并将表达式设置为您喜欢的任何内容
    • 我不认为我明白了。在您的上一张图片中,我基本上希望将 3 个列标题单元格(包含 1、2 和 3)合并并跨越列。然后,我将添加一个矩形和文本框来排列组数据以使其易于呈现。但是,合并选项仅适用于双虚线左侧的单元格(即不属于列组的一部分)。
    • AH 是的,因为它是矩阵而不是表格,所以您不能跨动态列合并单元格。您可以使用子报表来做到这一点。子报表将接受单个 GroupID 参数并仅显示该组的数据,然后主报表将简单地具有绑定到组列表的表,子报表位于表的详细信息行上。这将使您完全控制,但如果您需要帮助,请提出一个新问题。
    • 子报表的想法听起来不错,我想我已经足够开始了,但现在需要停止这个想法。这将适用于 V2。 :) 再次感谢艾伦!
    猜你喜欢
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 2012-06-14
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多