SSRS:我怎样才能 "continue" 行到第二 "column" 并避免浪费空 space?
SSRS: How can I "continue" rows to a second "column" and avoid wasting empty space?
我的 Tablix 在其中一列上分组,只需要为每一行输出一个时间戳列表。由于时间戳只有两列,因此浪费了很多 space.
这是当前布局的基本模型...
...这是所需的布局:
如图所示,理想情况下,报告会动态调整以在左侧“列”中显示一组行的一半(如果不均匀,则包括额外的行),在右侧“列”中显示其余行。这对 SSRS 来说可能吗?如果与描述的不一样,你能推荐一些具有类似结果的东西吗?
只要您的数据集可以更新以支持它,您就可以执行此操作。
首先,我抓取了一些样本日期时间数据并将其插入到名为 @t
的 table 变量中。您只需要将 @t 换成您实际的 table 名称即可。这给了我以下内容
然后我获取这些数据并计算数据应该位于的行和列。在这个例子中,我使用一个参数来定义我想要的列数。如果有帮助,您可以这样做并从您的报告中传递它,或者只是将其更改为静态值。不过,我将使用传入的参数进行演示。
这是查询(注意 如果你想从你的报告中传递它,你需要注释掉 @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
这为我们提供了以下输出
现在我们要做的就是在报表中使用矩阵控件来正确显示它。
- 创建新报告
- 添加数据源和数据集
- 如上设置您的数据集查询如果您想对其进行参数化,请记住注释掉
DECLARE @Columns
行。
- 添加矩阵控件
- 将
RowNum
拖到 'Rows' 占位符,将 dt
拖到 'data' 占位符,最后将 select ColNum
拖到列占位符
矩阵应该如下所示(我们还没有完成...)
- 在行组面板中,将 GroupID 拖到现有行组上方(在我的示例中是在 rownum 上方),这样它就创建了一个 parent 组。
- 最后,通过 right-clicking rownum 文本框并执行“Insert Row, Inside Group - Below”,在 RowGroup 组内添加一个空行。这只会给我们组之间的差距
注意:我已经更改了 rownum 和 columnnum 文本框的颜色,因为我们可以在测试完成后删除它们。
最终设计应该是这样的。
当我们 运行 报告并将参数设置为 2 时,我们得到这个
将其设置为 3,我们得到这个
您现在可以删除顶行和中间列以去除行号和列号。如果你想在你的样本中有一个 header 组。再次在组内添加一行,但这次在顶部,然后添加一个表达式以提供您想要的标题。
我的 Tablix 在其中一列上分组,只需要为每一行输出一个时间戳列表。由于时间戳只有两列,因此浪费了很多 space.
这是当前布局的基本模型...
...这是所需的布局:
如图所示,理想情况下,报告会动态调整以在左侧“列”中显示一组行的一半(如果不均匀,则包括额外的行),在右侧“列”中显示其余行。这对 SSRS 来说可能吗?如果与描述的不一样,你能推荐一些具有类似结果的东西吗?
只要您的数据集可以更新以支持它,您就可以执行此操作。
首先,我抓取了一些样本日期时间数据并将其插入到名为 @t
的 table 变量中。您只需要将 @t 换成您实际的 table 名称即可。这给了我以下内容
然后我获取这些数据并计算数据应该位于的行和列。在这个例子中,我使用一个参数来定义我想要的列数。如果有帮助,您可以这样做并从您的报告中传递它,或者只是将其更改为静态值。不过,我将使用传入的参数进行演示。
这是查询(注意 如果你想从你的报告中传递它,你需要注释掉 @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
这为我们提供了以下输出
现在我们要做的就是在报表中使用矩阵控件来正确显示它。
- 创建新报告
- 添加数据源和数据集
- 如上设置您的数据集查询如果您想对其进行参数化,请记住注释掉
DECLARE @Columns
行。 - 添加矩阵控件
- 将
RowNum
拖到 'Rows' 占位符,将dt
拖到 'data' 占位符,最后将 selectColNum
拖到列占位符
矩阵应该如下所示(我们还没有完成...)
- 在行组面板中,将 GroupID 拖到现有行组上方(在我的示例中是在 rownum 上方),这样它就创建了一个 parent 组。
- 最后,通过 right-clicking rownum 文本框并执行“Insert Row, Inside Group - Below”,在 RowGroup 组内添加一个空行。这只会给我们组之间的差距
注意:我已经更改了 rownum 和 columnnum 文本框的颜色,因为我们可以在测试完成后删除它们。
最终设计应该是这样的。
当我们 运行 报告并将参数设置为 2 时,我们得到这个
将其设置为 3,我们得到这个
您现在可以删除顶行和中间列以去除行号和列号。如果你想在你的样本中有一个 header 组。再次在组内添加一行,但这次在顶部,然后添加一个表达式以提供您想要的标题。