首页 > 解决方案 > SSRS:如何将行“继续”到第二个“列”并避免浪费空白空间?

问题描述

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

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

当前布局

...这是所需的布局:

所需布局

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

标签: reporting-servicesssrs-tablixssrs-2014

解决方案


只要您的数据集可以更新以支持它,您就可以执行此操作。

首先,我抓取了一些我拥有的示例日期时间数据并将其插入到一个名为@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 我们得到这个

在此处输入图像描述

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


推荐阅读