将 SSRS Tablix 过滤为 2 列,为菜单页面链接动态更新

Filter SSRS Tablix into 2 columns that updates dynamically for menu page links

我有这个 SSRS 报告,我将其用作菜单页面,并为每个报告名称分配了一个操作以将用户带到它。但是正如您所看到的,随着越来越多的报告被添加,它正在滑过页面。

我想创建一个菜单页面,该页面在两列中包含报告名称,但不知道该怎么做。

在设计视图中,我有一个当前看起来像这样的 tablix

在数据集中使用此代码:

SELECT [ReportOrder],[ReportID],[ReportPath],[Folder],[ReportName],[ItemType]FROM [dbo].[DimSSRSReportList] WHERE Folder = 'Customer Services' AND ItemType = 'Report'

我最初的想法是并排放置两个 Tablix,过滤从左到上的 50% 和从右到下的 50%,但这只是在两边重复相同的报告

有人可以帮忙吗?

非常感谢

--------编辑!--------

我无法完全使用 MOD 函数进行列分组。我已将表达式添加到顶部,它返回的所有内容都为 1。这就是它当前的样子

如果您可以向数据中添加行号,这会更容易。

SELECT ReportOrder, ReportID, ReportPath, Folder, ReportName, ItemType, 
    ROW_NUMBER()OVER(PARTITION BY ReportID ORDER BY ReportOrder) AS ROW_NUM
FROM [dbo].[DimSSRSReportList] 
WHERE Folder = 'Customer Services' AND ItemType = 'Report'

然后使用 Tablix 显示您的数据,列分组为

=Fields!ROW_NUM.Value MOD 2 

的行分组
=INT((Fields!ROW_NUM.Value - 1) / 2)

MOD 函数将为报告名称将出现的列 return 1 或 2,而行组将数据分成 2 组。

这是对 Hannover 答案的扩展,但由于报告设计中没有计算,它应该会使事情变得更容易。

将数据集查询更改为以下...

SELECT ReportOrder, ReportID, ReportPath, Folder, ReportName, ItemType
    , CAST(((ROW_NUMBER() OVER(ORDER BY ReportOrder)-1)  / 2) as INT) as RowN
    , ((ROW_NUMBER() OVER(ORDER BY ReportOrder)-1) % 2)  as ColN
FROM [dbo].[DimSSRSReportList] 
WHERE Folder = 'Customer Services' AND ItemType = 'Report'

如果您 运行 在 SSMS 中执行此查询,您将看到您获得类似于此简化示例的数据

ReportOrder, ReportName, RowN, ColN
1            FirstReport    0     0
2            SecondReport   0     1
3            ThirdReport    1     0
4            FourthReport   1     1
5            FifthReport    2     0

下一步添加一个矩阵,设置行组按RowN分组,列组按ColN分组

应该是这样。