使用 Row 和 Column Sum 的交集作为参数调用明细报表

Calling a detail report using the intersection of Row and Column Sum as parameters

说明: 我有一份汇总 ATM 交易的报告。此报告有一个具有以下属性的 Tablix: 行; 供应商,终端。 列;月、日(日期)、小时。

行将 Terminal 分组为 Vendor 的子级,Column 将 Hour 分组为 Date 的子级,将 Date 分组为 Month 的子级。行组和列组属性指定每个子可见性由其父级切换,如果每个子可见性被隐藏则默认。

交集的占位符值 属性 设置为 Sum() 事务。 Action 设置为 Go To Report 并指定接受的详细报告; 开始日期, 结束日期, 小贩, 终端 作为详细报告的参数。每次单击 link 时,它都会使用运行时设置的数据集参数调用详细报告。因此,对于“North”,详细报告将显示与供应商“North”关联的 41765 行。

问题: 无论矩阵中细节的分辨率如何,当单击 Sum() 值调用细节报表时,运行时设置的数据集参数将发送到细节报表。例如,如果我从本月至今向下钻取,我会看到供应商“West”在 2018-07-01 的交易总和为 81。如果我单击 link 以调用详细报告,它 returns 开始日期和结束日期的总行数(1577 行),而不是预期的日期 (81)。此行为在整个交叉路口组合中复制。

要求: 如何调出详细报告,使其 returns 仅在当前状态下以交集分辨率指定的那些行?即:Month\Date 的总和:供应商或月份的总和:Vendor\Terminal 或 Month\Date\小时的总和:Vendor\Terminal…。

完成请求的最佳方法是什么?我的研究没有提出任何有效的建议。我试图在占位符属性表达式中使用 InScope(),但似乎无法正确使用。

感谢您的帮助!

你的想法是对的,必须要用Inscope

第 1 步:

对于您在主报表中用于调用子报表的每个参数,使用类似

的表达式
= Iif( Inscope("matrix1_Terminal"), Fields!Terminal.Value, Nothing)

对于数字参数(如月份)设置一个虚拟值,如 -1,因为不允许 NULL 值

= Iif( Inscope("matrix1_Month"), Fields!Month.Value, -1)

第二步:

在子报表中更改您的参数以接受 NULL 值(仅适用于字符串和日期)

第三步:

在子报表上调整您的查询代码以处理虚拟参数值

对于字符串或日期

WHERE (terminal = @Terminal or @Terminal IS NULL)

对于数值

WHERE (month = @Month or @Month=-1)

重要!! 不要忘记将其他需要的参数传递给子报表,例如原始报表 WHERE 中的过滤器

提示:在子报表中使用临时字符串参数进行调试并传递 Inscope 表达式的值