SSRS如何以幻灯片方式在报告之间轮换?

时间:2014-09-04 19:08:13

标签: reporting-services report dashboard ssrs-2008-r2

我的任务是创建一个可在电视监视器上显示的仪表板。此仪表板有5个不同的图表,需要以幻灯片方式显示 - 换句话说,一次一个图表,在一个定时间隔内旋转到下一个图表。

我使用此处发布的解决方案property =IIf(Second(Now()) >= 48 AND Second(Now()) <= 60, False, True)等解决方案,报告以12秒的间隔自动刷新。

然而,我的经理回复给我的反馈是12秒太短的间隔,并且他希望每个报告在旋转到下一个报告之前20秒。

有没有人对如何实现这一点有任何想法?

非常感谢。

3 个答案:

答案 0 :(得分:2)

您希望从60秒循环移动到100秒循环。

根据您现有的代码,您可以使用以下内容:

=IIf(DateDiff(DateInterval.Second, Today(), Now()) Mod 100 >= 80
    AND DateDiff(DateInterval.Second, Today(), Now()) Mod 100 <= 99
  , False
  , True)

你可以通过获取自Modulo 100日开始的秒数来获得100秒的周期。然后你可以将它分解为表达式中的20个桶而不是12个桶。

答案 1 :(得分:0)

我使用自定义代码扩展了Ian Preston的解决方案。我基本上想使解决方案完全可扩展。

在“行可见性”表达式中使用此命令: =Code.SubReportHidden(RowNumber("Tablix1"), CountRows("Tablix1"), Parameters!ReportRefresh.Value, Now())

这是一个自定义参数,可随时更改刷新。您还需要在“报告自动刷新”属性中引用它。

Parameters!ReportRefresh.Value

将此添加到您的报告自定义代码中:

Public CurrentTimeInSeconds As Long
Private MinCycleRange As Long
Private MaxCycleRange As Long
Private PageCount As Integer
Private Page As Integer
Private FullCycle As Long
Private CurrentTime As DateTime

Public Function SubReportHidden(ByVal page As Integer, ByVal pageCount As Integer, 
  ByVal interval As Long, ByVal now As DateTime) As Boolean

If page.Equals(0) Then Throw New ArgumentOutOfRangeException("page")
If pageCount.Equals(0) Then Throw New ArgumentOutOfRangeException("pageCount")
If interval.Equals(0) Then Throw New ArgumentOutOfRangeException("interval")

Me.PageCount = pageCount
Me.Page = page
FullCycle = interval * pageCount
CurrentTime = now
SetCurrentTimeInSeconds()

SetMaxCycleRange()
SetMinCycleRange()

Dim visable As Boolean = True
If InRange() Then
  visable = False
End If
Return visable
End Function

Private Function InRange() As Boolean
Dim insideRange As Boolean = False
If CycleProgressPercent() > MinCycleRange AndAlso CycleProgressPercent() <= 
  MaxCycleRange Then
  insideRange = True
End If
Return insideRange
End Function

Private Function CycleProgressInSeconds() As Long
  Return CurrentTimeInSeconds Mod FullCycle
End Function

Public Function CycleProgressPercent() As Integer
  Return CInt(CycleProgressInSeconds() / FullCycle * 100)
End Function

Private Sub SetCurrentTimeInSeconds()
  CurrentTimeInSeconds = DateDiff(DateInterval.Second, DateTime.Today, CurrentTime )
End Sub

Private Sub SetMinCycleRange()
  MinCycleRange = CLng(((Page - 1) / PageCount) * 100)
End Sub

Private Sub SetMaxCycleRange()
  MaxCycleRange = CLng(((Page / PageCount) * 100))
End Sub

我也花时间重写了代码,请查看我的GitHub以获取可测试的解决方案。 GitHubSSRS_Item_Cycle_Demo

答案 2 :(得分:0)

我们使用大约16个屏幕来执行此操作,我可以使用称为Vue Pilot的工具从单个仪表板同时以可变间隔等方式同时更新所有屏幕。

https://www.vuepilot.com上查看