只要您的数据集可以更新以支持它,您就可以这样做。
首先,我抓取了一些我拥有的示例日期时间数据并将其插入到名为@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,我们得到这个
您现在可以删除顶行和中间列以去掉行号和列号。如果您想在示例中使用组标题。再次在组内添加一行,但这次在顶部,然后添加一个表达式以提供您想要的标题。