说明: 我有一份汇总ATM交易的报告。该报告的Tablix具有以下属性: 行; 供应商,终端。 列;月,日(日期),小时。
“行”将“终端”作为“供应商”的子项,“列”将“小时”作为“日期”的子项,“日期”作为“月”的子项。 “行组”和“列组”属性指定每个子级可见性由其父级切换,如果每个子级可见性要隐藏,则默认设置。
相交的“占位符值”属性设置为Sum()事务。动作设置为转到报告,并指定接受的详细报告。 开始日期, 结束日期, 供应商 终奌站 作为详细报告的参数。每次单击链接时,它将调用详细信息报告,并在运行时设置数据集参数。因此,对于“北方”,详细报告将显示与供应商“北方”相关联的41765行。
问题: 无论矩阵中的细节分辨率如何,单击Sum()值调用细节报告时,在运行时设置的数据集参数都会发送到细节报告。例如,如果我从“月份”向下追溯到“日期”,则会发现对于“西”供应商,2018-07-01的交易总和为81。如果单击该链接以召集详细报告,它将返回起始日期和结束日期(1577行),而不是预期的日期(81)。在整个交叉路口组合中都会复制此行为。
请求: 如何调用明细报表,使其仅返回在当前状态下以相交分辨率指定的行?即:月\日期:供应商的总和或月:供应商\终端的总和或月\日期\小时:供应商\终端的总和…。
完成请求的最佳方法是什么?我的研究没有提出任何有效的建议。我试图在“占位符属性”表达式中使用InScope(),但似乎无法正确处理。
感谢您的帮助!
答案 0 :(得分:1)
您的想法是正确的,您必须使用Inscope
第1步:
对于您在主报表中用于调用子报表的每个参数,请使用类似
的表达式= Iif( Inscope("matrix1_Terminal"), Fields!Terminal.Value, Nothing)
对于数字参数(例如月份号),请设置一个类似-1的虚拟值,因为不允许使用NULL值
= Iif( Inscope("matrix1_Month"), Fields!Month.Value, -1)
第二步:
在子报表中,更改参数以接受NULL值(仅适用于字符串和日期)
第3步:
在子报表上,调整查询代码以处理虚拟参数值
对于字符串或日期
WHERE (terminal = @Terminal or @Terminal IS NULL)
对于数值
WHERE (month = @Month or @Month=-1)
重要! 不要忘记将其他需要的参数传递给子报表,例如原始报表的WHERE中的过滤器
提示:在子报表中,使用临时字符串参数进行调试并传递Inscope表达式的值