reporting-services - SSRS:如何将行“继续”到第二个“列”并避免浪费空白空间?
问题描述
我的 tablix 在它的一个列上分组,只需要为每一行输出一个时间戳列表。由于时间戳只有两列,因此会浪费大量空间。
这是当前布局的基本模型...
...这是所需的布局:
如图所示,理想情况下,报表会动态调整以在左侧“列”中显示组的一半行(如果不均匀,则包括额外的行)和右侧“列”中的剩余行。SSRS 有可能吗?如果不像描述的那样,你能提出类似结果的建议吗?
解决方案
只要您的数据集可以更新以支持它,您就可以执行此操作。
首先,我抓取了一些我拥有的示例日期时间数据并将其插入到一个名为@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
这给了我们以下输出
现在我们要做的就是在报表中使用矩阵控件来正确显示它。
- 创建新报告
- 添加数据源和数据集
- 如上所述设置您的数据集查询,如果要对其进行参数化,请记住注释掉该行。
DECLARE @Columns
- 添加矩阵控件
- 拖动
RowNum
到“行”占位符,dt
到“数据”占位符,最后ColNum
在列占位符中选择
矩阵应该是这样的(我们还没有完成......)
- 在行组面板中,将 GroupID 拖到现有行组上方(在我的示例中位于 rownum 上方),以便创建父组。
- 最后,通过右键单击 rownum 文本框并执行“插入行,组内 - 下方”,在 RowGroup 组内添加一个空白行。这只会给我们组之间的差距
注意:我已经更改了 rownum 和 columnnum 文本框的颜色,因为我们可以在测试完成后删除它们。
最终的设计应该是这样的。
当我们运行报告并将参数设置为 2 时,我们得到这个
将它设置为 3 我们得到这个
您现在可以删除顶行和中间列以摆脱行号和列号。如果您想在示例中使用组标题。再次在组内添加一行,但这次在顶部,然后添加一个表达式以提供您想要的标题。
推荐阅读
- mysql - 我用 try-catch 块包裹,但应用程序崩溃了
- c# - .net 核心 MEF 中的 ComposeParts 类似物是什么?
- javascript - 如何使用 React 创建指向导航栏的超链接?
- system - Matlab R2018b中新函数“pcsegdist”的计算错误
- javascript - 更新嵌套对象,同时保持其余对象不变
- android - 具有渐变颜色的矢量可绘制不支持低于 API 24
- c - 打开不同的 Internet Explorer 窗口
- ios - UITableView 标头与单元格边界对齐
- php - Laravel 5 - 错误调用未定义的方法 Illuminate\Events\Dispatcher::fire()
- django - 无法将计算的属性保存到 django 中的数据模型抛出错误“int”对象不可调用