将 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分组
应该是这样。
我有这个 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分组
应该是这样。