我有一份主要报告和几份子报告。本质上,我想将每个子报告轮流显示大约 30 秒,然后隐藏第一个,然后显示下一个,然后在所有时间结束后重新启动。
谢谢
我有一份主要报告和几份子报告。本质上,我想将每个子报告轮流显示大约 30 秒,然后隐藏第一个,然后显示下一个,然后在所有时间结束后重新启动。
谢谢
我“认为”你可以做到这一点,但有一些警告。
您将需要设置一个数据库表来存储当前循环位置,例如,如果您有多个此类报告,您可以将其键入报告名称。
(请注意,这些名称用于主报告,与子报告无关)
ReportName LoopPosition LoopMax
MyMainReportA 0 3
AnotherReport 7 10
将数据集(让我们调用它dsLoop
)添加到您的主报告中,以更新此值并返回类似的内容。(未经测试)
DECLARE @LoopPosition int
SELECT @LoopPosition = CASE LoopPosition WHEN LoopMax THEN 1 ELSE LoopPosition + 1 END
FROM myReportLoopTable
WHERE ReportName = 'MyMainReportA'
UPDATE myReportLoopTable Set LoopPosition = @LoopPosition WHERE ReportName = 'MyMainReportA'
SELECT @LoopPosition as LPos
这段代码只是将 LoopPosition 加 1,或者如果我们达到最大值,则将其重置为 1。然后它返回这个值。
现在pLoopPos
向您的主报表添加一个参数(这可以是一个隐藏参数)并将其设置为我们的新dsLoop
数据集的默认值。
现在将每个子报表的隐藏属性更改为仅在 Parameters!pLoopPos.Value = x 时显示子报表,其中 x 是子报表的顺序。
现在,当报告运行时,它将更新循环位置并获取新值。第一个子报表将显示为 pLoopPos 将为 1 。当您的报告刷新(通过 AutoRfresh 属性)时,dsLoop
数据集将被重新评估,这将运行代码来更新值。pLoopPos 值将增加并显示下一个子报表。
您可能必须强制始终刷新参数(从参数属性)。
请注意,这是未经试验和测试的。这只是我的想法,所以我建议在花太多时间尝试实施它之前先做一个简单的测试报告。
更新:2018-04-10在您的后续问题之后,看起来使用该参数不起作用,因为它没有被刷新。但是,您可以dsLoop
直接使用返回的值。要进行更改,只需换掉
Parameters!pLoopPos.Value
和=First(Fields!LPos.Value, "dsLoop")
注意:我稍微修改了 dsLoop 查询,为最终结果命名(LPos
)。
您现在应该能够删除不再使用的参数。