SSRS日期和期限时间参数基于一天中的时间

时间:2015-06-12 20:05:03

标签: reporting-services ssrs-2012

我试图在微软的SSRS中为值参数编写一个表达式但是很挣扎。基本上我们有一个报告,从0800开始运行24小时,然后在下一个0800小时再次重置报告,在24小时内多次提取报告。

我认为我理解逻辑,但我并不足以将其转移到代码中。类似的东西:

If today's time => 0800 Then
Extract values from today's time 0800 onwards
Else If today's time < 0800 Then
Extract values from today + yesterday after 0800

3 个答案:

答案 0 :(得分:1)

我认为您会想要类似于下面的内容,但如果没有关于报告值的更多信息,您将不得不将该部分分成几部分:

=Iif((FormatDateTime(Now(),HH:mm)) >= "0800", 
TodaysTimeOnwards.Value, 
Iif((FormatDateTime(Now(),HH:mm)) < "0800", YesterdayTime.Value, Nothing)

答案 1 :(得分:0)

我相信这就是你所描述的

开始:=Now().AddHours(-8).Date.AddHours(8)

结束:=Now().AddHours(-8).Date.AddHours(8).AddDays(1).AddSeconds(-1)

答案 2 :(得分:0)

您是指根据报告执行时间提取值以获取不同的数据集值吗?或者只是在报告中打印一个时间值?

如果是第一个,你将组织你的代码,使用sql内联或存储过程no作为ssrs表达式我认为但是给定@DateFrom和@DateTo参数给定值取决于执行的时间。

示例:

1 - &gt;在数据源功能中,这将是您需要检索数据的SQL

SELECT * FROM DataSet WHERE Time BETWEEN @DateFrom AND @DateTo

2 - &gt;根据执行时间给予@DateFrom和@DateTo适当的值。

a)通过其功能菜单

中的表达式设置@DateFrom默认值

- @ DateFrom:“=Iif(DatePart("h",now())>8,DateAdd("hh",+8,DateAdd("dd",DateDiff("dd",0,now()),0)),DateAdd("hh",+8,DateAdd("dd",DateDiff("dd",0,getdate())-1,0)))

- @ DateTo: “=Iif(DatePart("h",now())>8,now(),DateAdd("hh",+8,DateAdd("dd",DateDiff("dd",0,now()),0)))

b)通过在其特征值中配置它的查询值设置@DateFrom默认值。

为@DateFrom创建一个新的数据源,如下所示:

IF DatePart(hh,getdate()) >= 8
BEGIN

 SELECT DateAdd(hh,+8,DateAdd(dd,DateDiff(dd,0,getdate()),0))

ELSE 

 SELECT DateAdd(hh,+8,DateAdd(dd,DateDiff(dd,0,getdate())-1,0))

然后像这样为@DateTo创建一个新的数据源:

IF DatePart(hh,getdate()) >= 8
BEGIN

 SELECT GetDate()

ELSE 

 SELECT DateAdd(hh,+8,DateAdd(dd,DateDiff(dd,0,getdate()),0))